]> git.bitcoin.ninja Git - ldk-java/commitdiff
[C#] Update auto-generated bindings
authorMatt Corallo <git@bluematt.me>
Sun, 1 Sep 2024 13:12:29 +0000 (13:12 +0000)
committerMatt Corallo <git@bluematt.me>
Tue, 3 Sep 2024 15:05:16 +0000 (15:05 +0000)
528 files changed:
c_sharp/bindings.c
c_sharp/bindings.c.body
c_sharp/src/org/ldk/enums/BalanceSource.cs [new file with mode: 0644]
c_sharp/src/org/ldk/enums/Bolt12SemanticError.cs
c_sharp/src/org/ldk/enums/ConfirmationTarget.cs
c_sharp/src/org/ldk/enums/CreationError.cs
c_sharp/src/org/ldk/enums/Direction.cs
c_sharp/src/org/ldk/enums/PaymentFailureReason.cs
c_sharp/src/org/ldk/enums/RetryableSendFailure.cs
c_sharp/src/org/ldk/enums/Secp256k1Error.cs
c_sharp/src/org/ldk/impl/bindings.cs
c_sharp/src/org/ldk/structs/APIError.cs
c_sharp/src/org/ldk/structs/AcceptChannel.cs
c_sharp/src/org/ldk/structs/AcceptChannelV2.cs
c_sharp/src/org/ldk/structs/AnchorDescriptor.cs
c_sharp/src/org/ldk/structs/AnnouncementSignatures.cs
c_sharp/src/org/ldk/structs/AsyncPaymentsMessage.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/AsyncPaymentsMessageHandler.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/BackgroundProcessor.cs
c_sharp/src/org/ldk/structs/Balance.cs
c_sharp/src/org/ldk/structs/BlindedForward.cs
c_sharp/src/org/ldk/structs/BlindedHop.cs
c_sharp/src/org/ldk/structs/BlindedHopFeatures.cs
c_sharp/src/org/ldk/structs/BlindedMessagePath.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/BlindedPath.cs [deleted file]
c_sharp/src/org/ldk/structs/BlindedPayInfo.cs
c_sharp/src/org/ldk/structs/BlindedPaymentPath.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/BlindedTail.cs
c_sharp/src/org/ldk/structs/Bolt11Invoice.cs
c_sharp/src/org/ldk/structs/Bolt11InvoiceFeatures.cs
c_sharp/src/org/ldk/structs/Bolt11InvoiceSignature.cs
c_sharp/src/org/ldk/structs/Bolt11ParseError.cs
c_sharp/src/org/ldk/structs/Bolt12Invoice.cs
c_sharp/src/org/ldk/structs/Bolt12InvoiceFeatures.cs
c_sharp/src/org/ldk/structs/Bolt12OfferContext.cs
c_sharp/src/org/ldk/structs/Bolt12PaymentError.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/BumpTransactionEvent.cs
c_sharp/src/org/ldk/structs/CandidateRouteHop.cs
c_sharp/src/org/ldk/structs/ChainMonitor.cs
c_sharp/src/org/ldk/structs/ChainParameters.cs
c_sharp/src/org/ldk/structs/ChannelAnnouncement.cs
c_sharp/src/org/ldk/structs/ChannelConfig.cs
c_sharp/src/org/ldk/structs/ChannelConfigUpdate.cs
c_sharp/src/org/ldk/structs/ChannelCounterparty.cs
c_sharp/src/org/ldk/structs/ChannelDerivationParameters.cs
c_sharp/src/org/ldk/structs/ChannelDetails.cs
c_sharp/src/org/ldk/structs/ChannelFeatures.cs
c_sharp/src/org/ldk/structs/ChannelHandshakeConfig.cs
c_sharp/src/org/ldk/structs/ChannelHandshakeLimits.cs
c_sharp/src/org/ldk/structs/ChannelId.cs
c_sharp/src/org/ldk/structs/ChannelInfo.cs
c_sharp/src/org/ldk/structs/ChannelManager.cs
c_sharp/src/org/ldk/structs/ChannelManagerReadArgs.cs
c_sharp/src/org/ldk/structs/ChannelMessageHandler.cs
c_sharp/src/org/ldk/structs/ChannelMonitor.cs
c_sharp/src/org/ldk/structs/ChannelMonitorUpdate.cs
c_sharp/src/org/ldk/structs/ChannelParameters.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/ChannelPublicKeys.cs
c_sharp/src/org/ldk/structs/ChannelReady.cs
c_sharp/src/org/ldk/structs/ChannelReestablish.cs
c_sharp/src/org/ldk/structs/ChannelSigner.cs
c_sharp/src/org/ldk/structs/ChannelTransactionParameters.cs
c_sharp/src/org/ldk/structs/ChannelTypeFeatures.cs
c_sharp/src/org/ldk/structs/ChannelUpdate.cs
c_sharp/src/org/ldk/structs/ChannelUpdateInfo.cs
c_sharp/src/org/ldk/structs/ChannelUsage.cs
c_sharp/src/org/ldk/structs/ClaimedHTLC.cs
c_sharp/src/org/ldk/structs/ClosingSigned.cs
c_sharp/src/org/ldk/structs/ClosingTransaction.cs
c_sharp/src/org/ldk/structs/ClosureReason.cs
c_sharp/src/org/ldk/structs/CoinSelection.cs
c_sharp/src/org/ldk/structs/CoinSelectionSource.cs
c_sharp/src/org/ldk/structs/CommitmentSigned.cs
c_sharp/src/org/ldk/structs/CommitmentSignedBatch.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/CommitmentUpdate.cs
c_sharp/src/org/ldk/structs/CommonAcceptChannelFields.cs
c_sharp/src/org/ldk/structs/CommonOpenChannelFields.cs
c_sharp/src/org/ldk/structs/CounterpartyChannelTransactionParameters.cs
c_sharp/src/org/ldk/structs/CustomMessageHandler.cs
c_sharp/src/org/ldk/structs/CustomOnionMessageHandler.cs
c_sharp/src/org/ldk/structs/DefaultMessageRouter.cs
c_sharp/src/org/ldk/structs/DefaultRouter.cs
c_sharp/src/org/ldk/structs/DelayedPaymentKey.cs
c_sharp/src/org/ldk/structs/DelayedPaymentOutputDescriptor.cs
c_sharp/src/org/ldk/structs/Description.cs
c_sharp/src/org/ldk/structs/Destination.cs
c_sharp/src/org/ldk/structs/EcdsaChannelSigner.cs
c_sharp/src/org/ldk/structs/ErroneousField.cs
c_sharp/src/org/ldk/structs/ErrorAction.cs
c_sharp/src/org/ldk/structs/ErrorMessage.cs
c_sharp/src/org/ldk/structs/Event.cs
c_sharp/src/org/ldk/structs/EventHandler.cs
c_sharp/src/org/ldk/structs/EventsProvider.cs
c_sharp/src/org/ldk/structs/FailureCode.cs
c_sharp/src/org/ldk/structs/Filter.cs
c_sharp/src/org/ldk/structs/ForwardNode.cs [deleted file]
c_sharp/src/org/ldk/structs/ForwardTlvs.cs
c_sharp/src/org/ldk/structs/FourTuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZ.cs
c_sharp/src/org/ldk/structs/FundingCreated.cs
c_sharp/src/org/ldk/structs/FundingInfo.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/FundingSigned.cs
c_sharp/src/org/ldk/structs/GraphSyncError.cs
c_sharp/src/org/ldk/structs/HTLCDescriptor.cs
c_sharp/src/org/ldk/structs/HTLCDestination.cs
c_sharp/src/org/ldk/structs/HTLCOutputInCommitment.cs
c_sharp/src/org/ldk/structs/HeldHtlcAvailable.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/HolderCommitmentTransaction.cs
c_sharp/src/org/ldk/structs/HtlcKey.cs
c_sharp/src/org/ldk/structs/IgnoringMessageHandler.cs
c_sharp/src/org/ldk/structs/InMemorySigner.cs
c_sharp/src/org/ldk/structs/InboundHTLCDetails.cs
c_sharp/src/org/ldk/structs/Init.cs
c_sharp/src/org/ldk/structs/InitFeatures.cs
c_sharp/src/org/ldk/structs/Input.cs
c_sharp/src/org/ldk/structs/IntroductionNode.cs
c_sharp/src/org/ldk/structs/InvoiceError.cs
c_sharp/src/org/ldk/structs/InvoiceRequest.cs
c_sharp/src/org/ldk/structs/InvoiceRequestFeatures.cs
c_sharp/src/org/ldk/structs/InvoiceRequestFields.cs
c_sharp/src/org/ldk/structs/InvoiceWithDerivedSigningPubkeyBuilder.cs
c_sharp/src/org/ldk/structs/InvoiceWithExplicitSigningPubkeyBuilder.cs
c_sharp/src/org/ldk/structs/KeysManager.cs
c_sharp/src/org/ldk/structs/LightningError.cs
c_sharp/src/org/ldk/structs/MessageContext.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/MessageForwardNode.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/MessageRouter.cs
c_sharp/src/org/ldk/structs/MessageSendEvent.cs
c_sharp/src/org/ldk/structs/MessageSendEventsProvider.cs
c_sharp/src/org/ldk/structs/MessageSendInstructions.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/MonitorEvent.cs
c_sharp/src/org/ldk/structs/MonitorUpdateId.cs [deleted file]
c_sharp/src/org/ldk/structs/MonitorUpdatingPersister.cs
c_sharp/src/org/ldk/structs/NetworkGraph.cs
c_sharp/src/org/ldk/structs/NetworkUpdate.cs
c_sharp/src/org/ldk/structs/NodeAnnouncement.cs
c_sharp/src/org/ldk/structs/NodeAnnouncementDetails.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/NodeAnnouncementInfo.cs
c_sharp/src/org/ldk/structs/NodeFeatures.cs
c_sharp/src/org/ldk/structs/NodeId.cs
c_sharp/src/org/ldk/structs/NodeInfo.cs
c_sharp/src/org/ldk/structs/NodeSigner.cs
c_sharp/src/org/ldk/structs/Nonce.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Offer.cs
c_sharp/src/org/ldk/structs/OfferFeatures.cs
c_sharp/src/org/ldk/structs/OfferWithDerivedMetadataBuilder.cs
c_sharp/src/org/ldk/structs/OfferWithExplicitMetadataBuilder.cs
c_sharp/src/org/ldk/structs/OffersContext.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/OffersMessage.cs
c_sharp/src/org/ldk/structs/OffersMessageHandler.cs
c_sharp/src/org/ldk/structs/OnionMessage.cs
c_sharp/src/org/ldk/structs/OnionMessageContents.cs
c_sharp/src/org/ldk/structs/OnionMessageHandler.cs
c_sharp/src/org/ldk/structs/OnionMessagePath.cs
c_sharp/src/org/ldk/structs/OnionMessenger.cs
c_sharp/src/org/ldk/structs/OpenChannel.cs
c_sharp/src/org/ldk/structs/OpenChannelV2.cs
c_sharp/src/org/ldk/structs/Option_APIErrorZ.cs
c_sharp/src/org/ldk/structs/Option_AmountZ.cs
c_sharp/src/org/ldk/structs/Option_C2Tuple_OffersMessageResponseInstructionZZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.cs
c_sharp/src/org/ldk/structs/Option_CVec_SocketAddressZZ.cs
c_sharp/src/org/ldk/structs/Option_ClosureReasonZ.cs
c_sharp/src/org/ldk/structs/Option_EventZ.cs
c_sharp/src/org/ldk/structs/Option_HTLCDestinationZ.cs
c_sharp/src/org/ldk/structs/Option_MaxDustHTLCExposureZ.cs
c_sharp/src/org/ldk/structs/Option_MessageContextZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Option_MonitorEventZ.cs
c_sharp/src/org/ldk/structs/Option_NetworkUpdateZ.cs
c_sharp/src/org/ldk/structs/Option_NodeAnnouncementInfoZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Option_OffersContextZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Option_OffersMessageZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Option_PathFailureZ.cs
c_sharp/src/org/ldk/structs/Option_PaymentContextZ.cs
c_sharp/src/org/ldk/structs/Option_QuantityZ.cs
c_sharp/src/org/ldk/structs/Option_SecretKeyZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Option_SocketAddressZ.cs
c_sharp/src/org/ldk/structs/OutPoint.cs
c_sharp/src/org/ldk/structs/OutboundHTLCDetails.cs
c_sharp/src/org/ldk/structs/OutputSpendStatus.cs
c_sharp/src/org/ldk/structs/OutputSpender.cs
c_sharp/src/org/ldk/structs/OutputSweeper.cs
c_sharp/src/org/ldk/structs/ParseOrSemanticError.cs
c_sharp/src/org/ldk/structs/ParsedOnionMessageContents.cs
c_sharp/src/org/ldk/structs/Path.cs
c_sharp/src/org/ldk/structs/PathFailure.cs
c_sharp/src/org/ldk/structs/Payee.cs
c_sharp/src/org/ldk/structs/PaymentContext.cs
c_sharp/src/org/ldk/structs/PaymentForwardNode.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/PaymentParameters.cs
c_sharp/src/org/ldk/structs/PaymentPurpose.cs
c_sharp/src/org/ldk/structs/PaymentSendFailure.cs
c_sharp/src/org/ldk/structs/PeeledOnion.cs
c_sharp/src/org/ldk/structs/PeerDetails.cs
c_sharp/src/org/ldk/structs/PeerManager.cs
c_sharp/src/org/ldk/structs/PendingHTLCInfo.cs
c_sharp/src/org/ldk/structs/PendingHTLCRouting.cs
c_sharp/src/org/ldk/structs/Persist.cs
c_sharp/src/org/ldk/structs/PhantomRouteHints.cs
c_sharp/src/org/ldk/structs/PrivateRoute.cs
c_sharp/src/org/ldk/structs/ProbabilisticScorer.cs
c_sharp/src/org/ldk/structs/ProbabilisticScoringFeeParameters.cs
c_sharp/src/org/ldk/structs/ProbeSendFailure.cs
c_sharp/src/org/ldk/structs/RapidGossipSync.cs
c_sharp/src/org/ldk/structs/RawBolt11Invoice.cs
c_sharp/src/org/ldk/structs/RawDataPart.cs
c_sharp/src/org/ldk/structs/ReceiveTlvs.cs
c_sharp/src/org/ldk/structs/RecentPaymentDetails.cs
c_sharp/src/org/ldk/structs/RecipientOnionFields.cs
c_sharp/src/org/ldk/structs/Record.cs
c_sharp/src/org/ldk/structs/Refund.cs
c_sharp/src/org/ldk/structs/RefundMaybeWithDerivedMetadataBuilder.cs
c_sharp/src/org/ldk/structs/ReleaseHeldHtlc.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/ReplayEvent.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Responder.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/ResponseInstruction.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_AcceptChannelDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_AcceptChannelV2DecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_AnnouncementSignaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_AsyncPaymentsMessageDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_BestBlockDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BigSizeDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BlindedFailureDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BlindedForwardDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BlindedHopDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BlindedHopFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BlindedMessagePathDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_BlindedMessagePathNoneZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_BlindedPathDecodeErrorZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_BlindedPathNoneZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_BlindedPayInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BlindedPaymentPathNoneZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_BlindedTailDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt11InvoiceBolt11SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt11InvoiceFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt11InvoiceParseOrSemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt11InvoiceSignOrCreationErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt12InvoiceBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt12InvoiceDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_Bolt12InvoiceFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt12OfferContextDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_Bolt12RefundContextDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_BuiltCommitmentTransactionDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.cs
c_sharp/src/org/ldk/structs/Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_APIErrorZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_ClosureReasonZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_EventZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_HTLCDestinationZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_InboundHTLCStateDetailsZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_MonitorEventZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_NetworkUpdateZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_OnionMessageContentsZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_PathFailureZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_COption_PaymentFailureReasonZDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_COption_TypeZDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_CVec_BlindedMessagePathZNoneZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_CVec_BlindedPathZNoneZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_CVec_BlindedPaymentPathZNoneZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.cs
c_sharp/src/org/ldk/structs/Result_CVec_UtxoZNoneZ.cs
c_sharp/src/org/ldk/structs/Result_CVec_u8ZPeerHandleErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelAnnouncementDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelConfigDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelCounterpartyDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelDerivationParametersDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelDetailsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelIdAPIErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelIdDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelMonitorUpdateDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelPublicKeysDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelReadyDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelReestablishDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelShutdownStateDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelTransactionParametersDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelTypeFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelUpdateDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ChannelUpdateInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ClaimedHTLCDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ClosingSignedDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ClosingSignedFeeRangeDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_CoinSelectionNoneZ.cs
c_sharp/src/org/ldk/structs/Result_CommitmentSignedBatchDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_CommitmentSignedDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_CommitmentTransactionDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_CounterpartyChannelTransactionParametersDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_CounterpartyCommitmentSecretsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_CounterpartyForwardingInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_DelayedPaymentBasepointDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_DelayedPaymentKeyDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_DelayedPaymentOutputDescriptorDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_DescriptionCreationErrorZ.cs
c_sharp/src/org/ldk/structs/Result_EcdsaChannelSignerDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_ErrorMessageDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_FinalOnionHopDataDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_FixedPenaltyScorerDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_FundingCreatedDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_FundingInfoDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_FundingSignedDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_GossipTimestampFilterDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HTLCDescriptorDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HTLCOutputInCommitmentDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HTLCUpdateDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HeldHtlcAvailableDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_HolderCommitmentTransactionDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HostnameDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HtlcBasepointDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_HtlcKeyDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InFlightHtlcsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InMemorySignerDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InboundHTLCDetailsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InitDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InitFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InvoiceErrorDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InvoiceRequestBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_InvoiceRequestFieldsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_MaxDustHTLCExposureDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_MessageContextDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_NetworkGraphDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NodeAliasDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NodeAnnouncementDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NodeAnnouncementInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NodeFeaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NodeIdDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NodeInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NonceDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_NoneAPIErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NoneLightningErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NonePaymentSendFailureZ.cs
c_sharp/src/org/ldk/structs/Result_NonePeerHandleErrorZ.cs
c_sharp/src/org/ldk/structs/Result_NoneReplayEventZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_NoneSendErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_OfferBolt12ParseErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OfferBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OfferDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_OfferIdDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OffersContextDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_OffersMessageDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OnionMessageDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OnionMessagePathNoneZ.cs
c_sharp/src/org/ldk/structs/Result_OnionPacketDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OpenChannelDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OpenChannelV2DecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OutPointDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OutboundHTLCDetailsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OutputSpendStatusDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_OutputSweeperDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PayeePubKeySecp256k1ErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PaymentConstraintsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PaymentContextDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PaymentFailureReasonDecodeErrorZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_PaymentParametersDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PaymentPurposeDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PaymentRelayDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PendingHTLCInfoDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PendingHTLCInfoInboundHTLCErrZ.cs
c_sharp/src/org/ldk/structs/Result_PendingHTLCRoutingDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PhantomRouteHintsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PingDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PongDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PositiveTimestampCreationErrorZ.cs
c_sharp/src/org/ldk/structs/Result_PrivateRouteCreationErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ProbabilisticScorerDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_QueryChannelRangeDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_QueryShortChannelIdsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RecipientOnionFieldsDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RecipientOnionFieldsNoneZ.cs
c_sharp/src/org/ldk/structs/Result_RefundBolt12ParseErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RefundBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RefundDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ReleaseHeldHtlcDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_ReplyChannelRangeDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ResponderDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_RetryDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RevocationBasepointDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RevocationKeyDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RevokeAndACKDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RouteDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RouteHintDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RouteHintHopDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RouteHopDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RouteLightningErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RouteParametersDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_RoutingFeesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SendSuccessSendErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ShutdownDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ShutdownScriptDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ShutdownScriptInvalidShutdownScriptZ.cs
c_sharp/src/org/ldk/structs/Result_ShutdownScriptNoneZ.cs
c_sharp/src/org/ldk/structs/Result_SiPrefixBolt11ParseErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SignedRawBolt11InvoiceBolt11ParseErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SocketAddressDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SocketAddressSocketAddressParseErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SpendableOutputDescriptorDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SpliceAckDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_SpliceDecodeErrorZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_SpliceInitDecodeErrorZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_SpliceLockedDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_StaticPaymentOutputDescriptorDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_StfuDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_StrSecp256k1ErrorZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result_ThirtyTwoBytesAPIErrorZ.cs
c_sharp/src/org/ldk/structs/Result_ThirtyTwoBytesPaymentSendFailureZ.cs
c_sharp/src/org/ldk/structs/Result_TrackedSpendableOutputDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TransactionU16LenLimitedDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TransactionU16LenLimitedNoneZ.cs
c_sharp/src/org/ldk/structs/Result_TxAbortDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxAckRbfDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxAddInputDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxAddOutputDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxCompleteDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxCreationKeysDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxInitRbfDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxRemoveInputDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxRemoveOutputDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_TxSignaturesDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UnknownPaymentContextDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UnsignedBolt12InvoiceBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UnsignedChannelUpdateDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UnsignedInvoiceRequestBolt12SemanticErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UntrustedStringDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UpdateAddHTLCDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UpdateFailHTLCDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UpdateFailMalformedHTLCDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UpdateFeeDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_UpdateFulfillHTLCDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_VerifiedInvoiceRequestNoneZ.cs
c_sharp/src/org/ldk/structs/Result_WarningMessageDecodeErrorZ.cs
c_sharp/src/org/ldk/structs/Result_WriteableEcdsaChannelSignerDecodeErrorZ.cs [deleted file]
c_sharp/src/org/ldk/structs/Result__u832NoneZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/Result_boolLightningErrorZ.cs
c_sharp/src/org/ldk/structs/Result_boolPeerHandleErrorZ.cs
c_sharp/src/org/ldk/structs/Result_u32GraphSyncErrorZ.cs
c_sharp/src/org/ldk/structs/RevocationKey.cs
c_sharp/src/org/ldk/structs/RevokeAndACK.cs
c_sharp/src/org/ldk/structs/Route.cs
c_sharp/src/org/ldk/structs/RouteHint.cs
c_sharp/src/org/ldk/structs/RouteHintHop.cs
c_sharp/src/org/ldk/structs/RouteHop.cs
c_sharp/src/org/ldk/structs/RouteParameters.cs
c_sharp/src/org/ldk/structs/Router.cs
c_sharp/src/org/ldk/structs/RoutingFees.cs
c_sharp/src/org/ldk/structs/RoutingMessageHandler.cs
c_sharp/src/org/ldk/structs/ScoreLookUp.cs
c_sharp/src/org/ldk/structs/Shutdown.cs
c_sharp/src/org/ldk/structs/ShutdownScript.cs
c_sharp/src/org/ldk/structs/SignedRawBolt11Invoice.cs
c_sharp/src/org/ldk/structs/SignerProvider.cs
c_sharp/src/org/ldk/structs/Sleeper.cs
c_sharp/src/org/ldk/structs/SocketAddress.cs
c_sharp/src/org/ldk/structs/SpendableOutputDescriptor.cs
c_sharp/src/org/ldk/structs/Splice.cs [deleted file]
c_sharp/src/org/ldk/structs/SpliceAck.cs
c_sharp/src/org/ldk/structs/SpliceInit.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/SpliceLocked.cs
c_sharp/src/org/ldk/structs/StaticPaymentOutputDescriptor.cs
c_sharp/src/org/ldk/structs/Stfu.cs
c_sharp/src/org/ldk/structs/ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ.cs
c_sharp/src/org/ldk/structs/ThreeTuple_OffersMessageDestinationBlindedPathZ.cs [deleted file]
c_sharp/src/org/ldk/structs/ThreeTuple_OnionMessageContentsDestinationBlindedPathZ.cs [deleted file]
c_sharp/src/org/ldk/structs/ThreeTuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ.cs
c_sharp/src/org/ldk/structs/ThreeTuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ.cs
c_sharp/src/org/ldk/structs/ThreeTuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ.cs
c_sharp/src/org/ldk/structs/ThreeTuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZ.cs
c_sharp/src/org/ldk/structs/TrackedSpendableOutput.cs
c_sharp/src/org/ldk/structs/TransactionU16LenLimited.cs
c_sharp/src/org/ldk/structs/TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_BestBlockOutputSweeperZ.cs
c_sharp/src/org/ldk/structs/TwoTuple_BlindedPayInfoBlindedPathZ.cs [deleted file]
c_sharp/src/org/ldk/structs/TwoTuple_ChannelIdPublicKeyZ.cs
c_sharp/src/org/ldk/structs/TwoTuple_OffersMessageMessageSendInstructionsZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_OffersMessageResponseInstructionZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_OnionMessageContentsMessageSendInstructionsZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_OnionMessageContentsResponseInstructionZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_MonitorUpdateIdZZ.cs [deleted file]
c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_u64ZZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_u8ZZ.cs
c_sharp/src/org/ldk/structs/TwoTuple_OutPointChannelIdZ.cs
c_sharp/src/org/ldk/structs/TwoTuple_PublicKeyCVec_SocketAddressZZ.cs [deleted file]
c_sharp/src/org/ldk/structs/TwoTuple_ReleaseHeldHtlcResponseInstructionZ.cs [new file with mode: 0644]
c_sharp/src/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelManagerZ.cs
c_sharp/src/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelMonitorZ.cs
c_sharp/src/org/ldk/structs/TxAbort.cs
c_sharp/src/org/ldk/structs/TxAckRbf.cs
c_sharp/src/org/ldk/structs/TxAddInput.cs
c_sharp/src/org/ldk/structs/TxAddOutput.cs
c_sharp/src/org/ldk/structs/TxComplete.cs
c_sharp/src/org/ldk/structs/TxCreationKeys.cs
c_sharp/src/org/ldk/structs/TxInitRbf.cs
c_sharp/src/org/ldk/structs/TxRemoveInput.cs
c_sharp/src/org/ldk/structs/TxRemoveOutput.cs
c_sharp/src/org/ldk/structs/TxSignatures.cs
c_sharp/src/org/ldk/structs/UnsignedBolt12Invoice.cs
c_sharp/src/org/ldk/structs/UnsignedChannelAnnouncement.cs
c_sharp/src/org/ldk/structs/UnsignedChannelUpdate.cs
c_sharp/src/org/ldk/structs/UnsignedGossipMessage.cs
c_sharp/src/org/ldk/structs/UnsignedInvoiceRequest.cs
c_sharp/src/org/ldk/structs/UnsignedNodeAnnouncement.cs
c_sharp/src/org/ldk/structs/UntrustedString.cs
c_sharp/src/org/ldk/structs/UpdateAddHTLC.cs
c_sharp/src/org/ldk/structs/UpdateFailHTLC.cs
c_sharp/src/org/ldk/structs/UpdateFailMalformedHTLC.cs
c_sharp/src/org/ldk/structs/UpdateFee.cs
c_sharp/src/org/ldk/structs/UpdateFulfillHTLC.cs
c_sharp/src/org/ldk/structs/UserConfig.cs
c_sharp/src/org/ldk/structs/UtilMethods.cs
c_sharp/src/org/ldk/structs/Utxo.cs
c_sharp/src/org/ldk/structs/UtxoLookup.cs
c_sharp/src/org/ldk/structs/UtxoResult.cs
c_sharp/src/org/ldk/structs/VerifiedInvoiceRequest.cs
c_sharp/src/org/ldk/structs/WarningMessage.cs
c_sharp/src/org/ldk/structs/Watch.cs
c_sharp/src/org/ldk/structs/WatchedOutput.cs
c_sharp/src/org/ldk/structs/WriteableEcdsaChannelSigner.cs [deleted file]

index ee78f2adea1f6204306a096353dfa895bc326acb..4d9e904e96749cf5ad06a09c9389bb154afa9076 100644 (file)
@@ -184,10 +184,10 @@ int CS_LDK_register_l_Recipientll_invoker(invoker_l_Recipientll invoker) {
        return 0;
 }
 
-typedef int64_t (*invoker_l_llRecipient)(int obj_ptr, int fn_id, int64_t a, int64_t b, int32_t c);
-static invoker_l_llRecipient js_invoke_function_l_llRecipient;
-int CS_LDK_register_l_llRecipient_invoker(invoker_l_llRecipient invoker) {
-       js_invoke_function_l_llRecipient = invoker;
+typedef int64_t (*invoker_l_lRecipient)(int obj_ptr, int fn_id, int64_t a, int32_t b);
+static invoker_l_lRecipient js_invoke_function_l_lRecipient;
+int CS_LDK_register_l_lRecipient_invoker(invoker_l_lRecipient invoker) {
+       js_invoke_function_l_lRecipient = invoker;
        return 0;
 }
 
@@ -240,13 +240,6 @@ int CS_LDK_register_ChannelMonitorUpdateStatus_lll_invoker(invoker_ChannelMonito
        return 0;
 }
 
-typedef int32_t (*invoker_ChannelMonitorUpdateStatus_llll)(int obj_ptr, int fn_id, int64_t a, int64_t b, int64_t c, int64_t d);
-static invoker_ChannelMonitorUpdateStatus_llll js_invoke_function_ChannelMonitorUpdateStatus_llll;
-int CS_LDK_register_ChannelMonitorUpdateStatus_llll_invoker(invoker_ChannelMonitorUpdateStatus_llll invoker) {
-       js_invoke_function_ChannelMonitorUpdateStatus_llll = invoker;
-       return 0;
-}
-
 typedef void (*invoker_void_lli)(int obj_ptr, int fn_id, int64_t a, int64_t b, int32_t c);
 static invoker_void_lli js_invoke_function_void_lli;
 int CS_LDK_register_void_lli_invoker(invoker_void_lli invoker) {
@@ -366,6 +359,24 @@ static inline uint64_t tag_ptr(const void* ptr, bool is_owned) {
        }
 }
 
+static inline LDKBalanceSource LDKBalanceSource_from_cs(int32_t ord) {
+       switch (ord) {
+               case 0: return LDKBalanceSource_HolderForceClosed;
+               case 1: return LDKBalanceSource_CounterpartyForceClosed;
+               case 2: return LDKBalanceSource_CoopClose;
+               case 3: return LDKBalanceSource_Htlc;
+               default: abort();
+       }
+}
+static inline int32_t LDKBalanceSource_to_cs(LDKBalanceSource val) {
+       switch (val) {
+               case LDKBalanceSource_HolderForceClosed: return 0;
+               case LDKBalanceSource_CounterpartyForceClosed: return 1;
+               case LDKBalanceSource_CoopClose: return 2;
+               case LDKBalanceSource_Htlc: return 3;
+               default: abort();
+       }
+}
 static inline LDKBlindedFailure LDKBlindedFailure_from_cs(int32_t ord) {
        switch (ord) {
                case 0: return LDKBlindedFailure_FromIntroductionNode;
@@ -439,7 +450,8 @@ static inline LDKBolt12SemanticError LDKBolt12SemanticError_from_cs(int32_t ord)
                case 24: return LDKBolt12SemanticError_InvalidPayInfo;
                case 25: return LDKBolt12SemanticError_MissingCreationTime;
                case 26: return LDKBolt12SemanticError_MissingPaymentHash;
-               case 27: return LDKBolt12SemanticError_MissingSignature;
+               case 27: return LDKBolt12SemanticError_UnexpectedPaymentHash;
+               case 28: return LDKBolt12SemanticError_MissingSignature;
                default: abort();
        }
 }
@@ -472,7 +484,8 @@ static inline int32_t LDKBolt12SemanticError_to_cs(LDKBolt12SemanticError val) {
                case LDKBolt12SemanticError_InvalidPayInfo: return 24;
                case LDKBolt12SemanticError_MissingCreationTime: return 25;
                case LDKBolt12SemanticError_MissingPaymentHash: return 26;
-               case LDKBolt12SemanticError_MissingSignature: return 27;
+               case LDKBolt12SemanticError_UnexpectedPaymentHash: return 27;
+               case LDKBolt12SemanticError_MissingSignature: return 28;
                default: abort();
        }
 }
@@ -528,25 +541,27 @@ static inline int32_t LDKChannelShutdownState_to_cs(LDKChannelShutdownState val)
 }
 static inline LDKConfirmationTarget LDKConfirmationTarget_from_cs(int32_t ord) {
        switch (ord) {
-               case 0: return LDKConfirmationTarget_OnChainSweep;
-               case 1: return LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee;
-               case 2: return LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee;
-               case 3: return LDKConfirmationTarget_AnchorChannelFee;
-               case 4: return LDKConfirmationTarget_NonAnchorChannelFee;
-               case 5: return LDKConfirmationTarget_ChannelCloseMinimum;
-               case 6: return LDKConfirmationTarget_OutputSpendingFee;
+               case 0: return LDKConfirmationTarget_MaximumFeeEstimate;
+               case 1: return LDKConfirmationTarget_UrgentOnChainSweep;
+               case 2: return LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee;
+               case 3: return LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee;
+               case 4: return LDKConfirmationTarget_AnchorChannelFee;
+               case 5: return LDKConfirmationTarget_NonAnchorChannelFee;
+               case 6: return LDKConfirmationTarget_ChannelCloseMinimum;
+               case 7: return LDKConfirmationTarget_OutputSpendingFee;
                default: abort();
        }
 }
 static inline int32_t LDKConfirmationTarget_to_cs(LDKConfirmationTarget val) {
        switch (val) {
-               case LDKConfirmationTarget_OnChainSweep: return 0;
-               case LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee: return 1;
-               case LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee: return 2;
-               case LDKConfirmationTarget_AnchorChannelFee: return 3;
-               case LDKConfirmationTarget_NonAnchorChannelFee: return 4;
-               case LDKConfirmationTarget_ChannelCloseMinimum: return 5;
-               case LDKConfirmationTarget_OutputSpendingFee: return 6;
+               case LDKConfirmationTarget_MaximumFeeEstimate: return 0;
+               case LDKConfirmationTarget_UrgentOnChainSweep: return 1;
+               case LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee: return 2;
+               case LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee: return 3;
+               case LDKConfirmationTarget_AnchorChannelFee: return 4;
+               case LDKConfirmationTarget_NonAnchorChannelFee: return 5;
+               case LDKConfirmationTarget_ChannelCloseMinimum: return 6;
+               case LDKConfirmationTarget_OutputSpendingFee: return 7;
                default: abort();
        }
 }
@@ -756,6 +771,9 @@ static inline LDKPaymentFailureReason LDKPaymentFailureReason_from_cs(int32_t or
                case 3: return LDKPaymentFailureReason_PaymentExpired;
                case 4: return LDKPaymentFailureReason_RouteNotFound;
                case 5: return LDKPaymentFailureReason_UnexpectedError;
+               case 6: return LDKPaymentFailureReason_UnknownRequiredFeatures;
+               case 7: return LDKPaymentFailureReason_InvoiceRequestExpired;
+               case 8: return LDKPaymentFailureReason_InvoiceRequestRejected;
                default: abort();
        }
 }
@@ -767,6 +785,9 @@ static inline int32_t LDKPaymentFailureReason_to_cs(LDKPaymentFailureReason val)
                case LDKPaymentFailureReason_PaymentExpired: return 3;
                case LDKPaymentFailureReason_RouteNotFound: return 4;
                case LDKPaymentFailureReason_UnexpectedError: return 5;
+               case LDKPaymentFailureReason_UnknownRequiredFeatures: return 6;
+               case LDKPaymentFailureReason_InvoiceRequestExpired: return 7;
+               case LDKPaymentFailureReason_InvoiceRequestRejected: return 8;
                default: abort();
        }
 }
@@ -789,6 +810,7 @@ static inline LDKRetryableSendFailure LDKRetryableSendFailure_from_cs(int32_t or
                case 0: return LDKRetryableSendFailure_PaymentExpired;
                case 1: return LDKRetryableSendFailure_RouteNotFound;
                case 2: return LDKRetryableSendFailure_DuplicatePayment;
+               case 3: return LDKRetryableSendFailure_OnionPacketSizeExceeded;
                default: abort();
        }
 }
@@ -797,6 +819,7 @@ static inline int32_t LDKRetryableSendFailure_to_cs(LDKRetryableSendFailure val)
                case LDKRetryableSendFailure_PaymentExpired: return 0;
                case LDKRetryableSendFailure_RouteNotFound: return 1;
                case LDKRetryableSendFailure_DuplicatePayment: return 2;
+               case LDKRetryableSendFailure_OnionPacketSizeExceeded: return 3;
                default: abort();
        }
 }
@@ -813,6 +836,7 @@ static inline LDKSecp256k1Error LDKSecp256k1Error_from_cs(int32_t ord) {
                case 8: return LDKSecp256k1Error_NotEnoughMemory;
                case 9: return LDKSecp256k1Error_InvalidPublicKeySum;
                case 10: return LDKSecp256k1Error_InvalidParityValue;
+               case 11: return LDKSecp256k1Error_InvalidEllSwift;
                default: abort();
        }
 }
@@ -829,6 +853,7 @@ static inline int32_t LDKSecp256k1Error_to_cs(LDKSecp256k1Error val) {
                case LDKSecp256k1Error_NotEnoughMemory: return 8;
                case LDKSecp256k1Error_InvalidPublicKeySum: return 9;
                case LDKSecp256k1Error_InvalidParityValue: return 10;
+               case LDKSecp256k1Error_InvalidEllSwift: return 11;
                default: abort();
        }
 }
@@ -1011,13 +1036,59 @@ int64_t CS_LDK_LDKCOption_u64Z_Some_get_some(int64_t ptr) {
        int64_t some_conv = obj->some;
        return some_conv;
 }
-static inline LDKCVec_BlindedPathZ CVec_BlindedPathZ_clone(const LDKCVec_BlindedPathZ *orig) {
-       LDKCVec_BlindedPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPath) * orig->datalen, "LDKCVec_BlindedPathZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_BlindedMessagePathZ CVec_BlindedMessagePathZ_clone(const LDKCVec_BlindedMessagePathZ *orig) {
+       LDKCVec_BlindedMessagePathZ ret = { .data = MALLOC(sizeof(LDKBlindedMessagePath) * orig->datalen, "LDKCVec_BlindedMessagePathZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = BlindedPath_clone(&orig->data[i]);
+               ret.data[i] = BlindedMessagePath_clone(&orig->data[i]);
+       }
+       return ret;
+}
+uint32_t CS_LDK_LDKDecodeError_ty_from_ptr(int64_t ptr) {
+       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKDecodeError_UnknownVersion: return 0;
+               case LDKDecodeError_UnknownRequiredFeature: return 1;
+               case LDKDecodeError_InvalidValue: return 2;
+               case LDKDecodeError_ShortRead: return 3;
+               case LDKDecodeError_BadLengthDescriptor: return 4;
+               case LDKDecodeError_Io: return 5;
+               case LDKDecodeError_UnsupportedCompression: return 6;
+               case LDKDecodeError_DangerousValue: return 7;
+               default: abort();
        }
+}
+int32_t CS_LDK_LDKDecodeError_Io_get_io(int64_t ptr) {
+       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKDecodeError_Io);
+       int32_t io_conv = LDKIOError_to_cs(obj->io);
+       return io_conv;
+}
+static inline struct LDKRefund CResult_RefundDecodeErrorZ_get_ok(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR owner){
+       LDKRefund ret = *owner->contents.result;
+       ret.is_owned = false;
        return ret;
 }
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_RefundDecodeErrorZ* owner_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(owner);
+       LDKRefund ret_var = CResult_RefundDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_RefundDecodeErrorZ_get_err(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_RefundDecodeErrorZ* owner_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_RefundDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKRefund CResult_RefundBolt12ParseErrorZ_get_ok(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKRefund ret = *owner->contents.result;
        ret.is_owned = false;
@@ -1066,26 +1137,6 @@ int64_t CS_LDK_LDKRetry_Timeout_get_timeout(int64_t ptr) {
        int64_t timeout_conv = obj->timeout;
        return timeout_conv;
 }
-uint32_t CS_LDK_LDKDecodeError_ty_from_ptr(int64_t ptr) {
-       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKDecodeError_UnknownVersion: return 0;
-               case LDKDecodeError_UnknownRequiredFeature: return 1;
-               case LDKDecodeError_InvalidValue: return 2;
-               case LDKDecodeError_ShortRead: return 3;
-               case LDKDecodeError_BadLengthDescriptor: return 4;
-               case LDKDecodeError_Io: return 5;
-               case LDKDecodeError_UnsupportedCompression: return 6;
-               case LDKDecodeError_DangerousValue: return 7;
-               default: abort();
-       }
-}
-int32_t CS_LDK_LDKDecodeError_Io_get_io(int64_t ptr) {
-       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKDecodeError_Io);
-       int32_t io_conv = LDKIOError_to_cs(obj->io);
-       return io_conv;
-}
 static inline struct LDKRetry CResult_RetryDecodeErrorZ_get_ok(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return Retry_clone(&*owner->contents.result);
@@ -1496,28 +1547,28 @@ void  CS_LDK_CResult_ThirtyTwoBytesNoneZ_get_err(int64_t owner) {
        CResult_ThirtyTwoBytesNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
-       LDKBlindedPayInfo ret = *owner->contents.result;
+static inline struct LDKBolt12Invoice CResult_Bolt12InvoiceDecodeErrorZ_get_ok(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR owner){
+       LDKBolt12Invoice ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
-       LDKBlindedPayInfo ret_var = CResult_BlindedPayInfoDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* owner_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(owner);
+       LDKBolt12Invoice ret_var = CResult_Bolt12InvoiceDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_Bolt12InvoiceDecodeErrorZ_get_err(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* owner_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_BlindedPayInfoDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_Bolt12InvoiceDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -1768,24 +1819,6 @@ int64_t  CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return *owner->contents.result;
-}
-void  CS_LDK_CResult_NoneNoneZ_get_ok(int64_t owner) {
-       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
-       CResult_NoneNoneZ_get_ok(owner_conv);
-}
-
-static inline void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-void  CS_LDK_CResult_NoneNoneZ_get_err(int64_t owner) {
-       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
-       CResult_NoneNoneZ_get_err(owner_conv);
-}
-
 static inline struct LDKPublicKey CResult_PublicKeyNoneZ_get_ok(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -1806,6 +1839,44 @@ void  CS_LDK_CResult_PublicKeyNoneZ_get_err(int64_t owner) {
        CResult_PublicKeyNoneZ_get_err(owner_conv);
 }
 
+static inline struct LDKThirtyTwoBytes CResult__u832NoneZ_get_ok(LDKCResult__u832NoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return ThirtyTwoBytes_clone(&*owner->contents.result);
+}
+int8_tArray  CS_LDK_CResult__u832NoneZ_get_ok(int64_t owner) {
+       LDKCResult__u832NoneZ* owner_conv = (LDKCResult__u832NoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, CResult__u832NoneZ_get_ok(owner_conv).data, 32);
+       return ret_arr;
+}
+
+static inline void CResult__u832NoneZ_get_err(LDKCResult__u832NoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult__u832NoneZ_get_err(int64_t owner) {
+       LDKCResult__u832NoneZ* owner_conv = (LDKCResult__u832NoneZ*)untag_ptr(owner);
+       CResult__u832NoneZ_get_err(owner_conv);
+}
+
+static inline void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return *owner->contents.result;
+}
+void  CS_LDK_CResult_NoneNoneZ_get_ok(int64_t owner) {
+       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
+       CResult_NoneNoneZ_get_ok(owner_conv);
+}
+
+static inline void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_NoneNoneZ_get_err(int64_t owner) {
+       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
+       CResult_NoneNoneZ_get_err(owner_conv);
+}
+
 uint32_t CS_LDK_LDKCOption_BigEndianScalarZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_BigEndianScalarZ *obj = (LDKCOption_BigEndianScalarZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -1939,23 +2010,25 @@ static void LDKChannelSigner_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKPublicKey get_per_commitment_point_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
+LDKCResult_PublicKeyNoneZ get_per_commitment_point_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 0, idx_conv);
-       LDKPublicKey ret_ref;
-       CHECK(ret->arr_len == 33);
-       memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
-       return ret_ref;
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 0, idx_conv);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_PublicKeyNoneZ ret_conv = *(LDKCResult_PublicKeyNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
 }
-LDKThirtyTwoBytes release_commitment_secret_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
+LDKCResult__u832NoneZ release_commitment_secret_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 1, idx_conv);
-       LDKThirtyTwoBytes ret_ref;
-       CHECK(ret->arr_len == 32);
-       memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
-       return ret_ref;
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 1, idx_conv);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult__u832NoneZ ret_conv = *(LDKCResult__u832NoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
 }
 LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * holder_tx, LDKCVec_ThirtyTwoBytesZ outbound_htlc_preimages) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
@@ -2044,22 +2117,22 @@ uint64_t  CS_LDK_LDKChannelSigner_new(int32_t o, int64_t pubkeys) {
        *res_ptr = LDKChannelSigner_init(o, pubkeys);
        return tag_ptr(res_ptr, true);
 }
-int8_tArray  CS_LDK_ChannelSigner_get_per_commitment_point(int64_t this_arg, int64_t idx) {
+int64_t  CS_LDK_ChannelSigner_get_per_commitment_point(int64_t this_arg, int64_t idx) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKChannelSigner* this_arg_conv = (LDKChannelSigner*)this_arg_ptr;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, (this_arg_conv->get_per_commitment_point)(this_arg_conv->this_arg, idx).compressed_form, 33);
-       return ret_arr;
+       LDKCResult_PublicKeyNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyNoneZ), "LDKCResult_PublicKeyNoneZ");
+       *ret_conv = (this_arg_conv->get_per_commitment_point)(this_arg_conv->this_arg, idx);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_ChannelSigner_release_commitment_secret(int64_t this_arg, int64_t idx) {
+int64_t  CS_LDK_ChannelSigner_release_commitment_secret(int64_t this_arg, int64_t idx) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKChannelSigner* this_arg_conv = (LDKChannelSigner*)this_arg_ptr;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, (this_arg_conv->release_commitment_secret)(this_arg_conv->this_arg, idx).data, 32);
-       return ret_arr;
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = (this_arg_conv->release_commitment_secret)(this_arg_conv->this_arg, idx);
+       return tag_ptr(ret_conv, true);
 }
 
 int64_t  CS_LDK_ChannelSigner_validate_holder_commitment(int64_t this_arg, int64_t holder_tx, ptrArray outbound_htlc_preimages) {
@@ -2350,6 +2423,7 @@ static inline LDKEcdsaChannelSigner LDKEcdsaChannelSigner_init (int64_t o, int64
                .sign_closing_transaction = sign_closing_transaction_LDKEcdsaChannelSigner_jcall,
                .sign_holder_anchor_input = sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall,
                .sign_channel_announcement_with_funding_key = sign_channel_announcement_with_funding_key_LDKEcdsaChannelSigner_jcall,
+               .cloned = LDKEcdsaChannelSigner_JCalls_cloned,
                .free = LDKEcdsaChannelSigner_JCalls_free,
                .ChannelSigner = LDKChannelSigner_init(ChannelSigner, pubkeys),
        };
@@ -2543,89 +2617,25 @@ int64_t  CS_LDK_EcdsaChannelSigner_sign_channel_announcement_with_funding_key(in
        return tag_ptr(ret_conv, true);
 }
 
-typedef struct LDKWriteableEcdsaChannelSigner_JCalls {
-       atomic_size_t refcnt;
-       uint32_t instance_ptr;
-       LDKEcdsaChannelSigner_JCalls* EcdsaChannelSigner;
-       LDKChannelSigner_JCalls* ChannelSigner;
-} LDKWriteableEcdsaChannelSigner_JCalls;
-static void LDKWriteableEcdsaChannelSigner_JCalls_free(void* this_arg) {
-       LDKWriteableEcdsaChannelSigner_JCalls *j_calls = (LDKWriteableEcdsaChannelSigner_JCalls*) this_arg;
-       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
-               FREE(j_calls);
-       }
-}
-LDKCVec_u8Z write_LDKWriteableEcdsaChannelSigner_jcall(const void* this_arg) {
-       LDKWriteableEcdsaChannelSigner_JCalls *j_calls = (LDKWriteableEcdsaChannelSigner_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 15);
-       LDKCVec_u8Z ret_ref;
-       ret_ref.datalen = ret->arr_len;
-       ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(ret_ref.data, ret->elems, ret_ref.datalen); FREE(ret);
-       return ret_ref;
-}
-static void LDKWriteableEcdsaChannelSigner_JCalls_cloned(LDKWriteableEcdsaChannelSigner* new_obj) {
-       LDKWriteableEcdsaChannelSigner_JCalls *j_calls = (LDKWriteableEcdsaChannelSigner_JCalls*) new_obj->this_arg;
-       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
-       atomic_fetch_add_explicit(&j_calls->EcdsaChannelSigner->refcnt, 1, memory_order_release);
-       atomic_fetch_add_explicit(&j_calls->EcdsaChannelSigner->ChannelSigner->refcnt, 1, memory_order_release);
-}
-static inline LDKWriteableEcdsaChannelSigner LDKWriteableEcdsaChannelSigner_init (int64_t o, int64_t EcdsaChannelSigner, int64_t ChannelSigner, int64_t pubkeys) {
-       LDKWriteableEcdsaChannelSigner_JCalls *calls = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner_JCalls), "LDKWriteableEcdsaChannelSigner_JCalls");
-       atomic_init(&calls->refcnt, 1);
-       calls->instance_ptr = o;
-
-       LDKChannelPublicKeys pubkeys_conv;
-       pubkeys_conv.inner = untag_ptr(pubkeys);
-       pubkeys_conv.is_owned = ptr_is_owned(pubkeys);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
-
-       LDKWriteableEcdsaChannelSigner ret = {
-               .this_arg = (void*) calls,
-               .write = write_LDKWriteableEcdsaChannelSigner_jcall,
-               .cloned = LDKWriteableEcdsaChannelSigner_JCalls_cloned,
-               .free = LDKWriteableEcdsaChannelSigner_JCalls_free,
-               .EcdsaChannelSigner = LDKEcdsaChannelSigner_init(EcdsaChannelSigner, ChannelSigner, pubkeys),
-       };
-       calls->EcdsaChannelSigner = ret.EcdsaChannelSigner.this_arg;
-       calls->ChannelSigner = ret.EcdsaChannelSigner.ChannelSigner.this_arg;
-       return ret;
-}
-uint64_t  CS_LDK_LDKWriteableEcdsaChannelSigner_new(int32_t o, int32_t EcdsaChannelSigner, int32_t ChannelSigner, int64_t pubkeys) {
-       LDKWriteableEcdsaChannelSigner *res_ptr = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *res_ptr = LDKWriteableEcdsaChannelSigner_init(o, EcdsaChannelSigner, ChannelSigner, pubkeys);
-       return tag_ptr(res_ptr, true);
-}
-int8_tArray  CS_LDK_WriteableEcdsaChannelSigner_write(int64_t this_arg) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKWriteableEcdsaChannelSigner* this_arg_conv = (LDKWriteableEcdsaChannelSigner*)this_arg_ptr;
-       LDKCVec_u8Z ret_var = (this_arg_conv->write)(this_arg_conv->this_arg);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-static inline struct LDKWriteableEcdsaChannelSigner CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKEcdsaChannelSigner CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return WriteableEcdsaChannelSigner_clone(&*owner->contents.result);
+       return EcdsaChannelSigner_clone(&*owner->contents.result);
 }
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(owner_conv);
        return tag_ptr(ret_ret, true);
 }
 
-static inline struct LDKDecodeError CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_EcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_EcdsaChannelSignerDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -2831,7 +2841,7 @@ uint64_t channel_penalty_msat_LDKScoreLookUp_jcall(const void* this_arg, const L
        score_params_var = ProbabilisticScoringFeeParameters_clone(&score_params_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_var);
        score_params_ref = tag_ptr(score_params_var.inner, score_params_var.is_owned);
-       return js_invoke_function_l_lll(j_calls->instance_ptr, 16, ref_candidate, usage_ref, score_params_ref);
+       return js_invoke_function_l_lll(j_calls->instance_ptr, 15, ref_candidate, usage_ref, score_params_ref);
 }
 static void LDKScoreLookUp_JCalls_cloned(LDKScoreLookUp* new_obj) {
        LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) new_obj->this_arg;
@@ -2892,7 +2902,7 @@ void payment_path_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * pa
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t short_channel_id_conv = short_channel_id;
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_lll(j_calls->instance_ptr, 17, path_ref, short_channel_id_conv, duration_since_epoch_conv);
+       js_invoke_function_void_lll(j_calls->instance_ptr, 16, path_ref, short_channel_id_conv, duration_since_epoch_conv);
 }
 void payment_path_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
@@ -2902,7 +2912,7 @@ void payment_path_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath
        CHECK_INNER_FIELD_ACCESS_OR_NULL(path_var);
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_ll(j_calls->instance_ptr, 18, path_ref, duration_since_epoch_conv);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 17, path_ref, duration_since_epoch_conv);
 }
 void probe_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
@@ -2913,7 +2923,7 @@ void probe_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uin
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t short_channel_id_conv = short_channel_id;
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_lll(j_calls->instance_ptr, 19, path_ref, short_channel_id_conv, duration_since_epoch_conv);
+       js_invoke_function_void_lll(j_calls->instance_ptr, 18, path_ref, short_channel_id_conv, duration_since_epoch_conv);
 }
 void probe_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
@@ -2923,12 +2933,12 @@ void probe_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path,
        CHECK_INNER_FIELD_ACCESS_OR_NULL(path_var);
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_ll(j_calls->instance_ptr, 20, path_ref, duration_since_epoch_conv);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 19, path_ref, duration_since_epoch_conv);
 }
 void time_passed_LDKScoreUpdate_jcall(void* this_arg, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_l(j_calls->instance_ptr, 21, duration_since_epoch_conv);
+       js_invoke_function_void_l(j_calls->instance_ptr, 20, duration_since_epoch_conv);
 }
 static void LDKScoreUpdate_JCalls_cloned(LDKScoreUpdate* new_obj) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) new_obj->this_arg;
@@ -3022,7 +3032,7 @@ static void LDKLockableScore_JCalls_free(void* this_arg) {
 }
 LDKScoreLookUp read_lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 22);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 21);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKScoreLookUp ret_conv = *(LDKScoreLookUp*)(ret_ptr);
@@ -3035,7 +3045,7 @@ LDKScoreLookUp read_lock_LDKLockableScore_jcall(const void* this_arg) {
 }
 LDKScoreUpdate write_lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 23);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 22);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKScoreUpdate ret_conv = *(LDKScoreUpdate*)(ret_ptr);
@@ -3099,7 +3109,7 @@ static void LDKWriteableScore_JCalls_free(void* this_arg) {
 }
 LDKCVec_u8Z write_LDKWriteableScore_jcall(const void* this_arg) {
        LDKWriteableScore_JCalls *j_calls = (LDKWriteableScore_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 24);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 23);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -3180,103 +3190,135 @@ int32_t  CS_LDK_CResult_NoneIOErrorZ_get_err(int64_t owner) {
        return ret_conv;
 }
 
-static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
-       LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ChannelDetails_clone(&orig->data[i]);
-       }
-       return ret;
+static inline struct LDKThirtyTwoBytes C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
+       return ThirtyTwoBytes_clone(&owner->a);
 }
-static inline struct LDKRoute CResult_RouteLightningErrorZ_get_ok(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
-       LDKRoute ret = *owner->contents.result;
+int8_tArray  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(int64_t owner) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(owner_conv).data, 32);
+       return ret_arr;
+}
+
+static inline struct LDKRecipientOnionFields C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
+       LDKRecipientOnionFields ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_ok(int64_t owner) {
-       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
-       LDKRoute ret_var = CResult_RouteLightningErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(int64_t owner) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
+       LDKRecipientOnionFields ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKLightningError CResult_RouteLightningErrorZ_get_err(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
-       LDKLightningError ret = *owner->contents.err;
+static inline struct LDKRouteParameters C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
+       LDKRouteParameters ret = owner->c;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_err(int64_t owner) {
-       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
-       LDKLightningError ret_var = CResult_RouteLightningErrorZ_get_err(owner_conv);
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(int64_t owner) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
+       LDKRouteParameters ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPayInfo C2Tuple_BlindedPayInfoBlindedPathZ_get_a(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPayInfo ret = owner->a;
+static inline struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(int64_t owner) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(int64_t owner) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
+       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(owner_conv);
+}
+
+static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
+       LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = ChannelDetails_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKRoute CResult_RouteLightningErrorZ_get_ok(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
+       LDKRoute ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_get_a(int64_t owner) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* owner_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPayInfo ret_var = C2Tuple_BlindedPayInfoBlindedPathZ_get_a(owner_conv);
+int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_ok(int64_t owner) {
+       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
+       LDKRoute ret_var = CResult_RouteLightningErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath C2Tuple_BlindedPayInfoBlindedPathZ_get_b(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = owner->b;
+static inline struct LDKLightningError CResult_RouteLightningErrorZ_get_err(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
+       LDKLightningError ret = *owner->contents.err;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_get_b(int64_t owner) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* owner_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = C2Tuple_BlindedPayInfoBlindedPathZ_get_b(owner_conv);
+int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_err(int64_t owner) {
+       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
+       LDKLightningError ret_var = CResult_RouteLightningErrorZ_get_err(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_clone(const LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ *orig) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ) * orig->datalen, "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_BlindedPaymentPathZ CVec_BlindedPaymentPathZ_clone(const LDKCVec_BlindedPaymentPathZ *orig) {
+       LDKCVec_BlindedPaymentPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPaymentPath) * orig->datalen, "LDKCVec_BlindedPaymentPathZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_BlindedPayInfoBlindedPathZ_clone(&orig->data[i]);
+               ret.data[i] = BlindedPaymentPath_clone(&orig->data[i]);
        }
        return ret;
 }
-static inline struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_BlindedPaymentPathZ CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_clone(&*owner->contents.result);
+       return CVec_BlindedPaymentPathZ_clone(&*owner->contents.result);
 }
-int64_tArray  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ ret_var = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(owner_conv);
+int64_tArray  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(int64_t owner) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(owner);
+       LDKCVec_BlindedPaymentPathZ ret_var = CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(owner_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t l = 0; l < ret_var.datalen; l++) {
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv_37_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-               *ret_conv_37_conv = ret_var.data[l];
-               ret_arr_ptr[l] = tag_ptr(ret_conv_37_conv, true);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedPaymentPath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline void CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_BlindedPaymentPathZNoneZ_get_err(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-void  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(owner);
-       CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(owner_conv);
+void  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_get_err(int64_t owner) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(owner);
+       CResult_CVec_BlindedPaymentPathZNoneZ_get_err(owner_conv);
 }
 
 static inline struct LDKOnionMessagePath CResult_OnionMessagePathNoneZ_get_ok(LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR owner){
@@ -3302,37 +3344,44 @@ void  CS_LDK_CResult_OnionMessagePathNoneZ_get_err(int64_t owner) {
        CResult_OnionMessagePathNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKCVec_BlindedPathZ CResult_CVec_BlindedPathZNoneZ_get_ok(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_BlindedMessagePathZ CResult_CVec_BlindedMessagePathZNoneZ_get_ok(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return CVec_BlindedPathZ_clone(&*owner->contents.result);
+       return CVec_BlindedMessagePathZ_clone(&*owner->contents.result);
 }
-int64_tArray  CS_LDK_CResult_CVec_BlindedPathZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_CVec_BlindedPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(owner);
-       LDKCVec_BlindedPathZ ret_var = CResult_CVec_BlindedPathZNoneZ_get_ok(owner_conv);
+int64_tArray  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_get_ok(int64_t owner) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(owner);
+       LDKCVec_BlindedMessagePathZ ret_var = CResult_CVec_BlindedMessagePathZNoneZ_get_ok(owner_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline void CResult_CVec_BlindedPathZNoneZ_get_err(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_BlindedMessagePathZNoneZ_get_err(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-void  CS_LDK_CResult_CVec_BlindedPathZNoneZ_get_err(int64_t owner) {
-       LDKCResult_CVec_BlindedPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(owner);
-       CResult_CVec_BlindedPathZNoneZ_get_err(owner_conv);
+void  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_get_err(int64_t owner) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(owner);
+       CResult_CVec_BlindedMessagePathZNoneZ_get_err(owner_conv);
 }
 
+static inline LDKCVec_MessageForwardNodeZ CVec_MessageForwardNodeZ_clone(const LDKCVec_MessageForwardNodeZ *orig) {
+       LDKCVec_MessageForwardNodeZ ret = { .data = MALLOC(sizeof(LDKMessageForwardNode) * orig->datalen, "LDKCVec_MessageForwardNodeZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = MessageForwardNode_clone(&orig->data[i]);
+       }
+       return ret;
+}
 static inline struct LDKInFlightHtlcs CResult_InFlightHtlcsDecodeErrorZ_get_ok(LDKCResult_InFlightHtlcsDecodeErrorZ *NONNULL_PTR owner){
        LDKInFlightHtlcs ret = *owner->contents.result;
        ret.is_owned = false;
@@ -3522,13 +3571,6 @@ static inline LDKCVec_RouteHintZ CVec_RouteHintZ_clone(const LDKCVec_RouteHintZ
        }
        return ret;
 }
-static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
-       LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = RouteHintHop_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static inline struct LDKRouteHint CResult_RouteHintDecodeErrorZ_get_ok(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR owner){
        LDKRouteHint ret = *owner->contents.result;
        ret.is_owned = false;
@@ -3733,7 +3775,7 @@ void log_LDKLogger_jcall(const void* this_arg, LDKRecord record) {
        int64_t record_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(record_var);
        record_ref = tag_ptr(record_var.inner, record_var.is_owned);
-       js_invoke_function_void_l(j_calls->instance_ptr, 25, record_ref);
+       js_invoke_function_void_l(j_calls->instance_ptr, 24, record_ref);
 }
 static void LDKLogger_JCalls_cloned(LDKLogger* new_obj) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) new_obj->this_arg;
@@ -3907,6 +3949,7 @@ uint32_t CS_LDK_LDKClosureReason_ty_from_ptr(int64_t ptr) {
                case LDKClosureReason_CounterpartyCoopClosedUnfundedChannel: return 10;
                case LDKClosureReason_FundingBatchClosure: return 11;
                case LDKClosureReason_HTLCsTimedOut: return 12;
+               case LDKClosureReason_PeerFeerateTooLow: return 13;
                default: abort();
        }
 }
@@ -3919,6 +3962,12 @@ int64_t CS_LDK_LDKClosureReason_CounterpartyForceClosed_get_peer_msg(int64_t ptr
                        peer_msg_ref = tag_ptr(peer_msg_var.inner, false);
        return peer_msg_ref;
 }
+int64_t CS_LDK_LDKClosureReason_HolderForceClosed_get_broadcasted_latest_txn(int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKClosureReason_HolderForceClosed);
+       int64_t broadcasted_latest_txn_ref = tag_ptr(&obj->holder_force_closed.broadcasted_latest_txn, false);
+       return broadcasted_latest_txn_ref;
+}
 jstring CS_LDK_LDKClosureReason_ProcessingError_get_err(int64_t ptr) {
        LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
        CHECK(obj->tag == LDKClosureReason_ProcessingError);
@@ -3926,6 +3975,18 @@ jstring CS_LDK_LDKClosureReason_ProcessingError_get_err(int64_t ptr) {
                        jstring err_conv = str_ref_to_cs(err_str.chars, err_str.len);
        return err_conv;
 }
+int32_t CS_LDK_LDKClosureReason_PeerFeerateTooLow_get_peer_feerate_sat_per_kw(int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKClosureReason_PeerFeerateTooLow);
+       int32_t peer_feerate_sat_per_kw_conv = obj->peer_feerate_too_low.peer_feerate_sat_per_kw;
+       return peer_feerate_sat_per_kw_conv;
+}
+int32_t CS_LDK_LDKClosureReason_PeerFeerateTooLow_get_required_feerate_sat_per_kw(int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKClosureReason_PeerFeerateTooLow);
+       int32_t required_feerate_sat_per_kw_conv = obj->peer_feerate_too_low.required_feerate_sat_per_kw;
+       return required_feerate_sat_per_kw_conv;
+}
 uint32_t CS_LDK_LDKMonitorEvent_ty_from_ptr(int64_t ptr) {
        LDKMonitorEvent *obj = (LDKMonitorEvent*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -4373,6 +4434,32 @@ int32_t  CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticEr
        return ret_conv;
 }
 
+static inline struct LDKOffer CResult_OfferDecodeErrorZ_get_ok(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR owner){
+       LDKOffer ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_OfferDecodeErrorZ* owner_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(owner);
+       LDKOffer ret_var = CResult_OfferDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_OfferDecodeErrorZ_get_err(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_OfferDecodeErrorZ* owner_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_OfferDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKOffer CResult_OfferBolt12ParseErrorZ_get_ok(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKOffer ret = *owner->contents.result;
        ret.is_owned = false;
@@ -4451,21 +4538,11 @@ int32_t  CS_LDK_CResult_PublicKeySecp256k1ErrorZ_get_err(int64_t owner) {
 uint32_t CS_LDK_LDKNetworkUpdate_ty_from_ptr(int64_t ptr) {
        LDKNetworkUpdate *obj = (LDKNetworkUpdate*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKNetworkUpdate_ChannelUpdateMessage: return 0;
-               case LDKNetworkUpdate_ChannelFailure: return 1;
-               case LDKNetworkUpdate_NodeFailure: return 2;
+               case LDKNetworkUpdate_ChannelFailure: return 0;
+               case LDKNetworkUpdate_NodeFailure: return 1;
                default: abort();
        }
 }
-int64_t CS_LDK_LDKNetworkUpdate_ChannelUpdateMessage_get_msg(int64_t ptr) {
-       LDKNetworkUpdate *obj = (LDKNetworkUpdate*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKNetworkUpdate_ChannelUpdateMessage);
-       LDKChannelUpdate msg_var = obj->channel_update_message.msg;
-                       int64_t msg_ref = 0;
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
-                       msg_ref = tag_ptr(msg_var.inner, false);
-       return msg_ref;
-}
 int64_t CS_LDK_LDKNetworkUpdate_ChannelFailure_get_short_channel_id(int64_t ptr) {
        LDKNetworkUpdate *obj = (LDKNetworkUpdate*)untag_ptr(ptr);
        CHECK(obj->tag == LDKNetworkUpdate_ChannelFailure);
@@ -4590,7 +4667,7 @@ LDKUtxoResult get_utxo_LDKUtxoLookup_jcall(const void* this_arg, const uint8_t (
        int8_tArray chain_hash_arr = init_int8_tArray(32, __LINE__);
        memcpy(chain_hash_arr->elems, *chain_hash, 32);
        int64_t short_channel_id_conv = short_channel_id;
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 26, (int64_t)chain_hash_arr, short_channel_id_conv);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 25, (int64_t)chain_hash_arr, short_channel_id_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKUtxoResult ret_conv = *(LDKUtxoResult*)(ret_ptr);
@@ -4828,7 +4905,7 @@ uint32_t CS_LDK_LDKMessageSendEvent_ty_from_ptr(int64_t ptr) {
                case LDKMessageSendEvent_SendFundingCreated: return 4;
                case LDKMessageSendEvent_SendFundingSigned: return 5;
                case LDKMessageSendEvent_SendStfu: return 6;
-               case LDKMessageSendEvent_SendSplice: return 7;
+               case LDKMessageSendEvent_SendSpliceInit: return 7;
                case LDKMessageSendEvent_SendSpliceAck: return 8;
                case LDKMessageSendEvent_SendSpliceLocked: return 9;
                case LDKMessageSendEvent_SendTxAddInput: return 10;
@@ -4972,17 +5049,17 @@ int64_t CS_LDK_LDKMessageSendEvent_SendStfu_get_msg(int64_t ptr) {
                        msg_ref = tag_ptr(msg_var.inner, false);
        return msg_ref;
 }
-int8_tArray CS_LDK_LDKMessageSendEvent_SendSplice_get_node_id(int64_t ptr) {
+int8_tArray CS_LDK_LDKMessageSendEvent_SendSpliceInit_get_node_id(int64_t ptr) {
        LDKMessageSendEvent *obj = (LDKMessageSendEvent*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKMessageSendEvent_SendSplice);
+       CHECK(obj->tag == LDKMessageSendEvent_SendSpliceInit);
        int8_tArray node_id_arr = init_int8_tArray(33, __LINE__);
-       memcpy(node_id_arr->elems, obj->send_splice.node_id.compressed_form, 33);
+       memcpy(node_id_arr->elems, obj->send_splice_init.node_id.compressed_form, 33);
        return node_id_arr;
 }
-int64_t CS_LDK_LDKMessageSendEvent_SendSplice_get_msg(int64_t ptr) {
+int64_t CS_LDK_LDKMessageSendEvent_SendSpliceInit_get_msg(int64_t ptr) {
        LDKMessageSendEvent *obj = (LDKMessageSendEvent*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKMessageSendEvent_SendSplice);
-       LDKSplice msg_var = obj->send_splice.msg;
+       CHECK(obj->tag == LDKMessageSendEvent_SendSpliceInit);
+       LDKSpliceInit msg_var = obj->send_splice_init.msg;
                        int64_t msg_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = tag_ptr(msg_var.inner, false);
@@ -5606,17 +5683,41 @@ static inline LDKCVec_SocketAddressZ CVec_SocketAddressZ_clone(const LDKCVec_Soc
        }
        return ret;
 }
+uint32_t CS_LDK_LDKNodeAnnouncementInfo_ty_from_ptr(int64_t ptr) {
+       LDKNodeAnnouncementInfo *obj = (LDKNodeAnnouncementInfo*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKNodeAnnouncementInfo_Relayed: return 0;
+               case LDKNodeAnnouncementInfo_Local: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKNodeAnnouncementInfo_Relayed_get_relayed(int64_t ptr) {
+       LDKNodeAnnouncementInfo *obj = (LDKNodeAnnouncementInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKNodeAnnouncementInfo_Relayed);
+       LDKNodeAnnouncement relayed_var = obj->relayed;
+                       int64_t relayed_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(relayed_var);
+                       relayed_ref = tag_ptr(relayed_var.inner, false);
+       return relayed_ref;
+}
+int64_t CS_LDK_LDKNodeAnnouncementInfo_Local_get_local(int64_t ptr) {
+       LDKNodeAnnouncementInfo *obj = (LDKNodeAnnouncementInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKNodeAnnouncementInfo_Local);
+       LDKNodeAnnouncementDetails local_var = obj->local;
+                       int64_t local_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(local_var);
+                       local_ref = tag_ptr(local_var.inner, false);
+       return local_ref;
+}
 static inline struct LDKNodeAnnouncementInfo CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR owner){
-       LDKNodeAnnouncementInfo ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
+CHECK(owner->result_ok);
+       return NodeAnnouncementInfo_clone(&*owner->contents.result);
 }
 int64_t  CS_LDK_CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(int64_t owner) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* owner_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)untag_ptr(owner);
-       LDKNodeAnnouncementInfo ret_var = CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
@@ -5658,6 +5759,20 @@ int64_t  CS_LDK_CResult_NodeAliasDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+uint32_t CS_LDK_LDKCOption_NodeAnnouncementInfoZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_NodeAnnouncementInfoZ *obj = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_NodeAnnouncementInfoZ_Some: return 0;
+               case LDKCOption_NodeAnnouncementInfoZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_NodeAnnouncementInfoZ_Some_get_some(int64_t ptr) {
+       LDKCOption_NodeAnnouncementInfoZ *obj = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_NodeAnnouncementInfoZ_Some);
+       int64_t some_ref = tag_ptr(&obj->some, false);
+       return some_ref;
+}
 static inline struct LDKNodeInfo CResult_NodeInfoDecodeErrorZ_get_ok(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR owner){
        LDKNodeInfo ret = *owner->contents.result;
        ret.is_owned = false;
@@ -6436,6 +6551,68 @@ int64_t  CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+uint32_t CS_LDK_LDKOffersContext_ty_from_ptr(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKOffersContext_InvoiceRequest: return 0;
+               case LDKOffersContext_OutboundPayment: return 1;
+               case LDKOffersContext_InboundPayment: return 2;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKOffersContext_InvoiceRequest_get_nonce(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_InvoiceRequest);
+       LDKNonce nonce_var = obj->invoice_request.nonce;
+                       int64_t nonce_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_var);
+                       nonce_ref = tag_ptr(nonce_var.inner, false);
+       return nonce_ref;
+}
+int8_tArray CS_LDK_LDKOffersContext_OutboundPayment_get_payment_id(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_OutboundPayment);
+       int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
+       memcpy(payment_id_arr->elems, obj->outbound_payment.payment_id.data, 32);
+       return payment_id_arr;
+}
+int64_t CS_LDK_LDKOffersContext_OutboundPayment_get_nonce(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_OutboundPayment);
+       LDKNonce nonce_var = obj->outbound_payment.nonce;
+                       int64_t nonce_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_var);
+                       nonce_ref = tag_ptr(nonce_var.inner, false);
+       return nonce_ref;
+}
+int8_tArray CS_LDK_LDKOffersContext_OutboundPayment_get_hmac(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_OutboundPayment);
+       int8_tArray hmac_arr = init_int8_tArray(32, __LINE__);
+       memcpy(hmac_arr->elems, obj->outbound_payment.hmac.data, 32);
+       return hmac_arr;
+}
+int8_tArray CS_LDK_LDKOffersContext_InboundPayment_get_payment_hash(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_InboundPayment);
+       int8_tArray payment_hash_arr = init_int8_tArray(32, __LINE__);
+       memcpy(payment_hash_arr->elems, obj->inbound_payment.payment_hash.data, 32);
+       return payment_hash_arr;
+}
+uint32_t CS_LDK_LDKCOption_OffersContextZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_OffersContextZ *obj = (LDKCOption_OffersContextZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_OffersContextZ_Some: return 0;
+               case LDKCOption_OffersContextZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_OffersContextZ_Some_get_some(int64_t ptr) {
+       LDKCOption_OffersContextZ *obj = (LDKCOption_OffersContextZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_OffersContextZ_Some);
+       int64_t some_ref = tag_ptr(&obj->some, false);
+       return some_ref;
+}
 uint32_t CS_LDK_LDKOffersMessage_ty_from_ptr(int64_t ptr) {
        LDKOffersMessage *obj = (LDKOffersMessage*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -6472,19 +6649,46 @@ int64_t CS_LDK_LDKOffersMessage_InvoiceError_get_invoice_error(int64_t ptr) {
                        invoice_error_ref = tag_ptr(invoice_error_var.inner, false);
        return invoice_error_ref;
 }
-uint32_t CS_LDK_LDKCOption_OffersMessageZ_ty_from_ptr(int64_t ptr) {
-       LDKCOption_OffersMessageZ *obj = (LDKCOption_OffersMessageZ*)untag_ptr(ptr);
+static inline struct LDKOffersMessage C2Tuple_OffersMessageResponseInstructionZ_get_a(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR owner){
+       return OffersMessage_clone(&owner->a);
+}
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_get_a(int64_t owner) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* owner_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(owner);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = C2Tuple_OffersMessageResponseInstructionZ_get_a(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKResponseInstruction C2Tuple_OffersMessageResponseInstructionZ_get_b(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR owner){
+       LDKResponseInstruction ret = owner->b;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_get_b(int64_t owner) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* owner_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(owner);
+       LDKResponseInstruction ret_var = C2Tuple_OffersMessageResponseInstructionZ_get_b(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+uint32_t CS_LDK_LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_OffersMessageZ_Some: return 0;
-               case LDKCOption_OffersMessageZ_None: return 1;
+               case LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some: return 0;
+               case LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_None: return 1;
                default: abort();
        }
 }
-int64_t CS_LDK_LDKCOption_OffersMessageZ_Some_get_some(int64_t ptr) {
-       LDKCOption_OffersMessageZ *obj = (LDKCOption_OffersMessageZ*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKCOption_OffersMessageZ_Some);
-       int64_t some_ref = tag_ptr(&obj->some, false);
-       return some_ref;
+int64_t CS_LDK_LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some_get_some(int64_t ptr) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some);
+       LDKC2Tuple_OffersMessageResponseInstructionZ* some_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *some_conv = obj->some;
+                       *some_conv = C2Tuple_OffersMessageResponseInstructionZ_clone(some_conv);
+       return tag_ptr(some_conv, true);
 }
 uint32_t CS_LDK_LDKDestination_ty_from_ptr(int64_t ptr) {
        LDKDestination *obj = (LDKDestination*)untag_ptr(ptr);
@@ -6504,52 +6708,211 @@ int8_tArray CS_LDK_LDKDestination_Node_get_node(int64_t ptr) {
 int64_t CS_LDK_LDKDestination_BlindedPath_get_blinded_path(int64_t ptr) {
        LDKDestination *obj = (LDKDestination*)untag_ptr(ptr);
        CHECK(obj->tag == LDKDestination_BlindedPath);
-       LDKBlindedPath blinded_path_var = obj->blinded_path;
+       LDKBlindedMessagePath blinded_path_var = obj->blinded_path;
                        int64_t blinded_path_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_path_var);
                        blinded_path_ref = tag_ptr(blinded_path_var.inner, false);
        return blinded_path_ref;
 }
-static inline struct LDKOffersMessage C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner){
+uint32_t CS_LDK_LDKMessageContext_ty_from_ptr(int64_t ptr) {
+       LDKMessageContext *obj = (LDKMessageContext*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKMessageContext_Offers: return 0;
+               case LDKMessageContext_Custom: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKMessageContext_Offers_get_offers(int64_t ptr) {
+       LDKMessageContext *obj = (LDKMessageContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageContext_Offers);
+       int64_t offers_ref = tag_ptr(&obj->offers, false);
+       return offers_ref;
+}
+int8_tArray CS_LDK_LDKMessageContext_Custom_get_custom(int64_t ptr) {
+       LDKMessageContext *obj = (LDKMessageContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageContext_Custom);
+       LDKCVec_u8Z custom_var = obj->custom;
+                       int8_tArray custom_arr = init_int8_tArray(custom_var.datalen, __LINE__);
+                       memcpy(custom_arr->elems, custom_var.data, custom_var.datalen);
+       return custom_arr;
+}
+uint32_t CS_LDK_LDKMessageSendInstructions_ty_from_ptr(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKMessageSendInstructions_WithSpecifiedReplyPath: return 0;
+               case LDKMessageSendInstructions_WithReplyPath: return 1;
+               case LDKMessageSendInstructions_WithoutReplyPath: return 2;
+               case LDKMessageSendInstructions_ForReply: return 3;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithSpecifiedReplyPath_get_destination(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithSpecifiedReplyPath);
+       int64_t destination_ref = tag_ptr(&obj->with_specified_reply_path.destination, false);
+       return destination_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithSpecifiedReplyPath_get_reply_path(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithSpecifiedReplyPath);
+       LDKBlindedMessagePath reply_path_var = obj->with_specified_reply_path.reply_path;
+                       int64_t reply_path_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_var);
+                       reply_path_ref = tag_ptr(reply_path_var.inner, false);
+       return reply_path_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithReplyPath_get_destination(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithReplyPath);
+       int64_t destination_ref = tag_ptr(&obj->with_reply_path.destination, false);
+       return destination_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithReplyPath_get_context(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithReplyPath);
+       int64_t context_ref = tag_ptr(&obj->with_reply_path.context, false);
+       return context_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithoutReplyPath_get_destination(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithoutReplyPath);
+       int64_t destination_ref = tag_ptr(&obj->without_reply_path.destination, false);
+       return destination_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_ForReply_get_instructions(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_ForReply);
+       LDKResponseInstruction instructions_var = obj->for_reply.instructions;
+                       int64_t instructions_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(instructions_var);
+                       instructions_ref = tag_ptr(instructions_var.inner, false);
+       return instructions_ref;
+}
+static inline struct LDKOffersMessage C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR owner){
        return OffersMessage_clone(&owner->a);
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(int64_t owner) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(owner);
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(int64_t owner) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(owner);
        LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(owner_conv);
+       *ret_copy = C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKDestination C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner){
-       return Destination_clone(&owner->b);
+static inline struct LDKMessageSendInstructions C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR owner){
+       return MessageSendInstructions_clone(&owner->b);
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(int64_t owner) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(owner_conv);
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(int64_t owner) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = owner->c;
+static inline LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_clone(const LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ *orig) {
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ) * orig->datalen, "LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_OffersMessageMessageSendInstructionsZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKReleaseHeldHtlc C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR owner){
+       LDKReleaseHeldHtlc ret = owner->a;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(int64_t owner) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* owner_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(owner);
+       LDKReleaseHeldHtlc ret_var = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKResponseInstruction C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR owner){
+       LDKResponseInstruction ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(int64_t owner) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(owner_conv);
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(int64_t owner) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* owner_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(owner);
+       LDKResponseInstruction ret_var = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_clone(const LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ *orig) {
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ) * orig->datalen, "LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ clone bytes"), .datalen = orig->datalen };
+uint32_t CS_LDK_LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *obj = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some: return 0;
+               case LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some_get_some(int64_t ptr) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *obj = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* some_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *some_conv = obj->some;
+                       *some_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(some_conv);
+       return tag_ptr(some_conv, true);
+}
+uint32_t CS_LDK_LDKAsyncPaymentsMessage_ty_from_ptr(int64_t ptr) {
+       LDKAsyncPaymentsMessage *obj = (LDKAsyncPaymentsMessage*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKAsyncPaymentsMessage_HeldHtlcAvailable: return 0;
+               case LDKAsyncPaymentsMessage_ReleaseHeldHtlc: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKAsyncPaymentsMessage_HeldHtlcAvailable_get_held_htlc_available(int64_t ptr) {
+       LDKAsyncPaymentsMessage *obj = (LDKAsyncPaymentsMessage*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKAsyncPaymentsMessage_HeldHtlcAvailable);
+       LDKHeldHtlcAvailable held_htlc_available_var = obj->held_htlc_available;
+                       int64_t held_htlc_available_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(held_htlc_available_var);
+                       held_htlc_available_ref = tag_ptr(held_htlc_available_var.inner, false);
+       return held_htlc_available_ref;
+}
+int64_t CS_LDK_LDKAsyncPaymentsMessage_ReleaseHeldHtlc_get_release_held_htlc(int64_t ptr) {
+       LDKAsyncPaymentsMessage *obj = (LDKAsyncPaymentsMessage*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKAsyncPaymentsMessage_ReleaseHeldHtlc);
+       LDKReleaseHeldHtlc release_held_htlc_var = obj->release_held_htlc;
+                       int64_t release_held_htlc_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(release_held_htlc_var);
+                       release_held_htlc_ref = tag_ptr(release_held_htlc_var.inner, false);
+       return release_held_htlc_ref;
+}
+static inline struct LDKAsyncPaymentsMessage C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR owner){
+       return AsyncPaymentsMessage_clone(&owner->a);
+}
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(int64_t owner) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKMessageSendInstructions C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR owner){
+       return MessageSendInstructions_clone(&owner->b);
+}
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(int64_t owner) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_clone(const LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ *orig) {
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ) * orig->datalen, "LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C3Tuple_OffersMessageDestinationBlindedPathZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -6843,7 +7206,7 @@ LDKCResult_ChannelMonitorUpdateStatusNoneZ watch_channel_LDKWatch_jcall(const vo
        int64_t monitor_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
        monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 27, funding_txo_ref, monitor_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 26, funding_txo_ref, monitor_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ChannelMonitorUpdateStatusNoneZ ret_conv = *(LDKCResult_ChannelMonitorUpdateStatusNoneZ*)(ret_ptr);
@@ -6861,13 +7224,13 @@ LDKChannelMonitorUpdateStatus update_channel_LDKWatch_jcall(const void* this_arg
        update_var = ChannelMonitorUpdate_clone(&update_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
        update_ref = tag_ptr(update_var.inner, update_var.is_owned);
-       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_ll(j_calls->instance_ptr, 28, funding_txo_ref, update_ref);
+       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_ll(j_calls->instance_ptr, 27, funding_txo_ref, update_ref);
        LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_cs(ret);
        return ret_conv;
 }
 LDKCVec_C4Tuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZZ release_pending_monitor_events_LDKWatch_jcall(const void* this_arg) {
        LDKWatch_JCalls *j_calls = (LDKWatch_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 29);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 28);
        LDKCVec_C4Tuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -6989,7 +7352,7 @@ void broadcast_transactions_LDKBroadcasterInterface_jcall(const void* this_arg,
        }
        
        FREE(txs_var.data);
-       js_invoke_function_void_l(j_calls->instance_ptr, 30, (int64_t)txs_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 29, (int64_t)txs_arr);
 }
 static void LDKBroadcasterInterface_JCalls_cloned(LDKBroadcasterInterface* new_obj) {
        LDKBroadcasterInterface_JCalls *j_calls = (LDKBroadcasterInterface_JCalls*) new_obj->this_arg;
@@ -7048,7 +7411,7 @@ static void LDKEntropySource_JCalls_free(void* this_arg) {
 }
 LDKThirtyTwoBytes get_secure_random_bytes_LDKEntropySource_jcall(const void* this_arg) {
        LDKEntropySource_JCalls *j_calls = (LDKEntropySource_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 31);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 30);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -7132,7 +7495,7 @@ static void LDKNodeSigner_JCalls_free(void* this_arg) {
 }
 LDKThirtyTwoBytes get_inbound_payment_key_material_LDKNodeSigner_jcall(const void* this_arg) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 32);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 31);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -7141,7 +7504,7 @@ LDKThirtyTwoBytes get_inbound_payment_key_material_LDKNodeSigner_jcall(const voi
 LDKCResult_PublicKeyNoneZ get_node_id_LDKNodeSigner_jcall(const void* this_arg, LDKRecipient recipient) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
        int32_t recipient_conv = LDKRecipient_to_cs(recipient);
-       uint64_t ret = js_invoke_function_l_Recipient(j_calls->instance_ptr, 33, recipient_conv);
+       uint64_t ret = js_invoke_function_l_Recipient(j_calls->instance_ptr, 32, recipient_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PublicKeyNoneZ ret_conv = *(LDKCResult_PublicKeyNoneZ*)(ret_ptr);
@@ -7156,30 +7519,22 @@ LDKCResult_ThirtyTwoBytesNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LD
        LDKCOption_BigEndianScalarZ *tweak_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
        *tweak_copy = tweak;
        int64_t tweak_ref = tag_ptr(tweak_copy, true);
-       uint64_t ret = js_invoke_function_l_Recipientll(j_calls->instance_ptr, 34, recipient_conv, (int64_t)other_key_arr, tweak_ref);
+       uint64_t ret = js_invoke_function_l_Recipientll(j_calls->instance_ptr, 33, recipient_conv, (int64_t)other_key_arr, tweak_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ThirtyTwoBytesNoneZ ret_conv = *(LDKCResult_ThirtyTwoBytesNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKNodeSigner_jcall(const void* this_arg, LDKu8slice hrp_bytes, LDKCVec_U5Z invoice_data, LDKRecipient recipient) {
+LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKNodeSigner_jcall(const void* this_arg, const LDKRawBolt11Invoice * invoice, LDKRecipient recipient) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
-       LDKu8slice hrp_bytes_var = hrp_bytes;
-       int8_tArray hrp_bytes_arr = init_int8_tArray(hrp_bytes_var.datalen, __LINE__);
-       memcpy(hrp_bytes_arr->elems, hrp_bytes_var.data, hrp_bytes_var.datalen);
-       LDKCVec_U5Z invoice_data_var = invoice_data;
-       ptrArray invoice_data_arr = NULL;
-       invoice_data_arr = init_ptrArray(invoice_data_var.datalen, __LINE__);
-       int8_t *invoice_data_arr_ptr = (int8_t*)(((uint8_t*)invoice_data_arr) + 8);
-       for (size_t h = 0; h < invoice_data_var.datalen; h++) {
-               uint8_t invoice_data_conv_7_val = invoice_data_var.data[h]._0;
-               invoice_data_arr_ptr[h] = invoice_data_conv_7_val;
-       }
-       
-       FREE(invoice_data_var.data);
+       LDKRawBolt11Invoice invoice_var = *invoice;
+       int64_t invoice_ref = 0;
+       invoice_var = RawBolt11Invoice_clone(&invoice_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
+       invoice_ref = tag_ptr(invoice_var.inner, invoice_var.is_owned);
        int32_t recipient_conv = LDKRecipient_to_cs(recipient);
-       uint64_t ret = js_invoke_function_l_llRecipient(j_calls->instance_ptr, 35, (int64_t)hrp_bytes_arr, (int64_t)invoice_data_arr, recipient_conv);
+       uint64_t ret = js_invoke_function_l_lRecipient(j_calls->instance_ptr, 34, invoice_ref, recipient_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
@@ -7193,7 +7548,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_request_LDKNodeSigner_jcall
        invoice_request_var = UnsignedInvoiceRequest_clone(&invoice_request_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_var);
        invoice_request_ref = tag_ptr(invoice_request_var.inner, invoice_request_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 36, invoice_request_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 35, invoice_request_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -7207,7 +7562,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_LDKNodeSigner_jcall(const v
        invoice_var = UnsignedBolt12Invoice_clone(&invoice_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
        invoice_ref = tag_ptr(invoice_var.inner, invoice_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 37, invoice_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 36, invoice_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -7219,7 +7574,7 @@ LDKCResult_ECDSASignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const voi
        LDKUnsignedGossipMessage *msg_copy = MALLOC(sizeof(LDKUnsignedGossipMessage), "LDKUnsignedGossipMessage");
        *msg_copy = msg;
        int64_t msg_ref = tag_ptr(msg_copy, true);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 38, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 37, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
@@ -7289,30 +7644,18 @@ int64_t  CS_LDK_NodeSigner_ecdh(int64_t this_arg, int32_t recipient, int8_tArray
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_NodeSigner_sign_invoice(int64_t this_arg, int8_tArray hrp_bytes, ptrArray invoice_data, int32_t recipient) {
+int64_t  CS_LDK_NodeSigner_sign_invoice(int64_t this_arg, int64_t invoice, int32_t recipient) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKNodeSigner* this_arg_conv = (LDKNodeSigner*)this_arg_ptr;
-       LDKu8slice hrp_bytes_ref;
-       hrp_bytes_ref.datalen = hrp_bytes->arr_len;
-       hrp_bytes_ref.data = hrp_bytes->elems;
-       LDKCVec_U5Z invoice_data_constr;
-       invoice_data_constr.datalen = invoice_data->arr_len;
-       if (invoice_data_constr.datalen > 0)
-               invoice_data_constr.data = MALLOC(invoice_data_constr.datalen * sizeof(LDKU5), "LDKCVec_U5Z Elements");
-       else
-               invoice_data_constr.data = NULL;
-       int8_t* invoice_data_vals = (void*) invoice_data->elems;
-       for (size_t h = 0; h < invoice_data_constr.datalen; h++) {
-               int8_t invoice_data_conv_7 = invoice_data_vals[h];
-               
-               invoice_data_constr.data[h] = (LDKU5){ ._0 = invoice_data_conv_7 };
-       }
-       FREE(invoice_data);
+       LDKRawBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
        LDKRecipient recipient_conv = LDKRecipient_from_cs(recipient);
        LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
-       *ret_conv = (this_arg_conv->sign_invoice)(this_arg_conv->this_arg, hrp_bytes_ref, invoice_data_constr, recipient_conv);
-       FREE(hrp_bytes);
+       *ret_conv = (this_arg_conv->sign_invoice)(this_arg_conv->this_arg, &invoice_conv, recipient_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -7373,33 +7716,33 @@ LDKThirtyTwoBytes generate_channel_keys_id_LDKSignerProvider_jcall(const void* t
        int64_t channel_value_satoshis_conv = channel_value_satoshis;
        int8_tArray user_channel_id_arr = init_int8_tArray(16, __LINE__);
        memcpy(user_channel_id_arr->elems, user_channel_id.le_bytes, 16);
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_bll(j_calls->instance_ptr, 39, inbound_conv, channel_value_satoshis_conv, (int64_t)user_channel_id_arr);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_bll(j_calls->instance_ptr, 38, inbound_conv, channel_value_satoshis_conv, (int64_t)user_channel_id_arr);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
        return ret_ref;
 }
-LDKWriteableEcdsaChannelSigner derive_channel_signer_LDKSignerProvider_jcall(const void* this_arg, uint64_t channel_value_satoshis, LDKThirtyTwoBytes channel_keys_id) {
+LDKEcdsaChannelSigner derive_channel_signer_LDKSignerProvider_jcall(const void* this_arg, uint64_t channel_value_satoshis, LDKThirtyTwoBytes channel_keys_id) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        int64_t channel_value_satoshis_conv = channel_value_satoshis;
        int8_tArray channel_keys_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(channel_keys_id_arr->elems, channel_keys_id.data, 32);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 40, channel_value_satoshis_conv, (int64_t)channel_keys_id_arr);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 39, channel_value_satoshis_conv, (int64_t)channel_keys_id_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKWriteableEcdsaChannelSigner ret_conv = *(LDKWriteableEcdsaChannelSigner*)(ret_ptr);
+       LDKEcdsaChannelSigner ret_conv = *(LDKEcdsaChannelSigner*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ read_chan_signer_LDKSignerProvider_jcall(const void* this_arg, LDKu8slice reader) {
+LDKCResult_EcdsaChannelSignerDecodeErrorZ read_chan_signer_LDKSignerProvider_jcall(const void* this_arg, LDKu8slice reader) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        LDKu8slice reader_var = reader;
        int8_tArray reader_arr = init_int8_tArray(reader_var.datalen, __LINE__);
        memcpy(reader_arr->elems, reader_var.data, reader_var.datalen);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 41, (int64_t)reader_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 40, (int64_t)reader_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ ret_conv = *(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)(ret_ptr);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ ret_conv = *(LDKCResult_EcdsaChannelSignerDecodeErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -7407,7 +7750,7 @@ LDKCResult_CVec_u8ZNoneZ get_destination_script_LDKSignerProvider_jcall(const vo
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        int8_tArray channel_keys_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(channel_keys_id_arr->elems, channel_keys_id.data, 32);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 42, (int64_t)channel_keys_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 41, (int64_t)channel_keys_id_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
@@ -7416,7 +7759,7 @@ LDKCResult_CVec_u8ZNoneZ get_destination_script_LDKSignerProvider_jcall(const vo
 }
 LDKCResult_ShutdownScriptNoneZ get_shutdown_scriptpubkey_LDKSignerProvider_jcall(const void* this_arg) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 43);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 42);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ShutdownScriptNoneZ ret_conv = *(LDKCResult_ShutdownScriptNoneZ*)(ret_ptr);
@@ -7467,7 +7810,7 @@ int64_t  CS_LDK_SignerProvider_derive_channel_signer(int64_t this_arg, int64_t c
        LDKThirtyTwoBytes channel_keys_id_ref;
        CHECK(channel_keys_id->arr_len == 32);
        memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
        *ret_ret = (this_arg_conv->derive_channel_signer)(this_arg_conv->this_arg, channel_value_satoshis, channel_keys_id_ref);
        return tag_ptr(ret_ret, true);
 }
@@ -7479,7 +7822,7 @@ int64_t  CS_LDK_SignerProvider_read_chan_signer(int64_t this_arg, int8_tArray re
        LDKu8slice reader_ref;
        reader_ref.datalen = reader->arr_len;
        reader_ref.data = reader->elems;
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
        *ret_conv = (this_arg_conv->read_chan_signer)(this_arg_conv->this_arg, reader_ref);
        FREE(reader);
        return tag_ptr(ret_conv, true);
@@ -7519,7 +7862,7 @@ static void LDKFeeEstimator_JCalls_free(void* this_arg) {
 uint32_t get_est_sat_per_1000_weight_LDKFeeEstimator_jcall(const void* this_arg, LDKConfirmationTarget confirmation_target) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) this_arg;
        int32_t confirmation_target_conv = LDKConfirmationTarget_to_cs(confirmation_target);
-       return js_invoke_function_i_ConfirmationTarget(j_calls->instance_ptr, 44, confirmation_target_conv);
+       return js_invoke_function_i_ConfirmationTarget(j_calls->instance_ptr, 43, confirmation_target_conv);
 }
 static void LDKFeeEstimator_JCalls_cloned(LDKFeeEstimator* new_obj) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) new_obj->this_arg;
@@ -7579,17 +7922,20 @@ LDKCResult_OnionMessagePathNoneZ find_path_LDKMessageRouter_jcall(const void* th
        LDKDestination *destination_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
        *destination_copy = destination;
        int64_t destination_ref = tag_ptr(destination_copy, true);
-       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 45, (int64_t)sender_arr, (int64_t)peers_arr, destination_ref);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 44, (int64_t)sender_arr, (int64_t)peers_arr, destination_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_OnionMessagePathNoneZ ret_conv = *(LDKCResult_OnionMessagePathNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_CVec_BlindedPathZNoneZ create_blinded_paths_LDKMessageRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKCVec_PublicKeyZ peers) {
+LDKCResult_CVec_BlindedMessagePathZNoneZ create_blinded_paths_LDKMessageRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKMessageContext context, LDKCVec_PublicKeyZ peers) {
        LDKMessageRouter_JCalls *j_calls = (LDKMessageRouter_JCalls*) this_arg;
        int8_tArray recipient_arr = init_int8_tArray(33, __LINE__);
        memcpy(recipient_arr->elems, recipient.compressed_form, 33);
+       LDKMessageContext *context_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
        LDKCVec_PublicKeyZ peers_var = peers;
        ptrArray peers_arr = NULL;
        peers_arr = init_ptrArray(peers_var.datalen, __LINE__);
@@ -7601,10 +7947,37 @@ LDKCResult_CVec_BlindedPathZNoneZ create_blinded_paths_LDKMessageRouter_jcall(co
        }
        
        FREE(peers_var.data);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 46, (int64_t)recipient_arr, (int64_t)peers_arr);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 45, (int64_t)recipient_arr, context_ref, (int64_t)peers_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_CVec_BlindedPathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedPathZNoneZ*)(ret_ptr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedMessagePathZNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
+}
+LDKCResult_CVec_BlindedMessagePathZNoneZ create_compact_blinded_paths_LDKMessageRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKMessageContext context, LDKCVec_MessageForwardNodeZ peers) {
+       LDKMessageRouter_JCalls *j_calls = (LDKMessageRouter_JCalls*) this_arg;
+       int8_tArray recipient_arr = init_int8_tArray(33, __LINE__);
+       memcpy(recipient_arr->elems, recipient.compressed_form, 33);
+       LDKMessageContext *context_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
+       LDKCVec_MessageForwardNodeZ peers_var = peers;
+       int64_tArray peers_arr = NULL;
+       peers_arr = init_int64_tArray(peers_var.datalen, __LINE__);
+       int64_t *peers_arr_ptr = (int64_t*)(((uint8_t*)peers_arr) + 8);
+       for (size_t u = 0; u < peers_var.datalen; u++) {
+               LDKMessageForwardNode peers_conv_20_var = peers_var.data[u];
+               int64_t peers_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(peers_conv_20_var);
+               peers_conv_20_ref = tag_ptr(peers_conv_20_var.inner, peers_conv_20_var.is_owned);
+               peers_arr_ptr[u] = peers_conv_20_ref;
+       }
+       
+       FREE(peers_var.data);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 46, (int64_t)recipient_arr, context_ref, (int64_t)peers_arr);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedMessagePathZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -7621,6 +7994,7 @@ static inline LDKMessageRouter LDKMessageRouter_init (int64_t o) {
                .this_arg = (void*) calls,
                .find_path = find_path_LDKMessageRouter_jcall,
                .create_blinded_paths = create_blinded_paths_LDKMessageRouter_jcall,
+               .create_compact_blinded_paths = create_compact_blinded_paths_LDKMessageRouter_jcall,
                .free = LDKMessageRouter_JCalls_free,
        };
        return ret;
@@ -7661,13 +8035,17 @@ int64_t  CS_LDK_MessageRouter_find_path(int64_t this_arg, int8_tArray sender, pt
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_MessageRouter_create_blinded_paths(int64_t this_arg, int8_tArray recipient, ptrArray peers) {
+int64_t  CS_LDK_MessageRouter_create_blinded_paths(int64_t this_arg, int8_tArray recipient, int64_t context, ptrArray peers) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKMessageRouter* this_arg_conv = (LDKMessageRouter*)this_arg_ptr;
        LDKPublicKey recipient_ref;
        CHECK(recipient->arr_len == 33);
        memcpy(recipient_ref.compressed_form, recipient->elems, 33); FREE(recipient);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
        LDKCVec_PublicKeyZ peers_constr;
        peers_constr.datalen = peers->arr_len;
        if (peers_constr.datalen > 0)
@@ -7683,8 +8061,41 @@ int64_t  CS_LDK_MessageRouter_create_blinded_paths(int64_t this_arg, int8_tArray
                peers_constr.data[i] = peers_conv_8_ref;
        }
        FREE(peers);
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = (this_arg_conv->create_blinded_paths)(this_arg_conv->this_arg, recipient_ref, peers_constr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = (this_arg_conv->create_blinded_paths)(this_arg_conv->this_arg, recipient_ref, context_conv, peers_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_MessageRouter_create_compact_blinded_paths(int64_t this_arg, int8_tArray recipient, int64_t context, int64_tArray peers) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKMessageRouter* this_arg_conv = (LDKMessageRouter*)this_arg_ptr;
+       LDKPublicKey recipient_ref;
+       CHECK(recipient->arr_len == 33);
+       memcpy(recipient_ref.compressed_form, recipient->elems, 33); FREE(recipient);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       LDKCVec_MessageForwardNodeZ peers_constr;
+       peers_constr.datalen = peers->arr_len;
+       if (peers_constr.datalen > 0)
+               peers_constr.data = MALLOC(peers_constr.datalen * sizeof(LDKMessageForwardNode), "LDKCVec_MessageForwardNodeZ Elements");
+       else
+               peers_constr.data = NULL;
+       int64_t* peers_vals = peers->elems;
+       for (size_t u = 0; u < peers_constr.datalen; u++) {
+               int64_t peers_conv_20 = peers_vals[u];
+               LDKMessageForwardNode peers_conv_20_conv;
+               peers_conv_20_conv.inner = untag_ptr(peers_conv_20);
+               peers_conv_20_conv.is_owned = ptr_is_owned(peers_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(peers_conv_20_conv);
+               peers_conv_20_conv = MessageForwardNode_clone(&peers_conv_20_conv);
+               peers_constr.data[u] = peers_conv_20_conv;
+       }
+       FREE(peers);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = (this_arg_conv->create_compact_blinded_paths)(this_arg_conv->this_arg, recipient_ref, context_conv, peers_constr);
        return tag_ptr(ret_conv, true);
 }
 
@@ -7773,7 +8184,7 @@ LDKCResult_RouteLightningErrorZ find_route_with_id_LDKRouter_jcall(const void* t
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ create_blinded_payment_paths_LDKRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKCVec_ChannelDetailsZ first_hops, LDKReceiveTlvs tlvs, uint64_t amount_msats) {
+LDKCResult_CVec_BlindedPaymentPathZNoneZ create_blinded_payment_paths_LDKRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKCVec_ChannelDetailsZ first_hops, LDKReceiveTlvs tlvs, uint64_t amount_msats) {
        LDKRouter_JCalls *j_calls = (LDKRouter_JCalls*) this_arg;
        int8_tArray recipient_arr = init_int8_tArray(33, __LINE__);
        memcpy(recipient_arr->elems, recipient.compressed_form, 33);
@@ -7798,7 +8209,7 @@ LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ create_blinded_payment_
        uint64_t ret = js_invoke_function_l_llll(j_calls->instance_ptr, 49, (int64_t)recipient_arr, (int64_t)first_hops_arr, tlvs_ref, amount_msats_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret_conv = *(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)(ret_ptr);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedPaymentPathZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -7951,7 +8362,7 @@ int64_t  CS_LDK_Router_create_blinded_payment_paths(int64_t this_arg, int8_tArra
        tlvs_conv.is_owned = ptr_is_owned(tlvs);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_conv);
        tlvs_conv = ReceiveTlvs_clone(&tlvs_conv);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
        *ret_conv = (this_arg_conv->create_blinded_payment_paths)(this_arg_conv->this_arg, recipient_ref, first_hops_constr, tlvs_conv, amount_msats);
        return tag_ptr(ret_conv, true);
 }
@@ -8304,6 +8715,29 @@ static inline LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ CVec_C2
        }
        return ret;
 }
+static inline void CResult_NoneReplayEventZ_get_ok(LDKCResult_NoneReplayEventZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return *owner->contents.result;
+}
+void  CS_LDK_CResult_NoneReplayEventZ_get_ok(int64_t owner) {
+       LDKCResult_NoneReplayEventZ* owner_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(owner);
+       CResult_NoneReplayEventZ_get_ok(owner_conv);
+}
+
+static inline struct LDKReplayEvent CResult_NoneReplayEventZ_get_err(LDKCResult_NoneReplayEventZ *NONNULL_PTR owner){
+       LDKReplayEvent ret = *owner->contents.err;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_NoneReplayEventZ_get_err(int64_t owner) {
+       LDKCResult_NoneReplayEventZ* owner_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(owner);
+       LDKReplayEvent ret_var = CResult_NoneReplayEventZ_get_err(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline LDKCVec_CommitmentTransactionZ CVec_CommitmentTransactionZ_clone(const LDKCVec_CommitmentTransactionZ *orig) {
        LDKCVec_CommitmentTransactionZ ret = { .data = MALLOC(sizeof(LDKCommitmentTransaction) * orig->datalen, "LDKCVec_CommitmentTransactionZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -8391,6 +8825,36 @@ int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_amount_satoshis(int64_t pt
        int64_t amount_satoshis_conv = obj->claimable_on_channel_close.amount_satoshis;
        return amount_satoshis_conv;
 }
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_transaction_fee_satoshis(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t transaction_fee_satoshis_conv = obj->claimable_on_channel_close.transaction_fee_satoshis;
+       return transaction_fee_satoshis_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_outbound_payment_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t outbound_payment_htlc_rounded_msat_conv = obj->claimable_on_channel_close.outbound_payment_htlc_rounded_msat;
+       return outbound_payment_htlc_rounded_msat_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_outbound_forwarded_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t outbound_forwarded_htlc_rounded_msat_conv = obj->claimable_on_channel_close.outbound_forwarded_htlc_rounded_msat;
+       return outbound_forwarded_htlc_rounded_msat_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_inbound_claiming_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t inbound_claiming_htlc_rounded_msat_conv = obj->claimable_on_channel_close.inbound_claiming_htlc_rounded_msat;
+       return inbound_claiming_htlc_rounded_msat_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_inbound_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t inbound_htlc_rounded_msat_conv = obj->claimable_on_channel_close.inbound_htlc_rounded_msat;
+       return inbound_htlc_rounded_msat_conv;
+}
 int64_t CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_amount_satoshis(int64_t ptr) {
        LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
        CHECK(obj->tag == LDKBalance_ClaimableAwaitingConfirmations);
@@ -8403,6 +8867,12 @@ int32_t CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_confirmation_height
        int32_t confirmation_height_conv = obj->claimable_awaiting_confirmations.confirmation_height;
        return confirmation_height_conv;
 }
+int32_t CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_source(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableAwaitingConfirmations);
+       int32_t source_conv = LDKBalanceSource_to_cs(obj->claimable_awaiting_confirmations.source);
+       return source_conv;
+}
 int64_t CS_LDK_LDKBalance_ContentiousClaimable_get_amount_satoshis(int64_t ptr) {
        LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
        CHECK(obj->tag == LDKBalance_ContentiousClaimable);
@@ -8448,6 +8918,12 @@ int8_tArray CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_payment_hash(int64_t
        memcpy(payment_hash_arr->elems, obj->maybe_timeout_claimable_htlc.payment_hash.data, 32);
        return payment_hash_arr;
 }
+jboolean CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_outbound_payment(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_MaybeTimeoutClaimableHTLC);
+       jboolean outbound_payment_conv = obj->maybe_timeout_claimable_htlc.outbound_payment;
+       return outbound_payment_conv;
+}
 int64_t CS_LDK_LDKBalance_MaybePreimageClaimableHTLC_get_amount_satoshis(int64_t ptr) {
        LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
        CHECK(obj->tag == LDKBalance_MaybePreimageClaimableHTLC);
@@ -8636,43 +9112,6 @@ static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone
        }
        return ret;
 }
-static inline struct LDKPublicKey C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR owner){
-       return owner->a;
-}
-int8_tArray  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(int64_t owner) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(owner);
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(owner_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-static inline struct LDKCVec_SocketAddressZ C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR owner){
-       return CVec_SocketAddressZ_clone(&owner->b);
-}
-int64_tArray  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(int64_t owner) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(owner);
-       LDKCVec_SocketAddressZ ret_var = C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(owner_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t p = 0; p < ret_var.datalen; p++) {
-               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
-               *ret_conv_15_copy = ret_var.data[p];
-               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
-               ret_arr_ptr[p] = ret_conv_15_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-static inline LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_clone(const LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ *orig) {
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(&orig->data[i]);
-       }
-       return ret;
-}
 typedef struct LDKOnionMessageContents_JCalls {
        atomic_size_t refcnt;
        uint32_t instance_ptr;
@@ -8687,9 +9126,15 @@ uint64_t tlv_type_LDKOnionMessageContents_jcall(const void* this_arg) {
        LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
        return js_invoke_function_l_(j_calls->instance_ptr, 53);
 }
+LDKStr msg_type_LDKOnionMessageContents_jcall(const void* this_arg) {
+       LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
+       jstring ret = (jstring)js_invoke_function_l_(j_calls->instance_ptr, 54);
+       LDKStr ret_conv = str_ref_to_owned_c(ret);
+       return ret_conv;
+}
 LDKCVec_u8Z write_LDKOnionMessageContents_jcall(const void* this_arg) {
        LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 54);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 55);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -8698,7 +9143,7 @@ LDKCVec_u8Z write_LDKOnionMessageContents_jcall(const void* this_arg) {
 }
 LDKStr debug_str_LDKOnionMessageContents_jcall(const void* this_arg) {
        LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
-       jstring ret = (jstring)js_invoke_function_l_(j_calls->instance_ptr, 55);
+       jstring ret = (jstring)js_invoke_function_l_(j_calls->instance_ptr, 56);
        LDKStr ret_conv = str_ref_to_owned_c(ret);
        return ret_conv;
 }
@@ -8714,6 +9159,7 @@ static inline LDKOnionMessageContents LDKOnionMessageContents_init (int64_t o) {
        LDKOnionMessageContents ret = {
                .this_arg = (void*) calls,
                .tlv_type = tlv_type_LDKOnionMessageContents_jcall,
+               .msg_type = msg_type_LDKOnionMessageContents_jcall,
                .write = write_LDKOnionMessageContents_jcall,
                .debug_str = debug_str_LDKOnionMessageContents_jcall,
                .cloned = LDKOnionMessageContents_JCalls_cloned,
@@ -8734,6 +9180,16 @@ int64_t  CS_LDK_OnionMessageContents_tlv_type(int64_t this_arg) {
        return ret_conv;
 }
 
+jstring  CS_LDK_OnionMessageContents_msg_type(int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKOnionMessageContents* this_arg_conv = (LDKOnionMessageContents*)this_arg_ptr;
+       LDKStr ret_str = (this_arg_conv->msg_type)(this_arg_conv->this_arg);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
 int8_tArray  CS_LDK_OnionMessageContents_write(int64_t this_arg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -8755,6 +9211,46 @@ jstring  CS_LDK_OnionMessageContents_debug_str(int64_t this_arg) {
        return ret_conv;
 }
 
+static inline struct LDKOnionMessageContents C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR owner){
+       return OnionMessageContents_clone(&owner->a);
+}
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* owner_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(owner);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(owner_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+static inline struct LDKResponseInstruction C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR owner){
+       LDKResponseInstruction ret = owner->b;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* owner_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(owner);
+       LDKResponseInstruction ret_var = C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+uint32_t CS_LDK_LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some: return 0;
+               case LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some_get_some(int64_t ptr) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* some_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *some_conv = obj->some;
+                       *some_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone(some_conv);
+       return tag_ptr(some_conv, true);
+}
 uint32_t CS_LDK_LDKCOption_OnionMessageContentsZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_OnionMessageContentsZ *obj = (LDKCOption_OnionMessageContentsZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -8794,45 +9290,31 @@ int64_t  CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_get_err(int64_
        return ret_ref;
 }
 
-static inline struct LDKOnionMessageContents C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner){
+static inline struct LDKOnionMessageContents C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR owner){
        return OnionMessageContents_clone(&owner->a);
 }
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(int64_t owner) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(owner);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(owner);
        LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(owner_conv);
+       *ret_ret = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(owner_conv);
        return tag_ptr(ret_ret, true);
 }
 
-static inline struct LDKDestination C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner){
-       return Destination_clone(&owner->b);
+static inline struct LDKMessageSendInstructions C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR owner){
+       return MessageSendInstructions_clone(&owner->b);
 }
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(int64_t owner) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(owner_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = owner->c;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(int64_t owner) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_clone(const LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ *orig) {
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ) * orig->datalen, "LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_clone(const LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ *orig) {
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ) * orig->datalen, "LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -9166,21 +9648,6 @@ int32_t  CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_get_err(int64_t owner
        return ret_conv;
 }
 
-uint32_t CS_LDK_LDKCOption_SecretKeyZ_ty_from_ptr(int64_t ptr) {
-       LDKCOption_SecretKeyZ *obj = (LDKCOption_SecretKeyZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_SecretKeyZ_Some: return 0;
-               case LDKCOption_SecretKeyZ_None: return 1;
-               default: abort();
-       }
-}
-int8_tArray CS_LDK_LDKCOption_SecretKeyZ_Some_get_some(int64_t ptr) {
-       LDKCOption_SecretKeyZ *obj = (LDKCOption_SecretKeyZ*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKCOption_SecretKeyZ_Some);
-       int8_tArray some_arr = init_int8_tArray(32, __LINE__);
-       memcpy(some_arr->elems, obj->some.bytes, 32);
-       return some_arr;
-}
 static inline struct LDKInvoiceWithExplicitSigningPubkeyBuilder CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_get_ok(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ *NONNULL_PTR owner){
        LDKInvoiceWithExplicitSigningPubkeyBuilder ret = *owner->contents.result;
        ret.is_owned = false;
@@ -9466,28 +9933,28 @@ int64_t  CS_LDK_CResult_StfuDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline struct LDKSplice CResult_SpliceDecodeErrorZ_get_ok(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR owner){
-       LDKSplice ret = *owner->contents.result;
+static inline struct LDKSpliceInit CResult_SpliceInitDecodeErrorZ_get_ok(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR owner){
+       LDKSpliceInit ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_SpliceDecodeErrorZ* owner_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(owner);
-       LDKSplice ret_var = CResult_SpliceDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_SpliceInitDecodeErrorZ* owner_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(owner);
+       LDKSpliceInit ret_var = CResult_SpliceInitDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_SpliceDecodeErrorZ_get_err(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_SpliceInitDecodeErrorZ_get_err(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_SpliceDecodeErrorZ* owner_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_SpliceInitDecodeErrorZ* owner_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_SpliceDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_SpliceInitDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -9882,6 +10349,32 @@ int64_t  CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_get_err(int64_t owner)
        return ret_ref;
 }
 
+static inline struct LDKCommitmentSignedBatch CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR owner){
+       LDKCommitmentSignedBatch ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* owner_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(owner);
+       LDKCommitmentSignedBatch ret_var = CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_CommitmentSignedBatchDecodeErrorZ_get_err(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* owner_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_CommitmentSignedBatchDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKCommitmentSigned CResult_CommitmentSignedDecodeErrorZ_get_ok(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR owner){
        LDKCommitmentSigned ret = *owner->contents.result;
        ret.is_owned = false;
@@ -10714,53 +11207,6 @@ int64_t  CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_get_err(int64_t owner)
        return ret_ref;
 }
 
-static inline LDKCVec_PhantomRouteHintsZ CVec_PhantomRouteHintsZ_clone(const LDKCVec_PhantomRouteHintsZ *orig) {
-       LDKCVec_PhantomRouteHintsZ ret = { .data = MALLOC(sizeof(LDKPhantomRouteHints) * orig->datalen, "LDKCVec_PhantomRouteHintsZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = PhantomRouteHints_clone(&orig->data[i]);
-       }
-       return ret;
-}
-uint32_t CS_LDK_LDKSignOrCreationError_ty_from_ptr(int64_t ptr) {
-       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKSignOrCreationError_SignError: return 0;
-               case LDKSignOrCreationError_CreationError: return 1;
-               default: abort();
-       }
-}
-int32_t CS_LDK_LDKSignOrCreationError_CreationError_get_creation_error(int64_t ptr) {
-       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKSignOrCreationError_CreationError);
-       int32_t creation_error_conv = LDKCreationError_to_cs(obj->creation_error);
-       return creation_error_conv;
-}
-static inline struct LDKBolt11Invoice CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
-       LDKBolt11Invoice ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(int64_t owner) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
-       LDKBolt11Invoice ret_var = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline struct LDKSignOrCreationError CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return SignOrCreationError_clone(&*owner->contents.err);
-}
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(int64_t owner) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
-       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
-       *ret_copy = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 uint32_t CS_LDK_LDKCOption_InboundHTLCStateDetailsZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_InboundHTLCStateDetailsZ *obj = (LDKCOption_InboundHTLCStateDetailsZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -11017,6 +11463,82 @@ int64_t  CS_LDK_CResult_ChannelShutdownStateDecodeErrorZ_get_err(int64_t owner)
        return ret_ref;
 }
 
+static inline struct LDKHeldHtlcAvailable CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR owner){
+       LDKHeldHtlcAvailable ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* owner_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(owner);
+       LDKHeldHtlcAvailable ret_var = CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_HeldHtlcAvailableDecodeErrorZ_get_err(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* owner_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_HeldHtlcAvailableDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKReleaseHeldHtlc CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR owner){
+       LDKReleaseHeldHtlc ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* owner_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(owner);
+       LDKReleaseHeldHtlc ret_var = CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* owner_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKAsyncPaymentsMessage CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return AsyncPaymentsMessage_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* owner_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(owner);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* owner_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKOffersMessage CResult_OffersMessageDecodeErrorZ_get_ok(LDKCResult_OffersMessageDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return OffersMessage_clone(&*owner->contents.result);
@@ -11431,6 +11953,55 @@ int64_t  CS_LDK_CResult_ShutdownScriptInvalidShutdownScriptZ_get_err(int64_t own
        return ret_ref;
 }
 
+uint32_t CS_LDK_LDKFundingInfo_ty_from_ptr(int64_t ptr) {
+       LDKFundingInfo *obj = (LDKFundingInfo*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKFundingInfo_Tx: return 0;
+               case LDKFundingInfo_OutPoint: return 1;
+               default: abort();
+       }
+}
+int8_tArray CS_LDK_LDKFundingInfo_Tx_get_transaction(int64_t ptr) {
+       LDKFundingInfo *obj = (LDKFundingInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKFundingInfo_Tx);
+       LDKTransaction transaction_var = obj->tx.transaction;
+                       int8_tArray transaction_arr = init_int8_tArray(transaction_var.datalen, __LINE__);
+                       memcpy(transaction_arr->elems, transaction_var.data, transaction_var.datalen);
+       return transaction_arr;
+}
+int64_t CS_LDK_LDKFundingInfo_OutPoint_get_outpoint(int64_t ptr) {
+       LDKFundingInfo *obj = (LDKFundingInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKFundingInfo_OutPoint);
+       LDKOutPoint outpoint_var = obj->out_point.outpoint;
+                       int64_t outpoint_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_var);
+                       outpoint_ref = tag_ptr(outpoint_var.inner, false);
+       return outpoint_ref;
+}
+static inline struct LDKFundingInfo CResult_FundingInfoDecodeErrorZ_get_ok(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return FundingInfo_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_FundingInfoDecodeErrorZ* owner_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = CResult_FundingInfoDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_FundingInfoDecodeErrorZ_get_err(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_FundingInfoDecodeErrorZ* owner_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_FundingInfoDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 uint32_t CS_LDK_LDKPaymentPurpose_ty_from_ptr(int64_t ptr) {
        LDKPaymentPurpose *obj = (LDKPaymentPurpose*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -11735,24 +12306,40 @@ int64_t  CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_get_err(int64_t own
        return ret_ref;
 }
 
-static inline enum LDKPaymentFailureReason CResult_PaymentFailureReasonDecodeErrorZ_get_ok(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner){
+uint32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_PaymentFailureReasonZ_Some: return 0;
+               case LDKCOption_PaymentFailureReasonZ_None: return 1;
+               default: abort();
+       }
+}
+int32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_Some_get_some(int64_t ptr) {
+       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_PaymentFailureReasonZ_Some);
+       int32_t some_conv = LDKPaymentFailureReason_to_cs(obj->some);
+       return some_conv;
+}
+static inline struct LDKCOption_PaymentFailureReasonZ CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return PaymentFailureReason_clone(&*owner->contents.result);
+       return COption_PaymentFailureReasonZ_clone(&*owner->contents.result);
 }
-int32_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* owner_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(owner);
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(CResult_PaymentFailureReasonDecodeErrorZ_get_ok(owner_conv));
-       return ret_conv;
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* owner_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(owner);
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_PaymentFailureReasonDecodeErrorZ_get_err(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* owner_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* owner_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_PaymentFailureReasonDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -11779,20 +12366,6 @@ static inline LDKCVec_ClaimedHTLCZ CVec_ClaimedHTLCZ_clone(const LDKCVec_Claimed
        }
        return ret;
 }
-uint32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_ty_from_ptr(int64_t ptr) {
-       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentFailureReasonZ_Some: return 0;
-               case LDKCOption_PaymentFailureReasonZ_None: return 1;
-               default: abort();
-       }
-}
-int32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_Some_get_some(int64_t ptr) {
-       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKCOption_PaymentFailureReasonZ_Some);
-       int32_t some_conv = LDKPaymentFailureReason_to_cs(obj->some);
-       return some_conv;
-}
 uint32_t CS_LDK_LDKBumpTransactionEvent_ty_from_ptr(int64_t ptr) {
        LDKBumpTransactionEvent *obj = (LDKBumpTransactionEvent*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -11926,27 +12499,30 @@ uint32_t CS_LDK_LDKEvent_ty_from_ptr(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        switch(obj->tag) {
                case LDKEvent_FundingGenerationReady: return 0;
-               case LDKEvent_PaymentClaimable: return 1;
-               case LDKEvent_PaymentClaimed: return 2;
-               case LDKEvent_ConnectionNeeded: return 3;
-               case LDKEvent_InvoiceRequestFailed: return 4;
-               case LDKEvent_PaymentSent: return 5;
-               case LDKEvent_PaymentFailed: return 6;
-               case LDKEvent_PaymentPathSuccessful: return 7;
-               case LDKEvent_PaymentPathFailed: return 8;
-               case LDKEvent_ProbeSuccessful: return 9;
-               case LDKEvent_ProbeFailed: return 10;
-               case LDKEvent_PendingHTLCsForwardable: return 11;
-               case LDKEvent_HTLCIntercepted: return 12;
-               case LDKEvent_SpendableOutputs: return 13;
-               case LDKEvent_PaymentForwarded: return 14;
-               case LDKEvent_ChannelPending: return 15;
-               case LDKEvent_ChannelReady: return 16;
-               case LDKEvent_ChannelClosed: return 17;
-               case LDKEvent_DiscardFunding: return 18;
-               case LDKEvent_OpenChannelRequest: return 19;
-               case LDKEvent_HTLCHandlingFailed: return 20;
-               case LDKEvent_BumpTransaction: return 21;
+               case LDKEvent_FundingTxBroadcastSafe: return 1;
+               case LDKEvent_PaymentClaimable: return 2;
+               case LDKEvent_PaymentClaimed: return 3;
+               case LDKEvent_ConnectionNeeded: return 4;
+               case LDKEvent_InvoiceReceived: return 5;
+               case LDKEvent_PaymentSent: return 6;
+               case LDKEvent_PaymentFailed: return 7;
+               case LDKEvent_PaymentPathSuccessful: return 8;
+               case LDKEvent_PaymentPathFailed: return 9;
+               case LDKEvent_ProbeSuccessful: return 10;
+               case LDKEvent_ProbeFailed: return 11;
+               case LDKEvent_PendingHTLCsForwardable: return 12;
+               case LDKEvent_HTLCIntercepted: return 13;
+               case LDKEvent_SpendableOutputs: return 14;
+               case LDKEvent_PaymentForwarded: return 15;
+               case LDKEvent_ChannelPending: return 16;
+               case LDKEvent_ChannelReady: return 17;
+               case LDKEvent_ChannelClosed: return 18;
+               case LDKEvent_DiscardFunding: return 19;
+               case LDKEvent_OpenChannelRequest: return 20;
+               case LDKEvent_HTLCHandlingFailed: return 21;
+               case LDKEvent_BumpTransaction: return 22;
+               case LDKEvent_OnionMessageIntercepted: return 23;
+               case LDKEvent_OnionMessagePeerConnected: return 24;
                default: abort();
        }
 }
@@ -11987,6 +12563,47 @@ int8_tArray CS_LDK_LDKEvent_FundingGenerationReady_get_user_channel_id(int64_t p
        memcpy(user_channel_id_arr->elems, obj->funding_generation_ready.user_channel_id.le_bytes, 16);
        return user_channel_id_arr;
 }
+int64_t CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_channel_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       LDKChannelId channel_id_var = obj->funding_tx_broadcast_safe.channel_id;
+                       int64_t channel_id_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
+                       channel_id_ref = tag_ptr(channel_id_var.inner, false);
+       return channel_id_ref;
+}
+int8_tArray CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_user_channel_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       int8_tArray user_channel_id_arr = init_int8_tArray(16, __LINE__);
+       memcpy(user_channel_id_arr->elems, obj->funding_tx_broadcast_safe.user_channel_id.le_bytes, 16);
+       return user_channel_id_arr;
+}
+int64_t CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_funding_txo(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       LDKOutPoint funding_txo_var = obj->funding_tx_broadcast_safe.funding_txo;
+                       int64_t funding_txo_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
+                       funding_txo_ref = tag_ptr(funding_txo_var.inner, false);
+       return funding_txo_ref;
+}
+int8_tArray CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_counterparty_node_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       int8_tArray counterparty_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(counterparty_node_id_arr->elems, obj->funding_tx_broadcast_safe.counterparty_node_id.compressed_form, 33);
+       return counterparty_node_id_arr;
+}
+int64_t CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_former_temporary_channel_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       LDKChannelId former_temporary_channel_id_var = obj->funding_tx_broadcast_safe.former_temporary_channel_id;
+                       int64_t former_temporary_channel_id_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_var);
+                       former_temporary_channel_id_ref = tag_ptr(former_temporary_channel_id_var.inner, false);
+       return former_temporary_channel_id_ref;
+}
 int8_tArray CS_LDK_LDKEvent_PaymentClaimable_get_receiver_node_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_PaymentClaimable);
@@ -12098,6 +12715,15 @@ int64_t CS_LDK_LDKEvent_PaymentClaimed_get_sender_intended_total_msat(int64_t pt
        int64_t sender_intended_total_msat_ref = tag_ptr(&obj->payment_claimed.sender_intended_total_msat, false);
        return sender_intended_total_msat_ref;
 }
+int64_t CS_LDK_LDKEvent_PaymentClaimed_get_onion_fields(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_PaymentClaimed);
+       LDKRecipientOnionFields onion_fields_var = obj->payment_claimed.onion_fields;
+                       int64_t onion_fields_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_var);
+                       onion_fields_ref = tag_ptr(onion_fields_var.inner, false);
+       return onion_fields_ref;
+}
 int8_tArray CS_LDK_LDKEvent_ConnectionNeeded_get_node_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_ConnectionNeeded);
@@ -12119,13 +12745,37 @@ int64_tArray CS_LDK_LDKEvent_ConnectionNeeded_get_addresses(int64_t ptr) {
                        
        return addresses_arr;
 }
-int8_tArray CS_LDK_LDKEvent_InvoiceRequestFailed_get_payment_id(int64_t ptr) {
+int8_tArray CS_LDK_LDKEvent_InvoiceReceived_get_payment_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKEvent_InvoiceRequestFailed);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
        int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
-       memcpy(payment_id_arr->elems, obj->invoice_request_failed.payment_id.data, 32);
+       memcpy(payment_id_arr->elems, obj->invoice_received.payment_id.data, 32);
        return payment_id_arr;
 }
+int64_t CS_LDK_LDKEvent_InvoiceReceived_get_invoice(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
+       LDKBolt12Invoice invoice_var = obj->invoice_received.invoice;
+                       int64_t invoice_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
+                       invoice_ref = tag_ptr(invoice_var.inner, false);
+       return invoice_ref;
+}
+int64_t CS_LDK_LDKEvent_InvoiceReceived_get_context(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
+       int64_t context_ref = tag_ptr(&obj->invoice_received.context, false);
+       return context_ref;
+}
+int64_t CS_LDK_LDKEvent_InvoiceReceived_get_responder(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
+       LDKResponder responder_var = obj->invoice_received.responder;
+                       int64_t responder_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+                       responder_ref = tag_ptr(responder_var.inner, false);
+       return responder_ref;
+}
 int64_t CS_LDK_LDKEvent_PaymentSent_get_payment_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_PaymentSent);
@@ -12159,12 +12809,11 @@ int8_tArray CS_LDK_LDKEvent_PaymentFailed_get_payment_id(int64_t ptr) {
        memcpy(payment_id_arr->elems, obj->payment_failed.payment_id.data, 32);
        return payment_id_arr;
 }
-int8_tArray CS_LDK_LDKEvent_PaymentFailed_get_payment_hash(int64_t ptr) {
+int64_t CS_LDK_LDKEvent_PaymentFailed_get_payment_hash(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_PaymentFailed);
-       int8_tArray payment_hash_arr = init_int8_tArray(32, __LINE__);
-       memcpy(payment_hash_arr->elems, obj->payment_failed.payment_hash.data, 32);
-       return payment_hash_arr;
+       int64_t payment_hash_ref = tag_ptr(&obj->payment_failed.payment_hash, false);
+       return payment_hash_ref;
 }
 int64_t CS_LDK_LDKEvent_PaymentFailed_get_reason(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
@@ -12536,13 +13185,11 @@ int64_t CS_LDK_LDKEvent_DiscardFunding_get_channel_id(int64_t ptr) {
                        channel_id_ref = tag_ptr(channel_id_var.inner, false);
        return channel_id_ref;
 }
-int8_tArray CS_LDK_LDKEvent_DiscardFunding_get_transaction(int64_t ptr) {
+int64_t CS_LDK_LDKEvent_DiscardFunding_get_funding_info(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_DiscardFunding);
-       LDKTransaction transaction_var = obj->discard_funding.transaction;
-                       int8_tArray transaction_arr = init_int8_tArray(transaction_var.datalen, __LINE__);
-                       memcpy(transaction_arr->elems, transaction_var.data, transaction_var.datalen);
-       return transaction_arr;
+       int64_t funding_info_ref = tag_ptr(&obj->discard_funding.funding_info, false);
+       return funding_info_ref;
 }
 int64_t CS_LDK_LDKEvent_OpenChannelRequest_get_temporary_channel_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
@@ -12581,6 +13228,21 @@ int64_t CS_LDK_LDKEvent_OpenChannelRequest_get_channel_type(int64_t ptr) {
                        channel_type_ref = tag_ptr(channel_type_var.inner, false);
        return channel_type_ref;
 }
+jboolean CS_LDK_LDKEvent_OpenChannelRequest_get_is_announced(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OpenChannelRequest);
+       jboolean is_announced_conv = obj->open_channel_request.is_announced;
+       return is_announced_conv;
+}
+int64_t CS_LDK_LDKEvent_OpenChannelRequest_get_params(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OpenChannelRequest);
+       LDKChannelParameters params_var = obj->open_channel_request.params;
+                       int64_t params_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_var);
+                       params_ref = tag_ptr(params_var.inner, false);
+       return params_ref;
+}
 int64_t CS_LDK_LDKEvent_HTLCHandlingFailed_get_prev_channel_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_HTLCHandlingFailed);
@@ -12602,6 +13264,29 @@ int64_t CS_LDK_LDKEvent_BumpTransaction_get_bump_transaction(int64_t ptr) {
        int64_t bump_transaction_ref = tag_ptr(&obj->bump_transaction, false);
        return bump_transaction_ref;
 }
+int8_tArray CS_LDK_LDKEvent_OnionMessageIntercepted_get_peer_node_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OnionMessageIntercepted);
+       int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(peer_node_id_arr->elems, obj->onion_message_intercepted.peer_node_id.compressed_form, 33);
+       return peer_node_id_arr;
+}
+int64_t CS_LDK_LDKEvent_OnionMessageIntercepted_get_message(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OnionMessageIntercepted);
+       LDKOnionMessage message_var = obj->onion_message_intercepted.message;
+                       int64_t message_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
+                       message_ref = tag_ptr(message_var.inner, false);
+       return message_ref;
+}
+int8_tArray CS_LDK_LDKEvent_OnionMessagePeerConnected_get_peer_node_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OnionMessagePeerConnected);
+       int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(peer_node_id_arr->elems, obj->onion_message_peer_connected.peer_node_id.compressed_form, 33);
+       return peer_node_id_arr;
+}
 uint32_t CS_LDK_LDKCOption_EventZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_EventZ *obj = (LDKCOption_EventZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -12640,6 +13325,39 @@ int64_t  CS_LDK_CResult_COption_EventZDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+static inline struct LDKNonce CResult_NonceDecodeErrorZ_get_ok(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR owner){
+       LDKNonce ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_NonceDecodeErrorZ* owner_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(owner);
+       LDKNonce ret_var = CResult_NonceDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_NonceDecodeErrorZ_get_err(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_NonceDecodeErrorZ* owner_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_NonceDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
+       LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = RouteHintHop_clone(&orig->data[i]);
+       }
+       return ret;
+}
 uint32_t CS_LDK_LDKBolt11ParseError_ty_from_ptr(int64_t ptr) {
        LDKBolt11ParseError *obj = (LDKBolt11ParseError*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -13025,6 +13743,32 @@ int64_t  CS_LDK_CResult_BigSizeDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+static inline struct LDKUntrustedString CResult_UntrustedStringDecodeErrorZ_get_ok(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
+       LDKUntrustedString ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
+       LDKUntrustedString ret_var = CResult_UntrustedStringDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_UntrustedStringDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKHostname CResult_HostnameDecodeErrorZ_get_ok(LDKCResult_HostnameDecodeErrorZ *NONNULL_PTR owner){
        LDKHostname ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13100,32 +13844,6 @@ int64_t  CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_get_err(int64_t own
        return ret_ref;
 }
 
-static inline struct LDKUntrustedString CResult_UntrustedStringDecodeErrorZ_get_ok(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
-       LDKUntrustedString ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
-       LDKUntrustedString ret_var = CResult_UntrustedStringDecodeErrorZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return DecodeError_clone(&*owner->contents.err);
-}
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
-       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_UntrustedStringDecodeErrorZ_get_err(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 static inline struct LDKChannelId CResult_ChannelIdDecodeErrorZ_get_ok(LDKCResult_ChannelIdDecodeErrorZ *NONNULL_PTR owner){
        LDKChannelId ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13171,6 +13889,62 @@ int16_t  CS_LDK_C2Tuple__u832u16Z_get_b(int64_t owner) {
        return ret_conv;
 }
 
+static inline struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
+       LDKBlindedPayInfo ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKBlindedPayInfo ret_var = CResult_BlindedPayInfoDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_BlindedPayInfoDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKBlindedPaymentPath CResult_BlindedPaymentPathNoneZ_get_ok(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR owner){
+       LDKBlindedPaymentPath ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedPaymentPathNoneZ* owner_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(owner);
+       LDKBlindedPaymentPath ret_var = CResult_BlindedPaymentPathNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline void CResult_BlindedPaymentPathNoneZ_get_err(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_BlindedPaymentPathNoneZ_get_err(int64_t owner) {
+       LDKCResult_BlindedPaymentPathNoneZ* owner_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(owner);
+       CResult_BlindedPaymentPathNoneZ_get_err(owner_conv);
+}
+
+static inline LDKCVec_PaymentForwardNodeZ CVec_PaymentForwardNodeZ_clone(const LDKCVec_PaymentForwardNodeZ *orig) {
+       LDKCVec_PaymentForwardNodeZ ret = { .data = MALLOC(sizeof(LDKPaymentForwardNode) * orig->datalen, "LDKCVec_PaymentForwardNodeZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = PaymentForwardNode_clone(&orig->data[i]);
+       }
+       return ret;
+}
 static inline struct LDKPaymentRelay CResult_PaymentRelayDecodeErrorZ_get_ok(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner){
        LDKPaymentRelay ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13325,85 +14099,46 @@ int64_t  CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline struct LDKStr CResult_StrSecp256k1ErrorZ_get_ok(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return *owner->contents.result;
-}
-jstring  CS_LDK_CResult_StrSecp256k1ErrorZ_get_ok(int64_t owner) {
-       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
-       LDKStr ret_str = CResult_StrSecp256k1ErrorZ_get_ok(owner_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       return ret_conv;
-}
-
-static inline enum LDKSecp256k1Error CResult_StrSecp256k1ErrorZ_get_err(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-int32_t  CS_LDK_CResult_StrSecp256k1ErrorZ_get_err(int64_t owner) {
-       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
-       int32_t ret_conv = LDKSecp256k1Error_to_cs(CResult_StrSecp256k1ErrorZ_get_err(owner_conv));
-       return ret_conv;
-}
-
-static inline struct LDKThirtyTwoBytes C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
-       return ThirtyTwoBytes_clone(&owner->a);
-}
-int8_tArray  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(int64_t owner) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(owner_conv).data, 32);
-       return ret_arr;
-}
-
-static inline struct LDKRecipientOnionFields C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
-       LDKRecipientOnionFields ret = owner->b;
+static inline struct LDKResponder CResult_ResponderDecodeErrorZ_get_ok(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR owner){
+       LDKResponder ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(int64_t owner) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
-       LDKRecipientOnionFields ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(owner_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_ResponderDecodeErrorZ* owner_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(owner);
+       LDKResponder ret_var = CResult_ResponderDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKRouteParameters C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
-       LDKRouteParameters ret = owner->c;
-       ret.is_owned = false;
-       return ret;
+static inline struct LDKDecodeError CResult_ResponderDecodeErrorZ_get_err(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(int64_t owner) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
-       LDKRouteParameters ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_ResponderDecodeErrorZ* owner_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ResponderDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(&*owner->contents.result);
-}
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(owner_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-static inline void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
+uint32_t CS_LDK_LDKCOption_MessageContextZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_MessageContextZ *obj = (LDKCOption_MessageContextZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_MessageContextZ_Some: return 0;
+               case LDKCOption_MessageContextZ_None: return 1;
+               default: abort();
+       }
 }
-void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(int64_t owner) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
-       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(owner_conv);
+int64_t CS_LDK_LDKCOption_MessageContextZ_Some_get_some(int64_t ptr) {
+       LDKCOption_MessageContextZ *obj = (LDKCOption_MessageContextZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_MessageContextZ_Some);
+       int64_t some_ref = tag_ptr(&obj->some, false);
+       return some_ref;
 }
-
 static inline struct LDKPublicKey C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_get_a(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR owner){
        return owner->a;
 }
@@ -13562,17 +14297,16 @@ int64_t CS_LDK_LDKPeeledOnion_Receive_get__0(int64_t ptr) {
        int64_t _0_ref = tag_ptr(&obj->receive._0, false);
        return _0_ref;
 }
-int8_tArray CS_LDK_LDKPeeledOnion_Receive_get__1(int64_t ptr) {
+int64_t CS_LDK_LDKPeeledOnion_Receive_get__1(int64_t ptr) {
        LDKPeeledOnion *obj = (LDKPeeledOnion*)untag_ptr(ptr);
        CHECK(obj->tag == LDKPeeledOnion_Receive);
-       int8_tArray _1_arr = init_int8_tArray(32, __LINE__);
-       memcpy(_1_arr->elems, obj->receive._1.data, 32);
-       return _1_arr;
+       int64_t _1_ref = tag_ptr(&obj->receive._1, false);
+       return _1_ref;
 }
 int64_t CS_LDK_LDKPeeledOnion_Receive_get__2(int64_t ptr) {
        LDKPeeledOnion *obj = (LDKPeeledOnion*)untag_ptr(ptr);
        CHECK(obj->tag == LDKPeeledOnion_Receive);
-       LDKBlindedPath _2_var = obj->receive._2;
+       LDKBlindedMessagePath _2_var = obj->receive._2;
                        int64_t _2_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(_2_var);
                        _2_ref = tag_ptr(_2_var.inner, false);
@@ -13638,104 +14372,96 @@ int64_t  CS_LDK_CResult_SendSuccessSendErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath CResult_BlindedPathNoneZ_get_ok(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedPathNoneZ* owner_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = CResult_BlindedPathNoneZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline void CResult_BlindedPathNoneZ_get_err(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-void  CS_LDK_CResult_BlindedPathNoneZ_get_err(int64_t owner) {
-       LDKCResult_BlindedPathNoneZ* owner_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(owner);
-       CResult_BlindedPathNoneZ_get_err(owner_conv);
-}
-
-static inline struct LDKC2Tuple_BlindedPayInfoBlindedPathZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+static inline void CResult_NoneSendErrorZ_get_ok(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_BlindedPayInfoBlindedPathZ_clone(&*owner->contents.result);
+       return *owner->contents.result;
 }
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(owner_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_CResult_NoneSendErrorZ_get_ok(int64_t owner) {
+       LDKCResult_NoneSendErrorZ* owner_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(owner);
+       CResult_NoneSendErrorZ_get_ok(owner_conv);
 }
 
-static inline void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+static inline struct LDKSendError CResult_NoneSendErrorZ_get_err(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return *owner->contents.err;
+       return SendError_clone(&*owner->contents.err);
 }
-void  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(int64_t owner) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(owner_conv);
+int64_t  CS_LDK_CResult_NoneSendErrorZ_get_err(int64_t owner) {
+       LDKCResult_NoneSendErrorZ* owner_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(owner);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = CResult_NoneSendErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline LDKCVec_ForwardNodeZ CVec_ForwardNodeZ_clone(const LDKCVec_ForwardNodeZ *orig) {
-       LDKCVec_ForwardNodeZ ret = { .data = MALLOC(sizeof(LDKForwardNode) * orig->datalen, "LDKCVec_ForwardNodeZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ForwardNode_clone(&orig->data[i]);
-       }
-       return ret;
-}
-static inline struct LDKBlindedPath CResult_BlindedPathDecodeErrorZ_get_ok(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = *owner->contents.result;
+static inline struct LDKBlindedHop CResult_BlindedHopDecodeErrorZ_get_ok(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
+       LDKBlindedHop ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedPathDecodeErrorZ* owner_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = CResult_BlindedPathDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
+       LDKBlindedHop ret_var = CResult_BlindedHopDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_BlindedPathDecodeErrorZ_get_err(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_BlindedHopDecodeErrorZ_get_err(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_BlindedPathDecodeErrorZ* owner_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_BlindedPathDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_BlindedHopDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKBlindedHop CResult_BlindedHopDecodeErrorZ_get_ok(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
-       LDKBlindedHop ret = *owner->contents.result;
+static inline LDKCVec_PhantomRouteHintsZ CVec_PhantomRouteHintsZ_clone(const LDKCVec_PhantomRouteHintsZ *orig) {
+       LDKCVec_PhantomRouteHintsZ ret = { .data = MALLOC(sizeof(LDKPhantomRouteHints) * orig->datalen, "LDKCVec_PhantomRouteHintsZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = PhantomRouteHints_clone(&orig->data[i]);
+       }
+       return ret;
+}
+uint32_t CS_LDK_LDKSignOrCreationError_ty_from_ptr(int64_t ptr) {
+       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKSignOrCreationError_SignError: return 0;
+               case LDKSignOrCreationError_CreationError: return 1;
+               default: abort();
+       }
+}
+int32_t CS_LDK_LDKSignOrCreationError_CreationError_get_creation_error(int64_t ptr) {
+       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKSignOrCreationError_CreationError);
+       int32_t creation_error_conv = LDKCreationError_to_cs(obj->creation_error);
+       return creation_error_conv;
+}
+static inline struct LDKBolt11Invoice CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
+       LDKBolt11Invoice ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
-       LDKBlindedHop ret_var = CResult_BlindedHopDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(int64_t owner) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
+       LDKBolt11Invoice ret_var = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_BlindedHopDecodeErrorZ_get_err(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKSignOrCreationError CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return DecodeError_clone(&*owner->contents.err);
+       return SignOrCreationError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
-       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_BlindedHopDecodeErrorZ_get_err(owner_conv);
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(int64_t owner) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
+       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
+       *ret_copy = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -13903,7 +14629,7 @@ void register_tx_LDKFilter_jcall(const void* this_arg, const uint8_t (* txid)[32
        LDKu8slice script_pubkey_var = script_pubkey;
        int8_tArray script_pubkey_arr = init_int8_tArray(script_pubkey_var.datalen, __LINE__);
        memcpy(script_pubkey_arr->elems, script_pubkey_var.data, script_pubkey_var.datalen);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 56, (int64_t)txid_arr, (int64_t)script_pubkey_arr);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 57, (int64_t)txid_arr, (int64_t)script_pubkey_arr);
 }
 void register_output_LDKFilter_jcall(const void* this_arg, LDKWatchedOutput output) {
        LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) this_arg;
@@ -13911,7 +14637,7 @@ void register_output_LDKFilter_jcall(const void* this_arg, LDKWatchedOutput outp
        int64_t output_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(output_var);
        output_ref = tag_ptr(output_var.inner, output_var.is_owned);
-       js_invoke_function_void_l(j_calls->instance_ptr, 57, output_ref);
+       js_invoke_function_void_l(j_calls->instance_ptr, 58, output_ref);
 }
 static void LDKFilter_JCalls_cloned(LDKFilter* new_obj) {
        LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) new_obj->this_arg;
@@ -14001,7 +14727,7 @@ static void LDKChangeDestinationSource_JCalls_free(void* this_arg) {
 }
 LDKCResult_CVec_u8ZNoneZ get_change_destination_script_LDKChangeDestinationSource_jcall(const void* this_arg) {
        LDKChangeDestinationSource_JCalls *j_calls = (LDKChangeDestinationSource_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 58);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 59);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
@@ -14059,7 +14785,7 @@ LDKCResult_CVec_u8ZIOErrorZ read_LDKKVStore_jcall(const void* this_arg, LDKStr p
        LDKStr key_str = key;
        jstring key_conv = str_ref_to_cs(key_str.chars, key_str.len);
        Str_free(key_str);
-       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 59, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 60, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZIOErrorZ ret_conv = *(LDKCResult_CVec_u8ZIOErrorZ*)(ret_ptr);
@@ -14080,7 +14806,7 @@ LDKCResult_NoneIOErrorZ write_LDKKVStore_jcall(const void* this_arg, LDKStr prim
        LDKu8slice buf_var = buf;
        int8_tArray buf_arr = init_int8_tArray(buf_var.datalen, __LINE__);
        memcpy(buf_arr->elems, buf_var.data, buf_var.datalen);
-       uint64_t ret = js_invoke_function_l_llll(j_calls->instance_ptr, 60, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, (int64_t)buf_arr);
+       uint64_t ret = js_invoke_function_l_llll(j_calls->instance_ptr, 61, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, (int64_t)buf_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14099,7 +14825,7 @@ LDKCResult_NoneIOErrorZ remove_LDKKVStore_jcall(const void* this_arg, LDKStr pri
        jstring key_conv = str_ref_to_cs(key_str.chars, key_str.len);
        Str_free(key_str);
        jboolean lazy_conv = lazy;
-       uint64_t ret = js_invoke_function_l_lllb(j_calls->instance_ptr, 61, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, lazy_conv);
+       uint64_t ret = js_invoke_function_l_lllb(j_calls->instance_ptr, 62, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, lazy_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14114,7 +14840,7 @@ LDKCResult_CVec_StrZIOErrorZ list_LDKKVStore_jcall(const void* this_arg, LDKStr
        LDKStr secondary_namespace_str = secondary_namespace;
        jstring secondary_namespace_conv = str_ref_to_cs(secondary_namespace_str.chars, secondary_namespace_str.len);
        Str_free(secondary_namespace_str);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 62, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 63, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_StrZIOErrorZ ret_conv = *(LDKCResult_CVec_StrZIOErrorZ*)(ret_ptr);
@@ -14239,7 +14965,7 @@ LDKCResult_TransactionNoneZ spend_spendable_outputs_LDKOutputSpender_jcall(const
        LDKCOption_u32Z *locktime_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *locktime_copy = locktime;
        int64_t locktime_ref = tag_ptr(locktime_copy, true);
-       uint64_t ret = js_invoke_function_l_lllil(j_calls->instance_ptr, 63, (int64_t)descriptors_arr, (int64_t)outputs_arr, (int64_t)change_destination_script_arr, feerate_sat_per_1000_weight_conv, locktime_ref);
+       uint64_t ret = js_invoke_function_l_lllil(j_calls->instance_ptr, 64, (int64_t)descriptors_arr, (int64_t)outputs_arr, (int64_t)change_destination_script_arr, feerate_sat_per_1000_weight_conv, locktime_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TransactionNoneZ ret_conv = *(LDKCResult_TransactionNoneZ*)(ret_ptr);
@@ -14606,55 +15332,142 @@ static inline LDKCVec_C2Tuple_OutPointChannelIdZZ CVec_C2Tuple_OutPointChannelId
        }
        return ret;
 }
-static inline LDKCVec_MonitorUpdateIdZ CVec_MonitorUpdateIdZ_clone(const LDKCVec_MonitorUpdateIdZ *orig) {
-       LDKCVec_MonitorUpdateIdZ ret = { .data = MALLOC(sizeof(LDKMonitorUpdateId) * orig->datalen, "LDKCVec_MonitorUpdateIdZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = MonitorUpdateId_clone(&orig->data[i]);
-       }
-       return ret;
-}
-static inline struct LDKOutPoint C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner){
+static inline struct LDKOutPoint C2Tuple_OutPointCVec_u64ZZ_get_a(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR owner){
        LDKOutPoint ret = owner->a;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(int64_t owner) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* owner_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(owner);
-       LDKOutPoint ret_var = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(owner_conv);
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_get_a(int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(owner);
+       LDKOutPoint ret_var = C2Tuple_OutPointCVec_u64ZZ_get_a(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKCVec_MonitorUpdateIdZ C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner){
-       return CVec_MonitorUpdateIdZ_clone(&owner->b);
+static inline struct LDKCVec_u64Z C2Tuple_OutPointCVec_u64ZZ_get_b(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR owner){
+       return CVec_u64Z_clone(&owner->b);
 }
-int64_tArray  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(int64_t owner) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* owner_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(owner);
-       LDKCVec_MonitorUpdateIdZ ret_var = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(owner_conv);
+int64_tArray  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_get_b(int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(owner);
+       LDKCVec_u64Z ret_var = C2Tuple_OutPointCVec_u64ZZ_get_b(owner_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t r = 0; r < ret_var.datalen; r++) {
-               LDKMonitorUpdateId ret_conv_17_var = ret_var.data[r];
-               int64_t ret_conv_17_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_17_var);
-               ret_conv_17_ref = tag_ptr(ret_conv_17_var.inner, ret_conv_17_var.is_owned);
-               ret_arr_ptr[r] = ret_conv_17_ref;
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_clone(const LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ *orig) {
-       LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ) * orig->datalen, "LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_OutPointCVec_u64ZZZ CVec_C2Tuple_OutPointCVec_u64ZZZ_clone(const LDKCVec_C2Tuple_OutPointCVec_u64ZZZ *orig) {
+       LDKCVec_C2Tuple_OutPointCVec_u64ZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ) * orig->datalen, "LDKCVec_C2Tuple_OutPointCVec_u64ZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_OutPointCVec_u64ZZ_clone(&orig->data[i]);
        }
        return ret;
 }
+static inline struct LDKBlindedMessagePath CResult_BlindedMessagePathDecodeErrorZ_get_ok(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR owner){
+       LDKBlindedMessagePath ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* owner_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(owner);
+       LDKBlindedMessagePath ret_var = CResult_BlindedMessagePathDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_BlindedMessagePathDecodeErrorZ_get_err(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* owner_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_BlindedMessagePathDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKBlindedMessagePath CResult_BlindedMessagePathNoneZ_get_ok(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR owner){
+       LDKBlindedMessagePath ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedMessagePathNoneZ* owner_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(owner);
+       LDKBlindedMessagePath ret_var = CResult_BlindedMessagePathNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline void CResult_BlindedMessagePathNoneZ_get_err(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_BlindedMessagePathNoneZ_get_err(int64_t owner) {
+       LDKCResult_BlindedMessagePathNoneZ* owner_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(owner);
+       CResult_BlindedMessagePathNoneZ_get_err(owner_conv);
+}
+
+static inline struct LDKMessageContext CResult_MessageContextDecodeErrorZ_get_ok(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return MessageContext_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_MessageContextDecodeErrorZ* owner_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(owner);
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = CResult_MessageContextDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_MessageContextDecodeErrorZ_get_err(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_MessageContextDecodeErrorZ* owner_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_MessageContextDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKOffersContext CResult_OffersContextDecodeErrorZ_get_ok(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return OffersContext_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_OffersContextDecodeErrorZ* owner_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(owner);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = CResult_OffersContextDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_OffersContextDecodeErrorZ_get_err(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_OffersContextDecodeErrorZ* owner_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_OffersContextDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 typedef struct LDKPersister_JCalls {
        atomic_size_t refcnt;
        uint32_t instance_ptr;
@@ -14672,7 +15485,7 @@ LDKCResult_NoneIOErrorZ persist_manager_LDKPersister_jcall(const void* this_arg,
        // WARNING: we may need a move here but no clone is available for LDKChannelManager
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_var);
        channel_manager_ref = tag_ptr(channel_manager_var.inner, channel_manager_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 64, channel_manager_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 65, channel_manager_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14686,7 +15499,7 @@ LDKCResult_NoneIOErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, c
        // WARNING: we may need a move here but no clone is available for LDKNetworkGraph
        CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_var);
        network_graph_ref = tag_ptr(network_graph_var.inner, network_graph_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 65, network_graph_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 66, network_graph_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14697,7 +15510,7 @@ LDKCResult_NoneIOErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg,
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        // WARNING: This object doesn't live past this scope, needs clone!
        int64_t ret_scorer = tag_ptr(scorer, false);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 66, ret_scorer);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 67, ret_scorer);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14777,45 +15590,37 @@ static void LDKPersist_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, const LDKChannelMonitor * monitor) {
        LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
        LDKOutPoint channel_funding_outpoint_var = channel_funding_outpoint;
        int64_t channel_funding_outpoint_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_var);
        channel_funding_outpoint_ref = tag_ptr(channel_funding_outpoint_var.inner, channel_funding_outpoint_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_lll(j_calls->instance_ptr, 67, channel_funding_outpoint_ref, data_ref, update_id_ref);
+       LDKChannelMonitor monitor_var = *monitor;
+       int64_t monitor_ref = 0;
+       monitor_var = ChannelMonitor_clone(&monitor_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
+       monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
+       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_ll(j_calls->instance_ptr, 68, channel_funding_outpoint_ref, monitor_ref);
        LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_cs(ret);
        return ret_conv;
 }
-LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, LDKChannelMonitorUpdate update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, LDKChannelMonitorUpdate monitor_update, const LDKChannelMonitor * monitor) {
        LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
        LDKOutPoint channel_funding_outpoint_var = channel_funding_outpoint;
        int64_t channel_funding_outpoint_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_var);
        channel_funding_outpoint_ref = tag_ptr(channel_funding_outpoint_var.inner, channel_funding_outpoint_var.is_owned);
-       LDKChannelMonitorUpdate update_var = update;
-       int64_t update_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
-       update_ref = tag_ptr(update_var.inner, update_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_llll(j_calls->instance_ptr, 68, channel_funding_outpoint_ref, update_ref, data_ref, update_id_ref);
+       LDKChannelMonitorUpdate monitor_update_var = monitor_update;
+       int64_t monitor_update_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_update_var);
+       monitor_update_ref = tag_ptr(monitor_update_var.inner, monitor_update_var.is_owned);
+       LDKChannelMonitor monitor_var = *monitor;
+       int64_t monitor_ref = 0;
+       monitor_var = ChannelMonitor_clone(&monitor_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
+       monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
+       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_lll(j_calls->instance_ptr, 69, channel_funding_outpoint_ref, monitor_update_ref, monitor_ref);
        LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_cs(ret);
        return ret_conv;
 }
@@ -14825,7 +15630,7 @@ void archive_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoin
        int64_t channel_funding_outpoint_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_var);
        channel_funding_outpoint_ref = tag_ptr(channel_funding_outpoint_var.inner, channel_funding_outpoint_var.is_owned);
-       js_invoke_function_void_l(j_calls->instance_ptr, 69, channel_funding_outpoint_ref);
+       js_invoke_function_void_l(j_calls->instance_ptr, 70, channel_funding_outpoint_ref);
 }
 static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
        LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) new_obj->this_arg;
@@ -14850,7 +15655,7 @@ uint64_t  CS_LDK_LDKPersist_new(int32_t o) {
        *res_ptr = LDKPersist_init(o);
        return tag_ptr(res_ptr, true);
 }
-int32_t  CS_LDK_Persist_persist_new_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t data, int64_t update_id) {
+int32_t  CS_LDK_Persist_persist_new_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t monitor) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
@@ -14859,21 +15664,16 @@ int32_t  CS_LDK_Persist_persist_new_channel(int64_t this_arg, int64_t channel_fu
        channel_funding_outpoint_conv.is_owned = ptr_is_owned(channel_funding_outpoint);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_conv);
        channel_funding_outpoint_conv = OutPoint_clone(&channel_funding_outpoint_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, &data_conv, update_id_conv));
+       LDKChannelMonitor monitor_conv;
+       monitor_conv.inner = untag_ptr(monitor);
+       monitor_conv.is_owned = ptr_is_owned(monitor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
+       monitor_conv.is_owned = false;
+       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, &monitor_conv));
        return ret_conv;
 }
 
-int32_t  CS_LDK_Persist_update_persisted_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t update, int64_t data, int64_t update_id) {
+int32_t  CS_LDK_Persist_update_persisted_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t monitor_update, int64_t monitor) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
@@ -14882,22 +15682,17 @@ int32_t  CS_LDK_Persist_update_persisted_channel(int64_t this_arg, int64_t chann
        channel_funding_outpoint_conv.is_owned = ptr_is_owned(channel_funding_outpoint);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_conv);
        channel_funding_outpoint_conv = OutPoint_clone(&channel_funding_outpoint_conv);
-       LDKChannelMonitorUpdate update_conv;
-       update_conv.inner = untag_ptr(update);
-       update_conv.is_owned = ptr_is_owned(update);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
-       update_conv = ChannelMonitorUpdate_clone(&update_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, update_conv, &data_conv, update_id_conv));
+       LDKChannelMonitorUpdate monitor_update_conv;
+       monitor_update_conv.inner = untag_ptr(monitor_update);
+       monitor_update_conv.is_owned = ptr_is_owned(monitor_update);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_update_conv);
+       monitor_update_conv = ChannelMonitorUpdate_clone(&monitor_update_conv);
+       LDKChannelMonitor monitor_conv;
+       monitor_conv.inner = untag_ptr(monitor);
+       monitor_conv.is_owned = ptr_is_owned(monitor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
+       monitor_conv.is_owned = false;
+       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, monitor_update_conv, &monitor_conv));
        return ret_conv;
 }
 
@@ -14939,7 +15734,7 @@ void filtered_block_connected_LDKListen_jcall(const void* this_arg, const uint8_
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_void_lli(j_calls->instance_ptr, 70, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
+       js_invoke_function_void_lli(j_calls->instance_ptr, 71, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
 }
 void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
@@ -14947,14 +15742,14 @@ void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uin
        int8_tArray block_arr = init_int8_tArray(block_var.datalen, __LINE__);
        memcpy(block_arr->elems, block_var.data, block_var.datalen);
        int32_t height_conv = height;
-       js_invoke_function_void_li(j_calls->instance_ptr, 71, (int64_t)block_arr, height_conv);
+       js_invoke_function_void_li(j_calls->instance_ptr, 72, (int64_t)block_arr, height_conv);
 }
 void block_disconnected_LDKListen_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_void_li(j_calls->instance_ptr, 72, (int64_t)header_arr, height_conv);
+       js_invoke_function_void_li(j_calls->instance_ptr, 73, (int64_t)header_arr, height_conv);
 }
 static void LDKListen_JCalls_cloned(LDKListen* new_obj) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) new_obj->this_arg;
@@ -15054,24 +15849,24 @@ void transactions_confirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_void_lli(j_calls->instance_ptr, 73, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
+       js_invoke_function_void_lli(j_calls->instance_ptr, 74, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
 }
 void transaction_unconfirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t (* txid)[32]) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray txid_arr = init_int8_tArray(32, __LINE__);
        memcpy(txid_arr->elems, *txid, 32);
-       js_invoke_function_void_l(j_calls->instance_ptr, 74, (int64_t)txid_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 75, (int64_t)txid_arr);
 }
 void best_block_updated_LDKConfirm_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_void_li(j_calls->instance_ptr, 75, (int64_t)header_arr, height_conv);
+       js_invoke_function_void_li(j_calls->instance_ptr, 76, (int64_t)header_arr, height_conv);
 }
 LDKCVec_C3Tuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 76);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 77);
        LDKCVec_C3Tuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -15213,7 +16008,7 @@ static void LDKFutureCallback_JCalls_free(void* this_arg) {
 }
 void call_LDKFutureCallback_jcall(const void* this_arg) {
        LDKFutureCallback_JCalls *j_calls = (LDKFutureCallback_JCalls*) this_arg;
-       js_invoke_function_void_(j_calls->instance_ptr, 77);
+       js_invoke_function_void_(j_calls->instance_ptr, 78);
 }
 static void LDKFutureCallback_JCalls_cloned(LDKFutureCallback* new_obj) {
        LDKFutureCallback_JCalls *j_calls = (LDKFutureCallback_JCalls*) new_obj->this_arg;
@@ -15253,12 +16048,17 @@ static void LDKEventHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-void handle_event_LDKEventHandler_jcall(const void* this_arg, LDKEvent event) {
+LDKCResult_NoneReplayEventZ handle_event_LDKEventHandler_jcall(const void* this_arg, LDKEvent event) {
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) this_arg;
        LDKEvent *event_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
        *event_copy = event;
        int64_t event_ref = tag_ptr(event_copy, true);
-       js_invoke_function_void_l(j_calls->instance_ptr, 78, event_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 79, event_ref);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneReplayEventZ ret_conv = *(LDKCResult_NoneReplayEventZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
 }
 static void LDKEventHandler_JCalls_cloned(LDKEventHandler* new_obj) {
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) new_obj->this_arg;
@@ -15281,7 +16081,7 @@ uint64_t  CS_LDK_LDKEventHandler_new(int32_t o) {
        *res_ptr = LDKEventHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-void  CS_LDK_EventHandler_handle_event(int64_t this_arg, int64_t event) {
+int64_t  CS_LDK_EventHandler_handle_event(int64_t this_arg, int64_t event) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKEventHandler* this_arg_conv = (LDKEventHandler*)this_arg_ptr;
@@ -15289,7 +16089,9 @@ void  CS_LDK_EventHandler_handle_event(int64_t this_arg, int64_t event) {
        CHECK_ACCESS(event_ptr);
        LDKEvent event_conv = *(LDKEvent*)(event_ptr);
        event_conv = Event_clone((LDKEvent*)untag_ptr(event));
-       (this_arg_conv->handle_event)(this_arg_conv->this_arg, event_conv);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = (this_arg_conv->handle_event)(this_arg_conv->this_arg, event_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 typedef struct LDKEventsProvider_JCalls {
@@ -15306,7 +16108,7 @@ void process_pending_events_LDKEventsProvider_jcall(const void* this_arg, LDKEve
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) this_arg;
        LDKEventHandler* handler_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *handler_ret = handler;
-       js_invoke_function_void_l(j_calls->instance_ptr, 79, tag_ptr(handler_ret, true));
+       js_invoke_function_void_l(j_calls->instance_ptr, 80, tag_ptr(handler_ret, true));
 }
 static void LDKEventsProvider_JCalls_cloned(LDKEventsProvider* new_obj) {
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) new_obj->this_arg;
@@ -15371,7 +16173,7 @@ static void LDKMessageSendEventsProvider_JCalls_free(void* this_arg) {
 }
 LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsProvider_jcall(const void* this_arg) {
        LDKMessageSendEventsProvider_JCalls *j_calls = (LDKMessageSendEventsProvider_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 80);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 81);
        LDKCVec_MessageSendEventZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -15450,7 +16252,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = OpenChannel_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 81, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 82, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_open_channel_v2_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKOpenChannelV2 * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15461,7 +16263,7 @@ void handle_open_channel_v2_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = OpenChannelV2_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 82, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 83, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAcceptChannel * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15472,7 +16274,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = AcceptChannel_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 83, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 84, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_accept_channel_v2_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAcceptChannelV2 * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15483,7 +16285,7 @@ void handle_accept_channel_v2_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = AcceptChannelV2_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 84, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 85, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingCreated * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15494,7 +16296,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingCreated_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 85, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 86, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15505,7 +16307,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingSigned_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 86, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 87, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelReady * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15516,7 +16318,7 @@ void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, L
        msg_var = ChannelReady_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 87, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 88, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKShutdown * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15527,7 +16329,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = Shutdown_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 88, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 89, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKClosingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15538,7 +16340,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ClosingSigned_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 89, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 90, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_stfu_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKStfu * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15549,7 +16351,7 @@ void handle_stfu_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicK
        msg_var = Stfu_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 90, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 91, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_add_input_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAddInput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15560,7 +16362,7 @@ void handle_tx_add_input_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = TxAddInput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 91, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 92, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_add_output_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAddOutput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15571,7 +16373,7 @@ void handle_tx_add_output_LDKChannelMessageHandler_jcall(const void* this_arg, L
        msg_var = TxAddOutput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 92, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 93, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_remove_input_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxRemoveInput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15582,7 +16384,7 @@ void handle_tx_remove_input_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = TxRemoveInput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 93, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 94, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_remove_output_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxRemoveOutput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15593,7 +16395,7 @@ void handle_tx_remove_output_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = TxRemoveOutput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 94, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 95, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_complete_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxComplete * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15604,7 +16406,7 @@ void handle_tx_complete_LDKChannelMessageHandler_jcall(const void* this_arg, LDK
        msg_var = TxComplete_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 95, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 96, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxSignatures * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15615,7 +16417,7 @@ void handle_tx_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, L
        msg_var = TxSignatures_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 96, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 97, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_init_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxInitRbf * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15626,7 +16428,7 @@ void handle_tx_init_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDK
        msg_var = TxInitRbf_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 97, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 98, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_ack_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAckRbf * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15637,7 +16439,7 @@ void handle_tx_ack_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = TxAckRbf_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 98, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 99, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_abort_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAbort * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15648,7 +16450,7 @@ void handle_tx_abort_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = TxAbort_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 99, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 100, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateAddHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15659,7 +16461,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = UpdateAddHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 100, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 101, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFulfillHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15670,7 +16472,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = UpdateFulfillHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 101, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 102, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15681,7 +16483,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = UpdateFailHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 102, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 103, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailMalformedHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15692,7 +16494,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        msg_var = UpdateFailMalformedHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 103, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 104, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKCommitmentSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15703,7 +16505,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = CommitmentSigned_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 104, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 105, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKRevokeAndACK * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15714,7 +16516,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = RevokeAndACK_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 105, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 106, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFee * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15725,7 +16527,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = UpdateFee_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 106, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 107, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAnnouncementSignatures * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15736,13 +16538,13 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        msg_var = AnnouncementSignatures_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 107, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 108, (int64_t)their_node_id_arr, msg_ref);
 }
 void peer_disconnected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       js_invoke_function_void_l(j_calls->instance_ptr, 108, (int64_t)their_node_id_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 109, (int64_t)their_node_id_arr);
 }
 LDKCResult_NoneNoneZ peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInit * msg, bool inbound) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15754,7 +16556,7 @@ LDKCResult_NoneNoneZ peer_connected_LDKChannelMessageHandler_jcall(const void* t
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
        jboolean inbound_conv = inbound;
-       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 109, (int64_t)their_node_id_arr, msg_ref, inbound_conv);
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 110, (int64_t)their_node_id_arr, msg_ref, inbound_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -15770,7 +16572,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = ChannelReestablish_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 110, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 111, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelUpdate * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15781,7 +16583,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ChannelUpdate_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 111, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 112, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKErrorMessage * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15792,11 +16594,11 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        msg_var = ErrorMessage_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 112, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 113, (int64_t)their_node_id_arr, msg_ref);
 }
 LDKNodeFeatures provided_node_features_LDKChannelMessageHandler_jcall(const void* this_arg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 113);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 114);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -15807,7 +16609,7 @@ LDKInitFeatures provided_init_features_LDKChannelMessageHandler_jcall(const void
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 114, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 115, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -15816,7 +16618,7 @@ LDKInitFeatures provided_init_features_LDKChannelMessageHandler_jcall(const void
 }
 LDKCOption_CVec_ThirtyTwoBytesZZ get_chain_hashes_LDKChannelMessageHandler_jcall(const void* this_arg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 115);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 116);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_CVec_ThirtyTwoBytesZZ ret_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(ret_ptr);
@@ -16403,35 +17205,42 @@ static void LDKOffersMessageHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCOption_OffersMessageZ handle_message_LDKOffersMessageHandler_jcall(const void* this_arg, LDKOffersMessage message) {
+LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ handle_message_LDKOffersMessageHandler_jcall(const void* this_arg, LDKOffersMessage message, LDKCOption_OffersContextZ context, LDKResponder responder) {
        LDKOffersMessageHandler_JCalls *j_calls = (LDKOffersMessageHandler_JCalls*) this_arg;
        LDKOffersMessage *message_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
        *message_copy = message;
        int64_t message_ref = tag_ptr(message_copy, true);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 116, message_ref);
+       LDKCOption_OffersContextZ *context_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
+       LDKResponder responder_var = responder;
+       int64_t responder_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+       responder_ref = tag_ptr(responder_var.inner, responder_var.is_owned);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 117, message_ref, context_ref, responder_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCOption_OffersMessageZ ret_conv = *(LDKCOption_OffersMessageZ*)(ret_ptr);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ ret_conv = *(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ release_pending_messages_LDKOffersMessageHandler_jcall(const void* this_arg) {
+LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ release_pending_messages_LDKOffersMessageHandler_jcall(const void* this_arg) {
        LDKOffersMessageHandler_JCalls *j_calls = (LDKOffersMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 117);
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ ret_constr;
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 118);
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ Elements");
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ Elements");
        else
                ret_constr.data = NULL;
        int64_t* ret_vals = ret->elems;
-       for (size_t x = 0; x < ret_constr.datalen; x++) {
-               int64_t ret_conv_49 = ret_vals[x];
-               void* ret_conv_49_ptr = untag_ptr(ret_conv_49);
-               CHECK_ACCESS(ret_conv_49_ptr);
-               LDKC3Tuple_OffersMessageDestinationBlindedPathZ ret_conv_49_conv = *(LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)(ret_conv_49_ptr);
-               FREE(untag_ptr(ret_conv_49));
-               ret_constr.data[x] = ret_conv_49_conv;
+       for (size_t w = 0; w < ret_constr.datalen; w++) {
+               int64_t ret_conv_48 = ret_vals[w];
+               void* ret_conv_48_ptr = untag_ptr(ret_conv_48);
+               CHECK_ACCESS(ret_conv_48_ptr);
+               LDKC2Tuple_OffersMessageMessageSendInstructionsZ ret_conv_48_conv = *(LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)(ret_conv_48_ptr);
+               FREE(untag_ptr(ret_conv_48));
+               ret_constr.data[w] = ret_conv_48_conv;
        }
        FREE(ret);
        return ret_constr;
@@ -16458,7 +17267,7 @@ uint64_t  CS_LDK_LDKOffersMessageHandler_new(int32_t o) {
        *res_ptr = LDKOffersMessageHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-int64_t  CS_LDK_OffersMessageHandler_handle_message(int64_t this_arg, int64_t message) {
+int64_t  CS_LDK_OffersMessageHandler_handle_message(int64_t this_arg, int64_t message, int64_t context, int64_t responder) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKOffersMessageHandler* this_arg_conv = (LDKOffersMessageHandler*)this_arg_ptr;
@@ -16466,8 +17275,17 @@ int64_t  CS_LDK_OffersMessageHandler_handle_message(int64_t this_arg, int64_t me
        CHECK_ACCESS(message_ptr);
        LDKOffersMessage message_conv = *(LDKOffersMessage*)(message_ptr);
        message_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(message));
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = (this_arg_conv->handle_message)(this_arg_conv->this_arg, message_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKCOption_OffersContextZ context_conv = *(LDKCOption_OffersContextZ*)(context_ptr);
+       context_conv = COption_OffersContextZ_clone((LDKCOption_OffersContextZ*)untag_ptr(context));
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = (this_arg_conv->handle_message)(this_arg_conv->this_arg, message_conv, context_conv, responder_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -16476,14 +17294,143 @@ int64_tArray  CS_LDK_OffersMessageHandler_release_pending_messages(int64_t this_
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKOffersMessageHandler* this_arg_conv = (LDKOffersMessageHandler*)this_arg_ptr;
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ ret_var = (this_arg_conv->release_pending_messages)(this_arg_conv->this_arg);
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ ret_var = (this_arg_conv->release_pending_messages)(this_arg_conv->this_arg);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t x = 0; x < ret_var.datalen; x++) {
-               LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv_49_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-               *ret_conv_49_conv = ret_var.data[x];
-               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
+       for (size_t w = 0; w < ret_var.datalen; w++) {
+               LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv_48_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+               *ret_conv_48_conv = ret_var.data[w];
+               ret_arr_ptr[w] = tag_ptr(ret_conv_48_conv, true);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+typedef struct LDKAsyncPaymentsMessageHandler_JCalls {
+       atomic_size_t refcnt;
+       uint32_t instance_ptr;
+} LDKAsyncPaymentsMessageHandler_JCalls;
+static void LDKAsyncPaymentsMessageHandler_JCalls_free(void* this_arg) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               FREE(j_calls);
+       }
+}
+LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ held_htlc_available_LDKAsyncPaymentsMessageHandler_jcall(const void* this_arg, LDKHeldHtlcAvailable message, LDKResponder responder) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       LDKHeldHtlcAvailable message_var = message;
+       int64_t message_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
+       message_ref = tag_ptr(message_var.inner, message_var.is_owned);
+       LDKResponder responder_var = responder;
+       int64_t responder_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+       responder_ref = tag_ptr(responder_var.inner, responder_var.is_owned);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 119, message_ref, responder_ref);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret_conv = *(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
+}
+void release_held_htlc_LDKAsyncPaymentsMessageHandler_jcall(const void* this_arg, LDKReleaseHeldHtlc message) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       LDKReleaseHeldHtlc message_var = message;
+       int64_t message_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
+       message_ref = tag_ptr(message_var.inner, message_var.is_owned);
+       js_invoke_function_void_l(j_calls->instance_ptr, 120, message_ref);
+}
+LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ release_pending_messages_LDKAsyncPaymentsMessageHandler_jcall(const void* this_arg) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 121);
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ ret_constr;
+       ret_constr.datalen = ret->arr_len;
+       if (ret_constr.datalen > 0)
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ Elements");
+       else
+               ret_constr.data = NULL;
+       int64_t* ret_vals = ret->elems;
+       for (size_t d = 0; d < ret_constr.datalen; d++) {
+               int64_t ret_conv_55 = ret_vals[d];
+               void* ret_conv_55_ptr = untag_ptr(ret_conv_55);
+               CHECK_ACCESS(ret_conv_55_ptr);
+               LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ ret_conv_55_conv = *(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)(ret_conv_55_ptr);
+               FREE(untag_ptr(ret_conv_55));
+               ret_constr.data[d] = ret_conv_55_conv;
+       }
+       FREE(ret);
+       return ret_constr;
+}
+static void LDKAsyncPaymentsMessageHandler_JCalls_cloned(LDKAsyncPaymentsMessageHandler* new_obj) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKAsyncPaymentsMessageHandler LDKAsyncPaymentsMessageHandler_init (int64_t o) {
+       LDKAsyncPaymentsMessageHandler_JCalls *calls = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler_JCalls), "LDKAsyncPaymentsMessageHandler_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       calls->instance_ptr = o;
+
+       LDKAsyncPaymentsMessageHandler ret = {
+               .this_arg = (void*) calls,
+               .held_htlc_available = held_htlc_available_LDKAsyncPaymentsMessageHandler_jcall,
+               .release_held_htlc = release_held_htlc_LDKAsyncPaymentsMessageHandler_jcall,
+               .release_pending_messages = release_pending_messages_LDKAsyncPaymentsMessageHandler_jcall,
+               .free = LDKAsyncPaymentsMessageHandler_JCalls_free,
+       };
+       return ret;
+}
+uint64_t  CS_LDK_LDKAsyncPaymentsMessageHandler_new(int32_t o) {
+       LDKAsyncPaymentsMessageHandler *res_ptr = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler), "LDKAsyncPaymentsMessageHandler");
+       *res_ptr = LDKAsyncPaymentsMessageHandler_init(o);
+       return tag_ptr(res_ptr, true);
+}
+int64_t  CS_LDK_AsyncPaymentsMessageHandler_held_htlc_available(int64_t this_arg, int64_t message, int64_t responder) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKAsyncPaymentsMessageHandler* this_arg_conv = (LDKAsyncPaymentsMessageHandler*)this_arg_ptr;
+       LDKHeldHtlcAvailable message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = HeldHtlcAvailable_clone(&message_conv);
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = (this_arg_conv->held_htlc_available)(this_arg_conv->this_arg, message_conv, responder_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_AsyncPaymentsMessageHandler_release_held_htlc(int64_t this_arg, int64_t message) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKAsyncPaymentsMessageHandler* this_arg_conv = (LDKAsyncPaymentsMessageHandler*)this_arg_ptr;
+       LDKReleaseHeldHtlc message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = ReleaseHeldHtlc_clone(&message_conv);
+       (this_arg_conv->release_held_htlc)(this_arg_conv->this_arg, message_conv);
+}
+
+int64_tArray  CS_LDK_AsyncPaymentsMessageHandler_release_pending_messages(int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKAsyncPaymentsMessageHandler* this_arg_conv = (LDKAsyncPaymentsMessageHandler*)this_arg_ptr;
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ ret_var = (this_arg_conv->release_pending_messages)(this_arg_conv->this_arg);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t d = 0; d < ret_var.datalen; d++) {
+               LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv_55_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+               *ret_conv_55_conv = ret_var.data[d];
+               ret_arr_ptr[d] = tag_ptr(ret_conv_55_conv, true);
        }
        
        FREE(ret_var.data);
@@ -16503,7 +17450,7 @@ static void LDKNodeIdLookUp_JCalls_free(void* this_arg) {
 LDKPublicKey next_node_id_LDKNodeIdLookUp_jcall(const void* this_arg, uint64_t short_channel_id) {
        LDKNodeIdLookUp_JCalls *j_calls = (LDKNodeIdLookUp_JCalls*) this_arg;
        int64_t short_channel_id_conv = short_channel_id;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 118, short_channel_id_conv);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 122, short_channel_id_conv);
        LDKPublicKey ret_ref;
        CHECK(ret->arr_len == 33);
        memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
@@ -16557,7 +17504,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        msg_var = NodeAnnouncement_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 119, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 123, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -16571,7 +17518,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        msg_var = ChannelAnnouncement_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 120, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 124, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -16585,7 +17532,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        msg_var = ChannelUpdate_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 121, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 125, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -16595,7 +17542,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
 LDKCOption_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel_announcement_LDKRoutingMessageHandler_jcall(const void* this_arg, uint64_t starting_point) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
        int64_t starting_point_conv = starting_point;
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 122, starting_point_conv);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 126, starting_point_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret_conv = *(LDKCOption_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ*)(ret_ptr);
@@ -16608,7 +17555,7 @@ LDKNodeAnnouncement get_next_node_announcement_LDKRoutingMessageHandler_jcall(co
        int64_t starting_point_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(starting_point_var);
        starting_point_ref = tag_ptr(starting_point_var.inner, starting_point_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 123, starting_point_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 127, starting_point_ref);
        LDKNodeAnnouncement ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16625,7 +17572,7 @@ LDKCResult_NoneNoneZ peer_connected_LDKRoutingMessageHandler_jcall(const void* t
        CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = tag_ptr(init_var.inner, init_var.is_owned);
        jboolean inbound_conv = inbound;
-       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 124, (int64_t)their_node_id_arr, init_ref, inbound_conv);
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 128, (int64_t)their_node_id_arr, init_ref, inbound_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -16640,7 +17587,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 125, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 129, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16655,7 +17602,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 126, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 130, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16670,7 +17617,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 127, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 131, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16685,7 +17632,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 128, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 132, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16694,11 +17641,11 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
 }
 bool processing_queue_high_LDKRoutingMessageHandler_jcall(const void* this_arg) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
-       return js_invoke_function_b_(j_calls->instance_ptr, 129);
+       return js_invoke_function_b_(j_calls->instance_ptr, 133);
 }
 LDKNodeFeatures provided_node_features_LDKRoutingMessageHandler_jcall(const void* this_arg) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 130);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 134);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16709,7 +17656,7 @@ LDKInitFeatures provided_init_features_LDKRoutingMessageHandler_jcall(const void
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 131, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 135, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16948,27 +17895,6 @@ static void LDKOnionMessageHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ get_and_clear_connections_needed_LDKOnionMessageHandler_jcall(const void* this_arg) {
-       LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 132);
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ ret_constr;
-       ret_constr.datalen = ret->arr_len;
-       if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ Elements");
-       else
-               ret_constr.data = NULL;
-       int64_t* ret_vals = ret->elems;
-       for (size_t o = 0; o < ret_constr.datalen; o++) {
-               int64_t ret_conv_40 = ret_vals[o];
-               void* ret_conv_40_ptr = untag_ptr(ret_conv_40);
-               CHECK_ACCESS(ret_conv_40_ptr);
-               LDKC2Tuple_PublicKeyCVec_SocketAddressZZ ret_conv_40_conv = *(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)(ret_conv_40_ptr);
-               FREE(untag_ptr(ret_conv_40));
-               ret_constr.data[o] = ret_conv_40_conv;
-       }
-       FREE(ret);
-       return ret_constr;
-}
 void handle_onion_message_LDKOnionMessageHandler_jcall(const void* this_arg, LDKPublicKey peer_node_id, const LDKOnionMessage * msg) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
@@ -16978,13 +17904,13 @@ void handle_onion_message_LDKOnionMessageHandler_jcall(const void* this_arg, LDK
        msg_var = OnionMessage_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 133, (int64_t)peer_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 136, (int64_t)peer_node_id_arr, msg_ref);
 }
 LDKOnionMessage next_onion_message_for_peer_LDKOnionMessageHandler_jcall(const void* this_arg, LDKPublicKey peer_node_id) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(peer_node_id_arr->elems, peer_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 134, (int64_t)peer_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 137, (int64_t)peer_node_id_arr);
        LDKOnionMessage ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17001,7 +17927,7 @@ LDKCResult_NoneNoneZ peer_connected_LDKOnionMessageHandler_jcall(const void* thi
        CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = tag_ptr(init_var.inner, init_var.is_owned);
        jboolean inbound_conv = inbound;
-       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 135, (int64_t)their_node_id_arr, init_ref, inbound_conv);
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 138, (int64_t)their_node_id_arr, init_ref, inbound_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -17012,15 +17938,15 @@ void peer_disconnected_LDKOnionMessageHandler_jcall(const void* this_arg, LDKPub
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       js_invoke_function_void_l(j_calls->instance_ptr, 136, (int64_t)their_node_id_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 139, (int64_t)their_node_id_arr);
 }
 void timer_tick_occurred_LDKOnionMessageHandler_jcall(const void* this_arg) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
-       js_invoke_function_void_(j_calls->instance_ptr, 137);
+       js_invoke_function_void_(j_calls->instance_ptr, 140);
 }
 LDKNodeFeatures provided_node_features_LDKOnionMessageHandler_jcall(const void* this_arg) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 138);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 141);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17031,7 +17957,7 @@ LDKInitFeatures provided_init_features_LDKOnionMessageHandler_jcall(const void*
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 139, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 142, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17049,7 +17975,6 @@ static inline LDKOnionMessageHandler LDKOnionMessageHandler_init (int64_t o) {
 
        LDKOnionMessageHandler ret = {
                .this_arg = (void*) calls,
-               .get_and_clear_connections_needed = get_and_clear_connections_needed_LDKOnionMessageHandler_jcall,
                .handle_onion_message = handle_onion_message_LDKOnionMessageHandler_jcall,
                .next_onion_message_for_peer = next_onion_message_for_peer_LDKOnionMessageHandler_jcall,
                .peer_connected = peer_connected_LDKOnionMessageHandler_jcall,
@@ -17066,24 +17991,6 @@ uint64_t  CS_LDK_LDKOnionMessageHandler_new(int32_t o) {
        *res_ptr = LDKOnionMessageHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-int64_tArray  CS_LDK_OnionMessageHandler_get_and_clear_connections_needed(int64_t this_arg) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKOnionMessageHandler* this_arg_conv = (LDKOnionMessageHandler*)this_arg_ptr;
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ ret_var = (this_arg_conv->get_and_clear_connections_needed)(this_arg_conv->this_arg);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t o = 0; o < ret_var.datalen; o++) {
-               LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-               *ret_conv_40_conv = ret_var.data[o];
-               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
 void  CS_LDK_OnionMessageHandler_handle_onion_message(int64_t this_arg, int8_tArray peer_node_id, int64_t msg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -17188,7 +18095,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        LDKu8slice buffer_var = buffer;
        int8_tArray buffer_arr = init_int8_tArray(buffer_var.datalen, __LINE__);
        memcpy(buffer_arr->elems, buffer_var.data, buffer_var.datalen);
-       uint64_t ret = js_invoke_function_l_sl(j_calls->instance_ptr, 140, message_type_conv, (int64_t)buffer_arr);
+       uint64_t ret = js_invoke_function_l_sl(j_calls->instance_ptr, 143, message_type_conv, (int64_t)buffer_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
@@ -17246,7 +18153,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        *msg_ret = msg;
        int8_tArray sender_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(sender_node_id_arr->elems, sender_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 141, tag_ptr(msg_ret, true), (int64_t)sender_node_id_arr);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 144, tag_ptr(msg_ret, true), (int64_t)sender_node_id_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -17255,7 +18162,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
 }
 LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandler_jcall(const void* this_arg) {
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 142);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 145);
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -17274,9 +18181,32 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandle
        FREE(ret);
        return ret_constr;
 }
+void peer_disconnected_LDKCustomMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id) {
+       LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
+       int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
+       js_invoke_function_void_l(j_calls->instance_ptr, 146, (int64_t)their_node_id_arr);
+}
+LDKCResult_NoneNoneZ peer_connected_LDKCustomMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInit * msg, bool inbound) {
+       LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
+       int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
+       LDKInit msg_var = *msg;
+       int64_t msg_ref = 0;
+       msg_var = Init_clone(&msg_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
+       msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
+       jboolean inbound_conv = inbound;
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 147, (int64_t)their_node_id_arr, msg_ref, inbound_conv);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
+}
 LDKNodeFeatures provided_node_features_LDKCustomMessageHandler_jcall(const void* this_arg) {
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 143);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 148);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17287,7 +18217,7 @@ LDKInitFeatures provided_init_features_LDKCustomMessageHandler_jcall(const void*
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 144, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 149, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17308,6 +18238,8 @@ static inline LDKCustomMessageHandler LDKCustomMessageHandler_init (int64_t o, i
                .this_arg = (void*) calls,
                .handle_custom_message = handle_custom_message_LDKCustomMessageHandler_jcall,
                .get_and_clear_pending_msg = get_and_clear_pending_msg_LDKCustomMessageHandler_jcall,
+               .peer_disconnected = peer_disconnected_LDKCustomMessageHandler_jcall,
+               .peer_connected = peer_connected_LDKCustomMessageHandler_jcall,
                .provided_node_features = provided_node_features_LDKCustomMessageHandler_jcall,
                .provided_init_features = provided_init_features_LDKCustomMessageHandler_jcall,
                .free = LDKCustomMessageHandler_JCalls_free,
@@ -17358,6 +18290,33 @@ int64_tArray  CS_LDK_CustomMessageHandler_get_and_clear_pending_msg(int64_t this
        return ret_arr;
 }
 
+void  CS_LDK_CustomMessageHandler_peer_disconnected(int64_t this_arg, int8_tArray their_node_id) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKCustomMessageHandler* this_arg_conv = (LDKCustomMessageHandler*)this_arg_ptr;
+       LDKPublicKey their_node_id_ref;
+       CHECK(their_node_id->arr_len == 33);
+       memcpy(their_node_id_ref.compressed_form, their_node_id->elems, 33); FREE(their_node_id);
+       (this_arg_conv->peer_disconnected)(this_arg_conv->this_arg, their_node_id_ref);
+}
+
+int64_t  CS_LDK_CustomMessageHandler_peer_connected(int64_t this_arg, int8_tArray their_node_id, int64_t msg, jboolean inbound) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKCustomMessageHandler* this_arg_conv = (LDKCustomMessageHandler*)this_arg_ptr;
+       LDKPublicKey their_node_id_ref;
+       CHECK(their_node_id->arr_len == 33);
+       memcpy(their_node_id_ref.compressed_form, their_node_id->elems, 33); FREE(their_node_id);
+       LDKInit msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = (this_arg_conv->peer_connected)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv, inbound);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CustomMessageHandler_provided_node_features(int64_t this_arg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -17393,14 +18352,21 @@ static void LDKCustomOnionMessageHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCOption_OnionMessageContentsZ handle_custom_message_LDKCustomOnionMessageHandler_jcall(const void* this_arg, LDKOnionMessageContents msg) {
+LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ handle_custom_message_LDKCustomOnionMessageHandler_jcall(const void* this_arg, LDKOnionMessageContents message, LDKCOption_CVec_u8ZZ context, LDKResponder responder) {
        LDKCustomOnionMessageHandler_JCalls *j_calls = (LDKCustomOnionMessageHandler_JCalls*) this_arg;
-       LDKOnionMessageContents* msg_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *msg_ret = msg;
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 145, tag_ptr(msg_ret, true));
+       LDKOnionMessageContents* message_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *message_ret = message;
+       LDKCOption_CVec_u8ZZ *context_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
+       LDKResponder responder_var = responder;
+       int64_t responder_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+       responder_ref = tag_ptr(responder_var.inner, responder_var.is_owned);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 150, tag_ptr(message_ret, true), context_ref, responder_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCOption_OnionMessageContentsZ ret_conv = *(LDKCOption_OnionMessageContentsZ*)(ret_ptr);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ ret_conv = *(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -17410,30 +18376,30 @@ LDKCResult_COption_OnionMessageContentsZDecodeErrorZ read_custom_message_LDKCust
        LDKu8slice buffer_var = buffer;
        int8_tArray buffer_arr = init_int8_tArray(buffer_var.datalen, __LINE__);
        memcpy(buffer_arr->elems, buffer_var.data, buffer_var.datalen);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 146, message_type_conv, (int64_t)buffer_arr);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 151, message_type_conv, (int64_t)buffer_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_OnionMessageContentsZDecodeErrorZ ret_conv = *(LDKCResult_COption_OnionMessageContentsZDecodeErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ release_pending_custom_messages_LDKCustomOnionMessageHandler_jcall(const void* this_arg) {
+LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ release_pending_custom_messages_LDKCustomOnionMessageHandler_jcall(const void* this_arg) {
        LDKCustomOnionMessageHandler_JCalls *j_calls = (LDKCustomOnionMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 147);
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ ret_constr;
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 152);
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ Elements");
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ Elements");
        else
                ret_constr.data = NULL;
        int64_t* ret_vals = ret->elems;
-       for (size_t e = 0; e < ret_constr.datalen; e++) {
-               int64_t ret_conv_56 = ret_vals[e];
-               void* ret_conv_56_ptr = untag_ptr(ret_conv_56);
-               CHECK_ACCESS(ret_conv_56_ptr);
-               LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ ret_conv_56_conv = *(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)(ret_conv_56_ptr);
-               FREE(untag_ptr(ret_conv_56));
-               ret_constr.data[e] = ret_conv_56_conv;
+       for (size_t d = 0; d < ret_constr.datalen; d++) {
+               int64_t ret_conv_55 = ret_vals[d];
+               void* ret_conv_55_ptr = untag_ptr(ret_conv_55);
+               CHECK_ACCESS(ret_conv_55_ptr);
+               LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ ret_conv_55_conv = *(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)(ret_conv_55_ptr);
+               FREE(untag_ptr(ret_conv_55));
+               ret_constr.data[d] = ret_conv_55_conv;
        }
        FREE(ret);
        return ret_constr;
@@ -17461,19 +18427,28 @@ uint64_t  CS_LDK_LDKCustomOnionMessageHandler_new(int32_t o) {
        *res_ptr = LDKCustomOnionMessageHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-int64_t  CS_LDK_CustomOnionMessageHandler_handle_custom_message(int64_t this_arg, int64_t msg) {
+int64_t  CS_LDK_CustomOnionMessageHandler_handle_custom_message(int64_t this_arg, int64_t message, int64_t context, int64_t responder) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKCustomOnionMessageHandler* this_arg_conv = (LDKCustomOnionMessageHandler*)this_arg_ptr;
-       void* msg_ptr = untag_ptr(msg);
-       CHECK_ACCESS(msg_ptr);
-       LDKOnionMessageContents msg_conv = *(LDKOnionMessageContents*)(msg_ptr);
-       if (msg_conv.free == LDKOnionMessageContents_JCalls_free) {
+       void* message_ptr = untag_ptr(message);
+       CHECK_ACCESS(message_ptr);
+       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
+       if (message_conv.free == LDKOnionMessageContents_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&msg_conv);
+               LDKOnionMessageContents_JCalls_cloned(&message_conv);
        }
-       LDKCOption_OnionMessageContentsZ *ret_copy = MALLOC(sizeof(LDKCOption_OnionMessageContentsZ), "LDKCOption_OnionMessageContentsZ");
-       *ret_copy = (this_arg_conv->handle_custom_message)(this_arg_conv->this_arg, msg_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKCOption_CVec_u8ZZ context_conv = *(LDKCOption_CVec_u8ZZ*)(context_ptr);
+       context_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(context));
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = (this_arg_conv->handle_custom_message)(this_arg_conv->this_arg, message_conv, context_conv, responder_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -17495,14 +18470,14 @@ int64_tArray  CS_LDK_CustomOnionMessageHandler_release_pending_custom_messages(i
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKCustomOnionMessageHandler* this_arg_conv = (LDKCustomOnionMessageHandler*)this_arg_ptr;
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ ret_var = (this_arg_conv->release_pending_custom_messages)(this_arg_conv->this_arg);
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ ret_var = (this_arg_conv->release_pending_custom_messages)(this_arg_conv->this_arg);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t e = 0; e < ret_var.datalen; e++) {
-               LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv_56_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-               *ret_conv_56_conv = ret_var.data[e];
-               ret_arr_ptr[e] = tag_ptr(ret_conv_56_conv, true);
+       for (size_t d = 0; d < ret_var.datalen; d++) {
+               LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv_55_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+               *ret_conv_55_conv = ret_var.data[d];
+               ret_arr_ptr[d] = tag_ptr(ret_conv_55_conv, true);
        }
        
        FREE(ret_var.data);
@@ -17525,21 +18500,21 @@ uintptr_t send_data_LDKSocketDescriptor_jcall(void* this_arg, LDKu8slice data, b
        int8_tArray data_arr = init_int8_tArray(data_var.datalen, __LINE__);
        memcpy(data_arr->elems, data_var.data, data_var.datalen);
        jboolean resume_read_conv = resume_read;
-       return js_invoke_function_l_lb(j_calls->instance_ptr, 148, (int64_t)data_arr, resume_read_conv);
+       return js_invoke_function_l_lb(j_calls->instance_ptr, 153, (int64_t)data_arr, resume_read_conv);
 }
 void disconnect_socket_LDKSocketDescriptor_jcall(void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       js_invoke_function_void_(j_calls->instance_ptr, 149);
+       js_invoke_function_void_(j_calls->instance_ptr, 154);
 }
 bool eq_LDKSocketDescriptor_jcall(const void* this_arg, const LDKSocketDescriptor * other_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
        LDKSocketDescriptor *other_arg_clone = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
        *other_arg_clone = SocketDescriptor_clone(other_arg);
-       return js_invoke_function_b_l(j_calls->instance_ptr, 150, tag_ptr(other_arg_clone, true));
+       return js_invoke_function_b_l(j_calls->instance_ptr, 155, tag_ptr(other_arg_clone, true));
 }
 uint64_t hash_LDKSocketDescriptor_jcall(const void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       return js_invoke_function_l_(j_calls->instance_ptr, 151);
+       return js_invoke_function_l_(j_calls->instance_ptr, 156);
 }
 static void LDKSocketDescriptor_JCalls_cloned(LDKSocketDescriptor* new_obj) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) new_obj->this_arg;
@@ -17593,6 +18568,22 @@ int64_t  CS_LDK_SocketDescriptor_hash(int64_t this_arg) {
        return ret_conv;
 }
 
+uint32_t CS_LDK_LDKBolt12PaymentError_ty_from_ptr(int64_t ptr) {
+       LDKBolt12PaymentError *obj = (LDKBolt12PaymentError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKBolt12PaymentError_UnexpectedInvoice: return 0;
+               case LDKBolt12PaymentError_DuplicateInvoice: return 1;
+               case LDKBolt12PaymentError_UnknownRequiredFeatures: return 2;
+               case LDKBolt12PaymentError_SendingFailed: return 3;
+               default: abort();
+       }
+}
+int32_t CS_LDK_LDKBolt12PaymentError_SendingFailed_get_sending_failed(int64_t ptr) {
+       LDKBolt12PaymentError *obj = (LDKBolt12PaymentError*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBolt12PaymentError_SendingFailed);
+       int32_t sending_failed_conv = LDKRetryableSendFailure_to_cs(obj->sending_failed);
+       return sending_failed_conv;
+}
 typedef struct LDKSignBolt12InvoiceFn_JCalls {
        atomic_size_t refcnt;
        uint32_t instance_ptr;
@@ -17610,7 +18601,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_invoice_LDKSignBolt12InvoiceFn_jcall(const
        message_var = UnsignedBolt12Invoice_clone(&message_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
        message_ref = tag_ptr(message_var.inner, message_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 152, message_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 157, message_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -17669,7 +18660,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_invoice_request_LDKSignInvoiceRequestFn_jc
        message_var = UnsignedInvoiceRequest_clone(&message_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
        message_ref = tag_ptr(message_var.inner, message_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 153, message_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 158, message_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -17778,15 +18769,16 @@ uint32_t CS_LDK_LDKPayee_ty_from_ptr(int64_t ptr) {
 int64_tArray CS_LDK_LDKPayee_Blinded_get_route_hints(int64_t ptr) {
        LDKPayee *obj = (LDKPayee*)untag_ptr(ptr);
        CHECK(obj->tag == LDKPayee_Blinded);
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_var = obj->blinded.route_hints;
+       LDKCVec_BlindedPaymentPathZ route_hints_var = obj->blinded.route_hints;
                        int64_tArray route_hints_arr = NULL;
                        route_hints_arr = init_int64_tArray(route_hints_var.datalen, __LINE__);
                        int64_t *route_hints_arr_ptr = (int64_t*)(((uint8_t*)route_hints_arr) + 8);
-                       for (size_t l = 0; l < route_hints_var.datalen; l++) {
-                               LDKC2Tuple_BlindedPayInfoBlindedPathZ* route_hints_conv_37_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-                               *route_hints_conv_37_conv = route_hints_var.data[l];
-                               *route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone(route_hints_conv_37_conv);
-                               route_hints_arr_ptr[l] = tag_ptr(route_hints_conv_37_conv, true);
+                       for (size_t u = 0; u < route_hints_var.datalen; u++) {
+                               LDKBlindedPaymentPath route_hints_conv_20_var = route_hints_var.data[u];
+                               int64_t route_hints_conv_20_ref = 0;
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_20_var);
+                               route_hints_conv_20_ref = tag_ptr(route_hints_conv_20_var.inner, false);
+                               route_hints_arr_ptr[u] = route_hints_conv_20_ref;
                        }
                        
        return route_hints_arr;
@@ -17853,7 +18845,7 @@ static void LDKScore_JCalls_free(void* this_arg) {
 }
 LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 154);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 159);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -17964,7 +18956,7 @@ LDKCResult_CoinSelectionNoneZ select_confirmed_utxos_LDKCoinSelectionSource_jcal
        
        FREE(must_pay_to_var.data);
        int32_t target_feerate_sat_per_1000_weight_conv = target_feerate_sat_per_1000_weight;
-       uint64_t ret = js_invoke_function_l_llli(j_calls->instance_ptr, 155, (int64_t)claim_id_arr, (int64_t)must_spend_arr, (int64_t)must_pay_to_arr, target_feerate_sat_per_1000_weight_conv);
+       uint64_t ret = js_invoke_function_l_llli(j_calls->instance_ptr, 160, (int64_t)claim_id_arr, (int64_t)must_spend_arr, (int64_t)must_pay_to_arr, target_feerate_sat_per_1000_weight_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CoinSelectionNoneZ ret_conv = *(LDKCResult_CoinSelectionNoneZ*)(ret_ptr);
@@ -17977,7 +18969,7 @@ LDKCResult_TransactionNoneZ sign_psbt_LDKCoinSelectionSource_jcall(const void* t
        int8_tArray psbt_arr = init_int8_tArray(psbt_var.datalen, __LINE__);
        memcpy(psbt_arr->elems, psbt_var.data, psbt_var.datalen);
        CVec_u8Z_free(psbt_var);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 156, (int64_t)psbt_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 161, (int64_t)psbt_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TransactionNoneZ ret_conv = *(LDKCResult_TransactionNoneZ*)(ret_ptr);
@@ -18076,7 +19068,7 @@ static void LDKWalletSource_JCalls_free(void* this_arg) {
 }
 LDKCResult_CVec_UtxoZNoneZ list_confirmed_utxos_LDKWalletSource_jcall(const void* this_arg) {
        LDKWalletSource_JCalls *j_calls = (LDKWalletSource_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 157);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 162);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_UtxoZNoneZ ret_conv = *(LDKCResult_CVec_UtxoZNoneZ*)(ret_ptr);
@@ -18085,7 +19077,7 @@ LDKCResult_CVec_UtxoZNoneZ list_confirmed_utxos_LDKWalletSource_jcall(const void
 }
 LDKCResult_CVec_u8ZNoneZ get_change_script_LDKWalletSource_jcall(const void* this_arg) {
        LDKWalletSource_JCalls *j_calls = (LDKWalletSource_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 158);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 163);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
@@ -18098,7 +19090,7 @@ LDKCResult_TransactionNoneZ sign_psbt_LDKWalletSource_jcall(const void* this_arg
        int8_tArray psbt_arr = init_int8_tArray(psbt_var.datalen, __LINE__);
        memcpy(psbt_arr->elems, psbt_var.data, psbt_var.datalen);
        CVec_u8Z_free(psbt_var);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 159, (int64_t)psbt_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 164, (int64_t)psbt_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TransactionNoneZ ret_conv = *(LDKCResult_TransactionNoneZ*)(ret_ptr);
@@ -18653,24 +19645,78 @@ int64_t  CS_LDK_COption_u64Z_clone(int64_t orig) {
        return ret_ref;
 }
 
-void  CS_LDK_CVec_BlindedPathZ_free(int64_tArray _res) {
-       LDKCVec_BlindedPathZ _res_constr;
+void  CS_LDK_CVec_BlindedMessagePathZ_free(int64_tArray _res) {
+       LDKCVec_BlindedMessagePathZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKBlindedPath), "LDKCVec_BlindedPathZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKBlindedMessagePath), "LDKCVec_BlindedMessagePathZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t n = 0; n < _res_constr.datalen; n++) {
-               int64_t _res_conv_13 = _res_vals[n];
-               LDKBlindedPath _res_conv_13_conv;
-               _res_conv_13_conv.inner = untag_ptr(_res_conv_13);
-               _res_conv_13_conv.is_owned = ptr_is_owned(_res_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_13_conv);
-               _res_constr.data[n] = _res_conv_13_conv;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKBlindedMessagePath _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
        }
        FREE(_res);
-       CVec_BlindedPathZ_free(_res_constr);
+       CVec_BlindedMessagePathZ_free(_res_constr);
+}
+
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_ok(int64_t o) {
+       LDKRefund o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Refund_clone(&o_conv);
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_RefundDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_RefundDecodeErrorZ* o_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_RefundDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_RefundDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_RefundDecodeErrorZ _res_conv = *(LDKCResult_RefundDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_RefundDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_RefundDecodeErrorZ_clone_ptr(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_RefundDecodeErrorZ* arg_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_RefundDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_RefundDecodeErrorZ* orig_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 int64_t  CS_LDK_CResult_RefundBolt12ParseErrorZ_ok(int64_t o) {
@@ -19274,6 +20320,23 @@ int64_t  CS_LDK_CResult_SchnorrSignatureNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+void  CS_LDK_CVec_StrZ_free(ptrArray _res) {
+       LDKCVec_StrZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
+       else
+               _res_constr.data = NULL;
+       jstring* _res_vals = (void*) _res->elems;
+       for (size_t i = 0; i < _res_constr.datalen; i++) {
+               jstring _res_conv_8 = _res_vals[i];
+               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
+               _res_constr.data[i] = dummy;
+       }
+       FREE(_res);
+       CVec_StrZ_free(_res_constr);
+}
+
 void  CS_LDK_CVec_ThirtyTwoBytesZ_free(ptrArray _res) {
        LDKCVec_ThirtyTwoBytesZ _res_constr;
        _res_constr.datalen = _res->arr_len;
@@ -19493,57 +20556,57 @@ int64_t  CS_LDK_CResult_ThirtyTwoBytesNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_ok(int64_t o) {
-       LDKBlindedPayInfo o_conv;
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_ok(int64_t o) {
+       LDKBolt12Invoice o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = BlindedPayInfo_clone(&o_conv);
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_ok(o_conv);
+       o_conv = Bolt12Invoice_clone(&o_conv);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_err(e_conv);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* o_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_BlindedPayInfoDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* o_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_BlindedPayInfoDecodeErrorZ _res_conv = *(LDKCResult_BlindedPayInfoDecodeErrorZ*)(_res_ptr);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ _res_conv = *(LDKCResult_Bolt12InvoiceDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_BlindedPayInfoDecodeErrorZ_free(_res_conv);
+       CResult_Bolt12InvoiceDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* arg_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* arg_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* orig_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* orig_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -19985,51 +21048,6 @@ int64_t  CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_NoneNoneZ_ok() {
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_ok();
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_NoneNoneZ_err() {
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_NoneNoneZ_is_ok(int64_t o) {
-       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_NoneNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_NoneNoneZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_NoneNoneZ _res_conv = *(LDKCResult_NoneNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_NoneNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_NoneNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_NoneNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_NoneNoneZ_clone(int64_t orig) {
-       LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)untag_ptr(orig);
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_CResult_PublicKeyNoneZ_ok(int8_tArray o) {
        LDKPublicKey o_ref;
        CHECK(o->arr_len == 33);
@@ -20078,6 +21096,99 @@ int64_t  CS_LDK_CResult_PublicKeyNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult__u832NoneZ_ok(int8_tArray o) {
+       LDKThirtyTwoBytes o_ref;
+       CHECK(o->arr_len == 32);
+       memcpy(o_ref.data, o->elems, 32); FREE(o);
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult__u832NoneZ_err() {
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult__u832NoneZ_is_ok(int64_t o) {
+       LDKCResult__u832NoneZ* o_conv = (LDKCResult__u832NoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult__u832NoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult__u832NoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult__u832NoneZ _res_conv = *(LDKCResult__u832NoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult__u832NoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult__u832NoneZ_clone_ptr(LDKCResult__u832NoneZ *NONNULL_PTR arg) {
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult__u832NoneZ_clone_ptr(int64_t arg) {
+       LDKCResult__u832NoneZ* arg_conv = (LDKCResult__u832NoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult__u832NoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult__u832NoneZ_clone(int64_t orig) {
+       LDKCResult__u832NoneZ* orig_conv = (LDKCResult__u832NoneZ*)untag_ptr(orig);
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NoneNoneZ_ok() {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_ok();
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NoneNoneZ_err() {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_NoneNoneZ_is_ok(int64_t o) {
+       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_NoneNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NoneNoneZ _res_conv = *(LDKCResult_NoneNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_NoneNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_NoneNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_NoneNoneZ_clone(int64_t orig) {
+       LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)untag_ptr(orig);
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_COption_BigEndianScalarZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -20125,23 +21236,6 @@ int64_t  CS_LDK_COption_BigEndianScalarZ_clone(int64_t orig) {
        return ret_ref;
 }
 
-void  CS_LDK_CVec_U5Z_free(ptrArray _res) {
-       LDKCVec_U5Z _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKU5), "LDKCVec_U5Z Elements");
-       else
-               _res_constr.data = NULL;
-       int8_t* _res_vals = (void*) _res->elems;
-       for (size_t h = 0; h < _res_constr.datalen; h++) {
-               int8_t _res_conv_7 = _res_vals[h];
-               
-               _res_constr.data[h] = (LDKU5){ ._0 = _res_conv_7 };
-       }
-       FREE(_res);
-       CVec_U5Z_free(_res_constr);
-}
-
 int64_t  CS_LDK_CResult_RecoverableSignatureNoneZ_ok(int8_tArray o) {
        LDKRecoverableSignature o_ref;
        CHECK(o->arr_len == 68);
@@ -20288,59 +21382,59 @@ int64_t  CS_LDK_CResult_TransactionNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(int64_t o) {
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_ok(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKWriteableEcdsaChannelSigner o_conv = *(LDKWriteableEcdsaChannelSigner*)(o_ptr);
-       if (o_conv.free == LDKWriteableEcdsaChannelSigner_JCalls_free) {
+       LDKEcdsaChannelSigner o_conv = *(LDKEcdsaChannelSigner*)(o_ptr);
+       if (o_conv.free == LDKEcdsaChannelSigner_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKWriteableEcdsaChannelSigner_JCalls_cloned(&o_conv);
+               LDKEcdsaChannelSigner_JCalls_cloned(&o_conv);
        }
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(o_conv);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(e_conv);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* o_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* o_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ _res_conv = *(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)(_res_ptr);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ _res_conv = *(LDKCResult_EcdsaChannelSignerDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(_res_conv);
+       CResult_EcdsaChannelSignerDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* arg_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* arg_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* orig_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* orig_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -20828,6 +21922,101 @@ int64_t  CS_LDK_CResult_NoneIOErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+static inline uint64_t C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR arg) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(int64_t arg) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* arg_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(arg);
+       int64_t ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(int64_t orig) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* orig_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(orig);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(int8_tArray a, int64_t b, int64_t c) {
+       LDKThirtyTwoBytes a_ref;
+       CHECK(a->arr_len == 32);
+       memcpy(a_ref.data, a->elems, 32); FREE(a);
+       LDKRecipientOnionFields b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = RecipientOnionFields_clone(&b_conv);
+       LDKRouteParameters c_conv;
+       c_conv.inner = untag_ptr(c);
+       c_conv.is_owned = ptr_is_owned(c);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
+       c_conv = RouteParameters_clone(&c_conv);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(a_ref, b_conv, c_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ _res_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(_res_conv);
+}
+
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ o_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(o_ptr);
+       o_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone((LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(o));
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err() {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(int64_t o) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* o_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ _res_conv = *(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* arg_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(int64_t orig) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* orig_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(orig);
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 void  CS_LDK_CVec_ChannelDetailsZ_free(int64_tArray _res) {
        LDKCVec_ChannelDetailsZ _res_constr;
        _res_constr.datalen = _res->arr_len;
@@ -20903,127 +22092,85 @@ int64_t  CS_LDK_CResult_RouteLightningErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR arg) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(int64_t arg) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* arg_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_clone(int64_t orig) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* orig_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(orig);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_new(int64_t a, int64_t b) {
-       LDKBlindedPayInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPayInfo_clone(&a_conv);
-       LDKBlindedPath b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv = BlindedPath_clone(&b_conv);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_new(a_conv, b_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ _res_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       C2Tuple_BlindedPayInfoBlindedPathZ_free(_res_conv);
-}
-
-void  CS_LDK_CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free(int64_tArray _res) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ _res_constr;
+void  CS_LDK_CVec_BlindedPaymentPathZ_free(int64_tArray _res) {
+       LDKCVec_BlindedPaymentPathZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t l = 0; l < _res_constr.datalen; l++) {
-               int64_t _res_conv_37 = _res_vals[l];
-               void* _res_conv_37_ptr = untag_ptr(_res_conv_37);
-               CHECK_ACCESS(_res_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ _res_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(_res_conv_37_ptr);
-               FREE(untag_ptr(_res_conv_37));
-               _res_constr.data[l] = _res_conv_37_conv;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKBlindedPaymentPath _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
        }
        FREE(_res);
-       CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free(_res_constr);
+       CVec_BlindedPaymentPathZ_free(_res_constr);
 }
 
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(int64_tArray o) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ o_constr;
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_ok(int64_tArray o) {
+       LDKCVec_BlindedPaymentPathZ o_constr;
        o_constr.datalen = o->arr_len;
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
        else
                o_constr.data = NULL;
        int64_t* o_vals = o->elems;
-       for (size_t l = 0; l < o_constr.datalen; l++) {
-               int64_t o_conv_37 = o_vals[l];
-               void* o_conv_37_ptr = untag_ptr(o_conv_37);
-               CHECK_ACCESS(o_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ o_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(o_conv_37_ptr);
-               o_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(o_conv_37));
-               o_constr.data[l] = o_conv_37_conv;
+       for (size_t u = 0; u < o_constr.datalen; u++) {
+               int64_t o_conv_20 = o_vals[u];
+               LDKBlindedPaymentPath o_conv_20_conv;
+               o_conv_20_conv.inner = untag_ptr(o_conv_20);
+               o_conv_20_conv.is_owned = ptr_is_owned(o_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv_20_conv);
+               o_conv_20_conv = BlindedPaymentPath_clone(&o_conv_20_conv);
+               o_constr.data[u] = o_conv_20_conv;
        }
        FREE(o);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(o_constr);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err() {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err();
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_err() {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(int64_t o) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* o_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(int64_t o) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* o_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(int64_t _res) {
+void  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ _res_conv = *(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)(_res_ptr);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ _res_conv = *(LDKCResult_CVec_BlindedPaymentPathZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(_res_conv);
+       CResult_CVec_BlindedPaymentPathZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* arg_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(int64_t orig) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(orig);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_clone(int64_t orig) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* orig_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -21096,68 +22243,88 @@ int64_t  CS_LDK_CResult_OnionMessagePathNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_ok(int64_tArray o) {
-       LDKCVec_BlindedPathZ o_constr;
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_ok(int64_tArray o) {
+       LDKCVec_BlindedMessagePathZ o_constr;
        o_constr.datalen = o->arr_len;
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKBlindedPath), "LDKCVec_BlindedPathZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKBlindedMessagePath), "LDKCVec_BlindedMessagePathZ Elements");
        else
                o_constr.data = NULL;
        int64_t* o_vals = o->elems;
-       for (size_t n = 0; n < o_constr.datalen; n++) {
-               int64_t o_conv_13 = o_vals[n];
-               LDKBlindedPath o_conv_13_conv;
-               o_conv_13_conv.inner = untag_ptr(o_conv_13);
-               o_conv_13_conv.is_owned = ptr_is_owned(o_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv_13_conv);
-               o_conv_13_conv = BlindedPath_clone(&o_conv_13_conv);
-               o_constr.data[n] = o_conv_13_conv;
+       for (size_t u = 0; u < o_constr.datalen; u++) {
+               int64_t o_conv_20 = o_vals[u];
+               LDKBlindedMessagePath o_conv_20_conv;
+               o_conv_20_conv.inner = untag_ptr(o_conv_20);
+               o_conv_20_conv.is_owned = ptr_is_owned(o_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv_20_conv);
+               o_conv_20_conv = BlindedMessagePath_clone(&o_conv_20_conv);
+               o_constr.data[u] = o_conv_20_conv;
        }
        FREE(o);
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_ok(o_constr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_err() {
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_err();
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_err() {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_CVec_BlindedPathZNoneZ_is_ok(int64_t o) {
-       LDKCResult_CVec_BlindedPathZNoneZ* o_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_BlindedPathZNoneZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_is_ok(int64_t o) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* o_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_CVec_BlindedPathZNoneZ_free(int64_t _res) {
+void  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_BlindedPathZNoneZ _res_conv = *(LDKCResult_CVec_BlindedPathZNoneZ*)(_res_ptr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ _res_conv = *(LDKCResult_CVec_BlindedMessagePathZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_CVec_BlindedPathZNoneZ_free(_res_conv);
+       CResult_CVec_BlindedMessagePathZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_CVec_BlindedPathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_CVec_BlindedPathZNoneZ* arg_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_BlindedPathZNoneZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* arg_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_clone(int64_t orig) {
-       LDKCResult_CVec_BlindedPathZNoneZ* orig_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(orig);
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_clone(int64_t orig) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* orig_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
+void  CS_LDK_CVec_MessageForwardNodeZ_free(int64_tArray _res) {
+       LDKCVec_MessageForwardNodeZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKMessageForwardNode), "LDKCVec_MessageForwardNodeZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKMessageForwardNode _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
+       }
+       FREE(_res);
+       CVec_MessageForwardNodeZ_free(_res_constr);
+}
+
 int64_t  CS_LDK_CResult_InFlightHtlcsDecodeErrorZ_ok(int64_t o) {
        LDKInFlightHtlcs o_conv;
        o_conv.inner = untag_ptr(o);
@@ -21578,26 +22745,6 @@ void  CS_LDK_CVec_RouteHintZ_free(int64_tArray _res) {
        CVec_RouteHintZ_free(_res_constr);
 }
 
-void  CS_LDK_CVec_RouteHintHopZ_free(int64_tArray _res) {
-       LDKCVec_RouteHintHopZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_14 = _res_vals[o];
-               LDKRouteHintHop _res_conv_14_conv;
-               _res_conv_14_conv.inner = untag_ptr(_res_conv_14);
-               _res_conv_14_conv.is_owned = ptr_is_owned(_res_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
-               _res_constr.data[o] = _res_conv_14_conv;
-       }
-       FREE(_res);
-       CVec_RouteHintHopZ_free(_res_constr);
-}
-
 int64_t  CS_LDK_CResult_RouteHintDecodeErrorZ_ok(int64_t o) {
        LDKRouteHint o_conv;
        o_conv.inner = untag_ptr(o);
@@ -22926,6 +24073,60 @@ void  CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticError
        CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_free(_res_conv);
 }
 
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_ok(int64_t o) {
+       LDKOffer o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Offer_clone(&o_conv);
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_OfferDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_OfferDecodeErrorZ* o_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_OfferDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_OfferDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_OfferDecodeErrorZ _res_conv = *(LDKCResult_OfferDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_OfferDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_OfferDecodeErrorZ_clone_ptr(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_OfferDecodeErrorZ* arg_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_OfferDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_OfferDecodeErrorZ* orig_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_OfferBolt12ParseErrorZ_ok(int64_t o) {
        LDKOffer o_conv;
        o_conv.inner = untag_ptr(o);
@@ -23612,11 +24813,10 @@ void  CS_LDK_CVec_SocketAddressZ_free(int64_tArray _res) {
 }
 
 int64_t  CS_LDK_CResult_NodeAnnouncementInfoDecodeErrorZ_ok(int64_t o) {
-       LDKNodeAnnouncementInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = NodeAnnouncementInfo_clone(&o_conv);
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKNodeAnnouncementInfo o_conv = *(LDKNodeAnnouncementInfo*)(o_ptr);
+       o_conv = NodeAnnouncementInfo_clone((LDKNodeAnnouncementInfo*)untag_ptr(o));
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
@@ -23719,6 +24919,53 @@ int64_t  CS_LDK_CResult_NodeAliasDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKNodeAnnouncementInfo o_conv = *(LDKNodeAnnouncementInfo*)(o_ptr);
+       o_conv = NodeAnnouncementInfo_clone((LDKNodeAnnouncementInfo*)untag_ptr(o));
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_none() {
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_NodeAnnouncementInfoZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_NodeAnnouncementInfoZ _res_conv = *(LDKCOption_NodeAnnouncementInfoZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_NodeAnnouncementInfoZ_free(_res_conv);
+}
+
+static inline uint64_t COption_NodeAnnouncementInfoZ_clone_ptr(LDKCOption_NodeAnnouncementInfoZ *NONNULL_PTR arg) {
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_clone_ptr(int64_t arg) {
+       LDKCOption_NodeAnnouncementInfoZ* arg_conv = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_NodeAnnouncementInfoZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_clone(int64_t orig) {
+       LDKCOption_NodeAnnouncementInfoZ* orig_conv = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(orig);
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 int64_t  CS_LDK_CResult_NodeInfoDecodeErrorZ_ok(int64_t o) {
        LDKNodeInfo o_conv;
        o_conv.inner = untag_ptr(o);
@@ -25042,117 +26289,352 @@ int64_t  CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_COption_OffersMessageZ_some(int64_t o) {
+int64_t  CS_LDK_COption_OffersContextZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKOffersMessage o_conv = *(LDKOffersMessage*)(o_ptr);
-       o_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(o));
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_some(o_conv);
+       LDKOffersContext o_conv = *(LDKOffersContext*)(o_ptr);
+       o_conv = OffersContext_clone((LDKOffersContext*)untag_ptr(o));
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_COption_OffersMessageZ_none() {
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_none();
+int64_t  CS_LDK_COption_OffersContextZ_none() {
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_COption_OffersMessageZ_free(int64_t _res) {
+void  CS_LDK_COption_OffersContextZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_OffersMessageZ _res_conv = *(LDKCOption_OffersMessageZ*)(_res_ptr);
+       LDKCOption_OffersContextZ _res_conv = *(LDKCOption_OffersContextZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_OffersMessageZ_free(_res_conv);
+       COption_OffersContextZ_free(_res_conv);
 }
 
-static inline uint64_t COption_OffersMessageZ_clone_ptr(LDKCOption_OffersMessageZ *NONNULL_PTR arg) {
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_clone(arg);
+static inline uint64_t COption_OffersContextZ_clone_ptr(LDKCOption_OffersContextZ *NONNULL_PTR arg) {
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_COption_OffersMessageZ_clone_ptr(int64_t arg) {
-       LDKCOption_OffersMessageZ* arg_conv = (LDKCOption_OffersMessageZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_OffersMessageZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_COption_OffersContextZ_clone_ptr(int64_t arg) {
+       LDKCOption_OffersContextZ* arg_conv = (LDKCOption_OffersContextZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_OffersContextZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_COption_OffersMessageZ_clone(int64_t orig) {
-       LDKCOption_OffersMessageZ* orig_conv = (LDKCOption_OffersMessageZ*)untag_ptr(orig);
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_clone(orig_conv);
+int64_t  CS_LDK_COption_OffersContextZ_clone(int64_t orig) {
+       LDKCOption_OffersContextZ* orig_conv = (LDKCOption_OffersContextZ*)untag_ptr(orig);
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR arg) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_clone(arg);
+static inline uint64_t C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *ret_conv = C2Tuple_OffersMessageResponseInstructionZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(int64_t arg) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* arg_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(arg);
-       int64_t ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* arg_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_clone(int64_t orig) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* orig_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(orig);
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_clone(int64_t orig) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* orig_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(orig);
+       LDKC2Tuple_OffersMessageResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *ret_conv = C2Tuple_OffersMessageResponseInstructionZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_new(int64_t a, int64_t b, int64_t c) {
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_new(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
+       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
+       LDKResponseInstruction b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = ResponseInstruction_clone(&b_conv);
+       LDKC2Tuple_OffersMessageResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *ret_conv = C2Tuple_OffersMessageResponseInstructionZ_new(a_conv, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_OffersMessageResponseInstructionZ _res_conv = *(LDKC2Tuple_OffersMessageResponseInstructionZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_OffersMessageResponseInstructionZ_free(_res_conv);
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_OffersMessageResponseInstructionZ o_conv = *(LDKC2Tuple_OffersMessageResponseInstructionZ*)(o_ptr);
+       o_conv = C2Tuple_OffersMessageResponseInstructionZ_clone((LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(o));
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_none() {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ _res_conv = *(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_C2Tuple_OffersMessageResponseInstructionZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(int64_t arg) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ* arg_conv = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(int64_t orig) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ* orig_conv = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline uint64_t C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* arg_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_clone(int64_t orig) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* orig_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(orig);
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_new(int64_t a, int64_t b) {
        void* a_ptr = untag_ptr(a);
        CHECK_ACCESS(a_ptr);
        LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
        a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKDestination b_conv = *(LDKDestination*)(b_ptr);
-       b_conv = Destination_clone((LDKDestination*)untag_ptr(b));
-       LDKBlindedPath c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = BlindedPath_clone(&c_conv);
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_new(a_conv, b_conv, c_conv);
+       LDKMessageSendInstructions b_conv = *(LDKMessageSendInstructions*)(b_ptr);
+       b_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(b));
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_new(a_conv, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ _res_conv = *(LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)(_res_ptr);
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ _res_conv = *(LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C3Tuple_OffersMessageDestinationBlindedPathZ_free(_res_conv);
+       C2Tuple_OffersMessageMessageSendInstructionsZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free(int64_tArray _res) {
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ _res_constr;
+void  CS_LDK_CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t x = 0; x < _res_constr.datalen; x++) {
-               int64_t _res_conv_49 = _res_vals[x];
-               void* _res_conv_49_ptr = untag_ptr(_res_conv_49);
-               CHECK_ACCESS(_res_conv_49_ptr);
-               LDKC3Tuple_OffersMessageDestinationBlindedPathZ _res_conv_49_conv = *(LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)(_res_conv_49_ptr);
-               FREE(untag_ptr(_res_conv_49));
-               _res_constr.data[x] = _res_conv_49_conv;
+       for (size_t w = 0; w < _res_constr.datalen; w++) {
+               int64_t _res_conv_48 = _res_vals[w];
+               void* _res_conv_48_ptr = untag_ptr(_res_conv_48);
+               CHECK_ACCESS(_res_conv_48_ptr);
+               LDKC2Tuple_OffersMessageMessageSendInstructionsZ _res_conv_48_conv = *(LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)(_res_conv_48_ptr);
+               FREE(untag_ptr(_res_conv_48));
+               _res_constr.data[w] = _res_conv_48_conv;
+       }
+       FREE(_res);
+       CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free(_res_constr);
+}
+
+static inline uint64_t C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* arg_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(int64_t orig) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* orig_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(orig);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(int64_t a, int64_t b) {
+       LDKReleaseHeldHtlc a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = ReleaseHeldHtlc_clone(&a_conv);
+       LDKResponseInstruction b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = ResponseInstruction_clone(&b_conv);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(a_conv, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ _res_conv = *(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(_res_conv);
+}
+
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ o_conv = *(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)(o_ptr);
+       o_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone((LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(o));
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none() {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ _res_conv = *(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(int64_t arg) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ* arg_conv = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(int64_t orig) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ* orig_conv = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline uint64_t C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR arg) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* arg_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(int64_t orig) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* orig_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(orig);
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKAsyncPaymentsMessage a_conv = *(LDKAsyncPaymentsMessage*)(a_ptr);
+       a_conv = AsyncPaymentsMessage_clone((LDKAsyncPaymentsMessage*)untag_ptr(a));
+       void* b_ptr = untag_ptr(b);
+       CHECK_ACCESS(b_ptr);
+       LDKMessageSendInstructions b_conv = *(LDKMessageSendInstructions*)(b_ptr);
+       b_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(b));
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(a_conv, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ _res_conv = *(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(_res_conv);
+}
+
+void  CS_LDK_CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t d = 0; d < _res_constr.datalen; d++) {
+               int64_t _res_conv_55 = _res_vals[d];
+               void* _res_conv_55_ptr = untag_ptr(_res_conv_55);
+               CHECK_ACCESS(_res_conv_55_ptr);
+               LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ _res_conv_55_conv = *(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)(_res_conv_55_ptr);
+               FREE(untag_ptr(_res_conv_55));
+               _res_constr.data[d] = _res_conv_55_conv;
        }
        FREE(_res);
-       CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free(_res_constr);
+       CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free(_res_constr);
 }
 
 int64_t  CS_LDK_CResult_PhantomRouteHintsDecodeErrorZ_ok(int64_t o) {
@@ -26132,6 +27614,56 @@ void  CS_LDK_CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(int64_
        CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(_res_constr);
 }
 
+int64_t  CS_LDK_CResult_NoneReplayEventZ_ok() {
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_ok();
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NoneReplayEventZ_err(int64_t e) {
+       LDKReplayEvent e_conv;
+       e_conv.inner = untag_ptr(e);
+       e_conv.is_owned = ptr_is_owned(e);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = ReplayEvent_clone(&e_conv);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_NoneReplayEventZ_is_ok(int64_t o) {
+       LDKCResult_NoneReplayEventZ* o_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneReplayEventZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_NoneReplayEventZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NoneReplayEventZ _res_conv = *(LDKCResult_NoneReplayEventZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_NoneReplayEventZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NoneReplayEventZ_clone_ptr(LDKCResult_NoneReplayEventZ *NONNULL_PTR arg) {
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_NoneReplayEventZ_clone_ptr(int64_t arg) {
+       LDKCResult_NoneReplayEventZ* arg_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneReplayEventZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_NoneReplayEventZ_clone(int64_t orig) {
+       LDKCResult_NoneReplayEventZ* orig_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(orig);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 void  CS_LDK_CVec_CommitmentTransactionZ_free(int64_tArray _res) {
        LDKCVec_CommitmentTransactionZ _res_constr;
        _res_constr.datalen = _res->arr_len;
@@ -26458,76 +27990,96 @@ void  CS_LDK_CVec_C2Tuple_PublicKeyTypeZZ_free(int64_tArray _res) {
        CVec_C2Tuple_PublicKeyTypeZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(arg);
+static inline uint64_t C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(int64_t arg) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* arg_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* arg_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(int64_t orig) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* orig_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(orig);
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_clone(int64_t orig) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* orig_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(orig);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_new(int8_tArray a, int64_tArray b) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKCVec_SocketAddressZ b_constr;
-       b_constr.datalen = b->arr_len;
-       if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
-       else
-               b_constr.data = NULL;
-       int64_t* b_vals = b->elems;
-       for (size_t p = 0; p < b_constr.datalen; p++) {
-               int64_t b_conv_15 = b_vals[p];
-               void* b_conv_15_ptr = untag_ptr(b_conv_15);
-               CHECK_ACCESS(b_conv_15_ptr);
-               LDKSocketAddress b_conv_15_conv = *(LDKSocketAddress*)(b_conv_15_ptr);
-               b_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(b_conv_15));
-               b_constr.data[p] = b_conv_15_conv;
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_new(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
+       if (a_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&a_conv);
        }
-       FREE(b);
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_new(a_ref, b_constr);
+       LDKResponseInstruction b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = ResponseInstruction_clone(&b_conv);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_new(a_conv, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ _res_conv = *(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)(_res_ptr);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ _res_conv = *(LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PublicKeyCVec_SocketAddressZZ_free(_res_conv);
+       C2Tuple_OnionMessageContentsResponseInstructionZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free(int64_tArray _res) {
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_40 = _res_vals[o];
-               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
-               CHECK_ACCESS(_res_conv_40_ptr);
-               LDKC2Tuple_PublicKeyCVec_SocketAddressZZ _res_conv_40_conv = *(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)(_res_conv_40_ptr);
-               FREE(untag_ptr(_res_conv_40));
-               _res_constr.data[o] = _res_conv_40_conv;
-       }
-       FREE(_res);
-       CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free(_res_constr);
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ o_conv = *(LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)(o_ptr);
+       o_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone((LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(o));
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none() {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ _res_conv = *(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(int64_t arg) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ* arg_conv = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(int64_t orig) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ* orig_conv = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
 int64_t  CS_LDK_COption_OnionMessageContentsZ_some(int64_t o) {
@@ -26633,25 +28185,25 @@ int64_t  CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_clone(int64_t
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR arg) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(arg);
+static inline uint64_t C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(int64_t arg) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* arg_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(arg);
-       int64_t ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* arg_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(int64_t orig) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* orig_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(orig);
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(int64_t orig) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* orig_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(orig);
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(int64_t a, int64_t b, int64_t c) {
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(int64_t a, int64_t b) {
        void* a_ptr = untag_ptr(a);
        CHECK_ACCESS(a_ptr);
        LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
@@ -26661,45 +28213,40 @@ int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(int64_t
        }
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKDestination b_conv = *(LDKDestination*)(b_ptr);
-       b_conv = Destination_clone((LDKDestination*)untag_ptr(b));
-       LDKBlindedPath c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = BlindedPath_clone(&c_conv);
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(a_conv, b_conv, c_conv);
+       LDKMessageSendInstructions b_conv = *(LDKMessageSendInstructions*)(b_ptr);
+       b_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(b));
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(a_conv, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ _res_conv = *(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)(_res_ptr);
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ _res_conv = *(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(_res_conv);
+       C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free(int64_tArray _res) {
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ _res_constr;
+void  CS_LDK_CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t e = 0; e < _res_constr.datalen; e++) {
-               int64_t _res_conv_56 = _res_vals[e];
-               void* _res_conv_56_ptr = untag_ptr(_res_conv_56);
-               CHECK_ACCESS(_res_conv_56_ptr);
-               LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ _res_conv_56_conv = *(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)(_res_conv_56_ptr);
-               FREE(untag_ptr(_res_conv_56));
-               _res_constr.data[e] = _res_conv_56_conv;
+       for (size_t d = 0; d < _res_constr.datalen; d++) {
+               int64_t _res_conv_55 = _res_vals[d];
+               void* _res_conv_55_ptr = untag_ptr(_res_conv_55);
+               CHECK_ACCESS(_res_conv_55_ptr);
+               LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ _res_conv_55_conv = *(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)(_res_conv_55_ptr);
+               FREE(untag_ptr(_res_conv_55));
+               _res_constr.data[d] = _res_conv_55_conv;
        }
        FREE(_res);
-       CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free(_res_constr);
+       CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free(_res_constr);
 }
 
 int64_t  CS_LDK_COption_TypeZ_some(int64_t o) {
@@ -27107,23 +28654,6 @@ int64_t  CS_LDK_CResult_CVec_u8ZIOErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_CVec_StrZ_free(ptrArray _res) {
-       LDKCVec_StrZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
-       else
-               _res_constr.data = NULL;
-       jstring* _res_vals = (void*) _res->elems;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               jstring _res_conv_8 = _res_vals[i];
-               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
-               _res_constr.data[i] = dummy;
-       }
-       FREE(_res);
-       CVec_StrZ_free(_res_constr);
-}
-
 int64_t  CS_LDK_CResult_CVec_StrZIOErrorZ_ok(ptrArray o) {
        LDKCVec_StrZ o_constr;
        o_constr.datalen = o->arr_len;
@@ -27417,52 +28947,6 @@ int64_t  CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_COption_SecretKeyZ_some(int8_tArray o) {
-       LDKSecretKey o_ref;
-       CHECK(o->arr_len == 32);
-       memcpy(o_ref.bytes, o->elems, 32); FREE(o);
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_COption_SecretKeyZ_none() {
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_COption_SecretKeyZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_SecretKeyZ _res_conv = *(LDKCOption_SecretKeyZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_SecretKeyZ_free(_res_conv);
-}
-
-static inline uint64_t COption_SecretKeyZ_clone_ptr(LDKCOption_SecretKeyZ *NONNULL_PTR arg) {
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_COption_SecretKeyZ_clone_ptr(int64_t arg) {
-       LDKCOption_SecretKeyZ* arg_conv = (LDKCOption_SecretKeyZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_SecretKeyZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_COption_SecretKeyZ_clone(int64_t orig) {
-       LDKCOption_SecretKeyZ* orig_conv = (LDKCOption_SecretKeyZ*)untag_ptr(orig);
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 int64_t  CS_LDK_CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_ok(int64_t o) {
        LDKInvoiceWithExplicitSigningPubkeyBuilder o_conv;
        o_conv.inner = untag_ptr(o);
@@ -28105,57 +29589,57 @@ int64_t  CS_LDK_CResult_StfuDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_ok(int64_t o) {
-       LDKSplice o_conv;
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_ok(int64_t o) {
+       LDKSpliceInit o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = Splice_clone(&o_conv);
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_ok(o_conv);
+       o_conv = SpliceInit_clone(&o_conv);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_err(e_conv);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_SpliceDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_SpliceDecodeErrorZ* o_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_SpliceDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_SpliceInitDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_SpliceInitDecodeErrorZ* o_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SpliceInitDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_SpliceDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_SpliceInitDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_SpliceDecodeErrorZ _res_conv = *(LDKCResult_SpliceDecodeErrorZ*)(_res_ptr);
+       LDKCResult_SpliceInitDecodeErrorZ _res_conv = *(LDKCResult_SpliceInitDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_SpliceDecodeErrorZ_free(_res_conv);
+       CResult_SpliceInitDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_SpliceDecodeErrorZ_clone_ptr(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_SpliceInitDecodeErrorZ_clone_ptr(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_SpliceDecodeErrorZ* arg_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_SpliceDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_SpliceInitDecodeErrorZ* arg_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SpliceInitDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_SpliceDecodeErrorZ* orig_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_SpliceInitDecodeErrorZ* orig_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -28969,6 +30453,60 @@ int64_t  CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_ok(int64_t o) {
+       LDKCommitmentSignedBatch o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = CommitmentSignedBatch_clone(&o_conv);
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* o_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ _res_conv = *(LDKCResult_CommitmentSignedBatchDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CommitmentSignedBatchDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* arg_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* orig_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_CommitmentSignedDecodeErrorZ_ok(int64_t o) {
        LDKCommitmentSigned o_conv;
        o_conv.inner = untag_ptr(o);
@@ -30697,80 +32235,6 @@ int64_t  CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_CVec_PhantomRouteHintsZ_free(int64_tArray _res) {
-       LDKCVec_PhantomRouteHintsZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t t = 0; t < _res_constr.datalen; t++) {
-               int64_t _res_conv_19 = _res_vals[t];
-               LDKPhantomRouteHints _res_conv_19_conv;
-               _res_conv_19_conv.inner = untag_ptr(_res_conv_19);
-               _res_conv_19_conv.is_owned = ptr_is_owned(_res_conv_19);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
-               _res_constr.data[t] = _res_conv_19_conv;
-       }
-       FREE(_res);
-       CVec_PhantomRouteHintsZ_free(_res_constr);
-}
-
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(int64_t o) {
-       LDKBolt11Invoice o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = Bolt11Invoice_clone(&o_conv);
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_err(int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKSignOrCreationError e_conv = *(LDKSignOrCreationError*)(e_ptr);
-       e_conv = SignOrCreationError_clone((LDKSignOrCreationError*)untag_ptr(e));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(int64_t o) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ _res_conv = *(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_Bolt11InvoiceSignOrCreationErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(int64_t orig) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(orig);
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_COption_InboundHTLCStateDetailsZ_some(int32_t o) {
        LDKInboundHTLCStateDetails o_conv = LDKInboundHTLCStateDetails_from_cs(o);
        LDKCOption_InboundHTLCStateDetailsZ *ret_copy = MALLOC(sizeof(LDKCOption_InboundHTLCStateDetailsZ), "LDKCOption_InboundHTLCStateDetailsZ");
@@ -31389,6 +32853,167 @@ void  CS_LDK_CVec_FutureZ_free(int64_tArray _res) {
        CVec_FutureZ_free(_res_constr);
 }
 
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_ok(int64_t o) {
+       LDKHeldHtlcAvailable o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = HeldHtlcAvailable_clone(&o_conv);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* o_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ _res_conv = *(LDKCResult_HeldHtlcAvailableDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_HeldHtlcAvailableDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* arg_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* orig_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_ok(int64_t o) {
+       LDKReleaseHeldHtlc o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ReleaseHeldHtlc_clone(&o_conv);
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* o_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ _res_conv = *(LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ReleaseHeldHtlcDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* arg_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* orig_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKAsyncPaymentsMessage o_conv = *(LDKAsyncPaymentsMessage*)(o_ptr);
+       o_conv = AsyncPaymentsMessage_clone((LDKAsyncPaymentsMessage*)untag_ptr(o));
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* o_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ _res_conv = *(LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_AsyncPaymentsMessageDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* arg_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* orig_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_OffersMessageDecodeErrorZ_ok(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -32251,6 +33876,59 @@ void  CS_LDK_CVec_TransactionZ_free(ptrArray _res) {
        CVec_TransactionZ_free(_res_constr);
 }
 
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKFundingInfo o_conv = *(LDKFundingInfo*)(o_ptr);
+       o_conv = FundingInfo_clone((LDKFundingInfo*)untag_ptr(o));
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_FundingInfoDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_FundingInfoDecodeErrorZ* o_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_FundingInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_FundingInfoDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_FundingInfoDecodeErrorZ _res_conv = *(LDKCResult_FundingInfoDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_FundingInfoDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_FundingInfoDecodeErrorZ_clone_ptr(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_FundingInfoDecodeErrorZ* arg_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_FundingInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_FundingInfoDecodeErrorZ* orig_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_PaymentPurposeDecodeErrorZ_ok(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -32658,53 +34336,100 @@ int64_t  CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_clone(int64_t orig)
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_ok(int32_t o) {
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_some(int32_t o) {
        LDKPaymentFailureReason o_conv = LDKPaymentFailureReason_from_cs(o);
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_ok(o_conv);
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_none() {
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_PaymentFailureReasonZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_PaymentFailureReasonZ _res_conv = *(LDKCOption_PaymentFailureReasonZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_PaymentFailureReasonZ_free(_res_conv);
+}
+
+static inline uint64_t COption_PaymentFailureReasonZ_clone_ptr(LDKCOption_PaymentFailureReasonZ *NONNULL_PTR arg) {
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone_ptr(int64_t arg) {
+       LDKCOption_PaymentFailureReasonZ* arg_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_PaymentFailureReasonZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone(int64_t orig) {
+       LDKCOption_PaymentFailureReasonZ* orig_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(orig);
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_PaymentFailureReasonZ o_conv = *(LDKCOption_PaymentFailureReasonZ*)(o_ptr);
+       o_conv = COption_PaymentFailureReasonZ_clone((LDKCOption_PaymentFailureReasonZ*)untag_ptr(o));
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_err(e_conv);
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* o_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* o_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentFailureReasonDecodeErrorZ _res_conv = *(LDKCResult_PaymentFailureReasonDecodeErrorZ*)(_res_ptr);
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ _res_conv = *(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentFailureReasonDecodeErrorZ_free(_res_conv);
+       CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* arg_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* arg_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* orig_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* orig_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -32774,50 +34499,6 @@ void  CS_LDK_CVec_ClaimedHTLCZ_free(int64_tArray _res) {
        CVec_ClaimedHTLCZ_free(_res_constr);
 }
 
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_some(int32_t o) {
-       LDKPaymentFailureReason o_conv = LDKPaymentFailureReason_from_cs(o);
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_some(o_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_none() {
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_COption_PaymentFailureReasonZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentFailureReasonZ _res_conv = *(LDKCOption_PaymentFailureReasonZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_PaymentFailureReasonZ_free(_res_conv);
-}
-
-static inline uint64_t COption_PaymentFailureReasonZ_clone_ptr(LDKCOption_PaymentFailureReasonZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone_ptr(int64_t arg) {
-       LDKCOption_PaymentFailureReasonZ* arg_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentFailureReasonZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone(int64_t orig) {
-       LDKCOption_PaymentFailureReasonZ* orig_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(orig);
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 int64_t  CS_LDK_COption_EventZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -32918,6 +34599,80 @@ int64_t  CS_LDK_CResult_COption_EventZDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_ok(int64_t o) {
+       LDKNonce o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Nonce_clone(&o_conv);
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_NonceDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_NonceDecodeErrorZ* o_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NonceDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_NonceDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NonceDecodeErrorZ _res_conv = *(LDKCResult_NonceDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_NonceDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NonceDecodeErrorZ_clone_ptr(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_NonceDecodeErrorZ* arg_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NonceDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_NonceDecodeErrorZ* orig_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_CVec_RouteHintHopZ_free(int64_tArray _res) {
+       LDKCVec_RouteHintHopZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t o = 0; o < _res_constr.datalen; o++) {
+               int64_t _res_conv_14 = _res_vals[o];
+               LDKRouteHintHop _res_conv_14_conv;
+               _res_conv_14_conv.inner = untag_ptr(_res_conv_14);
+               _res_conv_14_conv.is_owned = ptr_is_owned(_res_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
+               _res_constr.data[o] = _res_conv_14_conv;
+       }
+       FREE(_res);
+       CVec_RouteHintHopZ_free(_res_constr);
+}
+
 int64_t  CS_LDK_CResult_SiPrefixBolt11ParseErrorZ_ok(int32_t o) {
        LDKSiPrefix o_conv = LDKSiPrefix_from_cs(o);
        LDKCResult_SiPrefixBolt11ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixBolt11ParseErrorZ), "LDKCResult_SiPrefixBolt11ParseErrorZ");
@@ -33551,6 +35306,60 @@ int64_t  CS_LDK_CResult_BigSizeDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_ok(int64_t o) {
+       LDKUntrustedString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = UntrustedString_clone(&o_conv);
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_UntrustedStringDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_UntrustedStringDecodeErrorZ* o_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_UntrustedStringDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_UntrustedStringDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_UntrustedStringDecodeErrorZ _res_conv = *(LDKCResult_UntrustedStringDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_UntrustedStringDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_UntrustedStringDecodeErrorZ_clone_ptr(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_UntrustedStringDecodeErrorZ* arg_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_UntrustedStringDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_UntrustedStringDecodeErrorZ* orig_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_HostnameDecodeErrorZ_ok(int64_t o) {
        LDKHostname o_conv;
        o_conv.inner = untag_ptr(o);
@@ -33709,60 +35518,6 @@ int64_t  CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_clone(int64_t orig)
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_ok(int64_t o) {
-       LDKUntrustedString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = UntrustedString_clone(&o_conv);
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_err(int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
-       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_UntrustedStringDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_UntrustedStringDecodeErrorZ* o_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_UntrustedStringDecodeErrorZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_UntrustedStringDecodeErrorZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_UntrustedStringDecodeErrorZ _res_conv = *(LDKCResult_UntrustedStringDecodeErrorZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_UntrustedStringDecodeErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_UntrustedStringDecodeErrorZ_clone_ptr(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_UntrustedStringDecodeErrorZ* arg_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_UntrustedStringDecodeErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_UntrustedStringDecodeErrorZ* orig_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_CResult_ChannelIdDecodeErrorZ_ok(int64_t o) {
        LDKChannelId o_conv;
        o_conv.inner = untag_ptr(o);
@@ -33853,6 +35608,130 @@ void  CS_LDK_C2Tuple__u832u16Z_free(int64_t _res) {
        C2Tuple__u832u16Z_free(_res_conv);
 }
 
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_ok(int64_t o) {
+       LDKBlindedPayInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedPayInfo_clone(&o_conv);
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* o_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedPayInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedPayInfoDecodeErrorZ _res_conv = *(LDKCResult_BlindedPayInfoDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedPayInfoDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* arg_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* orig_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_ok(int64_t o) {
+       LDKBlindedPaymentPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedPaymentPath_clone(&o_conv);
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_err() {
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedPaymentPathNoneZ_is_ok(int64_t o) {
+       LDKCResult_BlindedPaymentPathNoneZ* o_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedPaymentPathNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedPaymentPathNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedPaymentPathNoneZ _res_conv = *(LDKCResult_BlindedPaymentPathNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedPaymentPathNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedPaymentPathNoneZ_clone_ptr(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedPaymentPathNoneZ* arg_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedPaymentPathNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_clone(int64_t orig) {
+       LDKCResult_BlindedPaymentPathNoneZ* orig_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(orig);
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_CVec_PaymentForwardNodeZ_free(int64_tArray _res) {
+       LDKCVec_PaymentForwardNodeZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKPaymentForwardNode), "LDKCVec_PaymentForwardNodeZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKPaymentForwardNode _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
+       }
+       FREE(_res);
+       CVec_PaymentForwardNodeZ_free(_res_constr);
+}
+
 int64_t  CS_LDK_CResult_PaymentRelayDecodeErrorZ_ok(int64_t o) {
        LDKPaymentRelay o_conv;
        o_conv.inner = untag_ptr(o);
@@ -34176,196 +36055,155 @@ int64_t  CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_ok(jstring o) {
-       LDKStr o_conv = str_ref_to_owned_c(o);
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_ok(o_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKTxOut o_conv = *(LDKTxOut*)(o_ptr);
+       o_conv = TxOut_clone((LDKTxOut*)untag_ptr(o));
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_err(int32_t e) {
-       LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_cs(e);
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_err(e_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_err(int32_t e) {
+       LDKUtxoLookupError e_conv = LDKUtxoLookupError_from_cs(e);
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_StrSecp256k1ErrorZ_is_ok(int64_t o) {
-       LDKCResult_StrSecp256k1ErrorZ* o_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_StrSecp256k1ErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_TxOutUtxoLookupErrorZ_is_ok(int64_t o) {
+       LDKCResult_TxOutUtxoLookupErrorZ* o_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_TxOutUtxoLookupErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_StrSecp256k1ErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_TxOutUtxoLookupErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_StrSecp256k1ErrorZ _res_conv = *(LDKCResult_StrSecp256k1ErrorZ*)(_res_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ _res_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_StrSecp256k1ErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_StrSecp256k1ErrorZ_clone_ptr(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR arg) {
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_StrSecp256k1ErrorZ* arg_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_StrSecp256k1ErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_clone(int64_t orig) {
-       LDKCResult_StrSecp256k1ErrorZ* orig_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(orig);
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+       CResult_TxOutUtxoLookupErrorZ_free(_res_conv);
 }
 
-static inline uint64_t C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR arg) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(arg);
+static inline uint64_t CResult_TxOutUtxoLookupErrorZ_clone_ptr(LDKCResult_TxOutUtxoLookupErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(int64_t arg) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* arg_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(arg);
-       int64_t ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_TxOutUtxoLookupErrorZ* arg_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_TxOutUtxoLookupErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(int64_t orig) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* orig_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(orig);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(int8_tArray a, int64_t b, int64_t c) {
-       LDKThirtyTwoBytes a_ref;
-       CHECK(a->arr_len == 32);
-       memcpy(a_ref.data, a->elems, 32); FREE(a);
-       LDKRecipientOnionFields b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv = RecipientOnionFields_clone(&b_conv);
-       LDKRouteParameters c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = RouteParameters_clone(&c_conv);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(a_ref, b_conv, c_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone(int64_t orig) {
+       LDKCResult_TxOutUtxoLookupErrorZ* orig_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(orig);
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ _res_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(_res_conv);
-}
-
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ o_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(o_ptr);
-       o_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone((LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(o));
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(o_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_ok(int64_t o) {
+       LDKResponder o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Responder_clone(&o_conv);
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err() {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err();
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(int64_t o) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* o_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_ResponderDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_ResponderDecodeErrorZ* o_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ResponderDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(int64_t _res) {
+void  CS_LDK_CResult_ResponderDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ _res_conv = *(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)(_res_ptr);
+       LDKCResult_ResponderDecodeErrorZ _res_conv = *(LDKCResult_ResponderDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(_res_conv);
+       CResult_ResponderDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(arg);
+static inline uint64_t CResult_ResponderDecodeErrorZ_clone_ptr(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* arg_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_ResponderDecodeErrorZ* arg_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ResponderDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(int64_t orig) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* orig_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(orig);
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_ResponderDecodeErrorZ* orig_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_ok(int64_t o) {
+int64_t  CS_LDK_COption_MessageContextZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKTxOut o_conv = *(LDKTxOut*)(o_ptr);
-       o_conv = TxOut_clone((LDKTxOut*)untag_ptr(o));
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_err(int32_t e) {
-       LDKUtxoLookupError e_conv = LDKUtxoLookupError_from_cs(e);
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
+       LDKMessageContext o_conv = *(LDKMessageContext*)(o_ptr);
+       o_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(o));
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_CResult_TxOutUtxoLookupErrorZ_is_ok(int64_t o) {
-       LDKCResult_TxOutUtxoLookupErrorZ* o_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_TxOutUtxoLookupErrorZ_is_ok(o_conv);
-       return ret_conv;
+int64_t  CS_LDK_COption_MessageContextZ_none() {
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_CResult_TxOutUtxoLookupErrorZ_free(int64_t _res) {
+void  CS_LDK_COption_MessageContextZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ _res_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(_res_ptr);
+       LDKCOption_MessageContextZ _res_conv = *(LDKCOption_MessageContextZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_TxOutUtxoLookupErrorZ_free(_res_conv);
+       COption_MessageContextZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_TxOutUtxoLookupErrorZ_clone_ptr(LDKCResult_TxOutUtxoLookupErrorZ *NONNULL_PTR arg) {
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t COption_MessageContextZ_clone_ptr(LDKCOption_MessageContextZ *NONNULL_PTR arg) {
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_TxOutUtxoLookupErrorZ* arg_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_TxOutUtxoLookupErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_COption_MessageContextZ_clone_ptr(int64_t arg) {
+       LDKCOption_MessageContextZ* arg_conv = (LDKCOption_MessageContextZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_MessageContextZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone(int64_t orig) {
-       LDKCResult_TxOutUtxoLookupErrorZ* orig_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(orig);
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_COption_MessageContextZ_clone(int64_t orig) {
+       LDKCOption_MessageContextZ* orig_conv = (LDKCOption_MessageContextZ*)untag_ptr(orig);
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
 static inline uint64_t C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_clone_ptr(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR arg) {
@@ -34568,176 +36406,52 @@ int64_t  CS_LDK_CResult_SendSuccessSendErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_ok(int64_t o) {
-       LDKBlindedPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = BlindedPath_clone(&o_conv);
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_err() {
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_BlindedPathNoneZ_is_ok(int64_t o) {
-       LDKCResult_BlindedPathNoneZ* o_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_BlindedPathNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_BlindedPathNoneZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_BlindedPathNoneZ _res_conv = *(LDKCResult_BlindedPathNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_BlindedPathNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_BlindedPathNoneZ_clone_ptr(LDKCResult_BlindedPathNoneZ *NONNULL_PTR arg) {
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_BlindedPathNoneZ* arg_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_BlindedPathNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_clone(int64_t orig) {
-       LDKCResult_BlindedPathNoneZ* orig_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(orig);
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ o_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(o_ptr);
-       o_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err() {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
+int64_t  CS_LDK_CResult_NoneSendErrorZ_ok() {
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_ok();
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(int64_t o) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* o_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ _res_conv = *(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* arg_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(int64_t orig) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* orig_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_CVec_ForwardNodeZ_free(int64_tArray _res) {
-       LDKCVec_ForwardNodeZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKForwardNode), "LDKCVec_ForwardNodeZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t n = 0; n < _res_constr.datalen; n++) {
-               int64_t _res_conv_13 = _res_vals[n];
-               LDKForwardNode _res_conv_13_conv;
-               _res_conv_13_conv.inner = untag_ptr(_res_conv_13);
-               _res_conv_13_conv.is_owned = ptr_is_owned(_res_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_13_conv);
-               _res_constr.data[n] = _res_conv_13_conv;
-       }
-       FREE(_res);
-       CVec_ForwardNodeZ_free(_res_constr);
-}
-
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_ok(int64_t o) {
-       LDKBlindedPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = BlindedPath_clone(&o_conv);
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_NoneSendErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
-       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
-       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_err(e_conv);
+       LDKSendError e_conv = *(LDKSendError*)(e_ptr);
+       e_conv = SendError_clone((LDKSendError*)untag_ptr(e));
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_BlindedPathDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_BlindedPathDecodeErrorZ* o_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_BlindedPathDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_NoneSendErrorZ_is_ok(int64_t o) {
+       LDKCResult_NoneSendErrorZ* o_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneSendErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_BlindedPathDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_NoneSendErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_BlindedPathDecodeErrorZ _res_conv = *(LDKCResult_BlindedPathDecodeErrorZ*)(_res_ptr);
+       LDKCResult_NoneSendErrorZ _res_conv = *(LDKCResult_NoneSendErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_BlindedPathDecodeErrorZ_free(_res_conv);
+       CResult_NoneSendErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_BlindedPathDecodeErrorZ_clone_ptr(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_NoneSendErrorZ_clone_ptr(LDKCResult_NoneSendErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_BlindedPathDecodeErrorZ* arg_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_BlindedPathDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_NoneSendErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_NoneSendErrorZ* arg_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneSendErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_BlindedPathDecodeErrorZ* orig_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_NoneSendErrorZ_clone(int64_t orig) {
+       LDKCResult_NoneSendErrorZ* orig_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(orig);
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -34795,6 +36509,80 @@ int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+void  CS_LDK_CVec_PhantomRouteHintsZ_free(int64_tArray _res) {
+       LDKCVec_PhantomRouteHintsZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t t = 0; t < _res_constr.datalen; t++) {
+               int64_t _res_conv_19 = _res_vals[t];
+               LDKPhantomRouteHints _res_conv_19_conv;
+               _res_conv_19_conv.inner = untag_ptr(_res_conv_19);
+               _res_conv_19_conv.is_owned = ptr_is_owned(_res_conv_19);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
+               _res_constr.data[t] = _res_conv_19_conv;
+       }
+       FREE(_res);
+       CVec_PhantomRouteHintsZ_free(_res_constr);
+}
+
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(int64_t o) {
+       LDKBolt11Invoice o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Bolt11Invoice_clone(&o_conv);
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKSignOrCreationError e_conv = *(LDKSignOrCreationError*)(e_ptr);
+       e_conv = SignOrCreationError_clone((LDKSignOrCreationError*)untag_ptr(e));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(int64_t o) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ _res_conv = *(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_Bolt11InvoiceSignOrCreationErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(int64_t orig) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(orig);
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_InvoiceErrorDecodeErrorZ_ok(int64_t o) {
        LDKInvoiceError o_conv;
        o_conv.inner = untag_ptr(o);
@@ -35524,99 +37312,284 @@ void  CS_LDK_CVec_C2Tuple_OutPointChannelIdZZ_free(int64_tArray _res) {
        CVec_C2Tuple_OutPointChannelIdZZ_free(_res_constr);
 }
 
-void  CS_LDK_CVec_MonitorUpdateIdZ_free(int64_tArray _res) {
-       LDKCVec_MonitorUpdateIdZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKMonitorUpdateId), "LDKCVec_MonitorUpdateIdZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t r = 0; r < _res_constr.datalen; r++) {
-               int64_t _res_conv_17 = _res_vals[r];
-               LDKMonitorUpdateId _res_conv_17_conv;
-               _res_conv_17_conv.inner = untag_ptr(_res_conv_17);
-               _res_conv_17_conv.is_owned = ptr_is_owned(_res_conv_17);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_17_conv);
-               _res_constr.data[r] = _res_conv_17_conv;
-       }
-       FREE(_res);
-       CVec_MonitorUpdateIdZ_free(_res_constr);
-}
-
-static inline uint64_t C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-       *ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(arg);
+static inline uint64_t C2Tuple_OutPointCVec_u64ZZ_clone_ptr(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u64ZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(int64_t arg) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* arg_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* arg_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OutPointCVec_u64ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(int64_t orig) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* orig_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(orig);
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-       *ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_clone(int64_t orig) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* orig_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(orig);
+       LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u64ZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(int64_t a, int64_tArray b) {
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_new(int64_t a, int64_tArray b) {
        LDKOutPoint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
-       LDKCVec_MonitorUpdateIdZ b_constr;
+       LDKCVec_u64Z b_constr;
        b_constr.datalen = b->arr_len;
        if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKMonitorUpdateId), "LDKCVec_MonitorUpdateIdZ Elements");
+               b_constr.data = MALLOC(b_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
        else
                b_constr.data = NULL;
        int64_t* b_vals = b->elems;
-       for (size_t r = 0; r < b_constr.datalen; r++) {
-               int64_t b_conv_17 = b_vals[r];
-               LDKMonitorUpdateId b_conv_17_conv;
-               b_conv_17_conv.inner = untag_ptr(b_conv_17);
-               b_conv_17_conv.is_owned = ptr_is_owned(b_conv_17);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv_17_conv);
-               b_conv_17_conv = MonitorUpdateId_clone(&b_conv_17_conv);
-               b_constr.data[r] = b_conv_17_conv;
+       for (size_t g = 0; g < b_constr.datalen; g++) {
+               int64_t b_conv_6 = b_vals[g];
+               b_constr.data[g] = b_conv_6;
        }
        FREE(b);
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-       *ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(a_conv, b_constr);
+       LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u64ZZ_new(a_conv, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ _res_conv = *(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)(_res_ptr);
+       LDKC2Tuple_OutPointCVec_u64ZZ _res_conv = *(LDKC2Tuple_OutPointCVec_u64ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(_res_conv);
+       C2Tuple_OutPointCVec_u64ZZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free(int64_tArray _res) {
-       LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ _res_constr;
+void  CS_LDK_CVec_C2Tuple_OutPointCVec_u64ZZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_OutPointCVec_u64ZZZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKCVec_C2Tuple_OutPointCVec_u64ZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t p = 0; p < _res_constr.datalen; p++) {
-               int64_t _res_conv_41 = _res_vals[p];
-               void* _res_conv_41_ptr = untag_ptr(_res_conv_41);
-               CHECK_ACCESS(_res_conv_41_ptr);
-               LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ _res_conv_41_conv = *(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)(_res_conv_41_ptr);
-               FREE(untag_ptr(_res_conv_41));
-               _res_constr.data[p] = _res_conv_41_conv;
+       for (size_t d = 0; d < _res_constr.datalen; d++) {
+               int64_t _res_conv_29 = _res_vals[d];
+               void* _res_conv_29_ptr = untag_ptr(_res_conv_29);
+               CHECK_ACCESS(_res_conv_29_ptr);
+               LDKC2Tuple_OutPointCVec_u64ZZ _res_conv_29_conv = *(LDKC2Tuple_OutPointCVec_u64ZZ*)(_res_conv_29_ptr);
+               FREE(untag_ptr(_res_conv_29));
+               _res_constr.data[d] = _res_conv_29_conv;
        }
        FREE(_res);
-       CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free(_res_constr);
+       CVec_C2Tuple_OutPointCVec_u64ZZZ_free(_res_constr);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_ok(int64_t o) {
+       LDKBlindedMessagePath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedMessagePath_clone(&o_conv);
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* o_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedMessagePathDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedMessagePathDecodeErrorZ _res_conv = *(LDKCResult_BlindedMessagePathDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedMessagePathDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* arg_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* orig_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_ok(int64_t o) {
+       LDKBlindedMessagePath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedMessagePath_clone(&o_conv);
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_err() {
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedMessagePathNoneZ_is_ok(int64_t o) {
+       LDKCResult_BlindedMessagePathNoneZ* o_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedMessagePathNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedMessagePathNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedMessagePathNoneZ _res_conv = *(LDKCResult_BlindedMessagePathNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedMessagePathNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedMessagePathNoneZ_clone_ptr(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedMessagePathNoneZ* arg_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedMessagePathNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_clone(int64_t orig) {
+       LDKCResult_BlindedMessagePathNoneZ* orig_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(orig);
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKMessageContext o_conv = *(LDKMessageContext*)(o_ptr);
+       o_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(o));
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_MessageContextDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_MessageContextDecodeErrorZ* o_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_MessageContextDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_MessageContextDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_MessageContextDecodeErrorZ _res_conv = *(LDKCResult_MessageContextDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_MessageContextDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_MessageContextDecodeErrorZ_clone_ptr(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_MessageContextDecodeErrorZ* arg_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_MessageContextDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_MessageContextDecodeErrorZ* orig_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKOffersContext o_conv = *(LDKOffersContext*)(o_ptr);
+       o_conv = OffersContext_clone((LDKOffersContext*)untag_ptr(o));
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_OffersContextDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_OffersContextDecodeErrorZ* o_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_OffersContextDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_OffersContextDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_OffersContextDecodeErrorZ _res_conv = *(LDKCResult_OffersContextDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_OffersContextDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_OffersContextDecodeErrorZ_clone_ptr(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_OffersContextDecodeErrorZ* arg_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_OffersContextDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_OffersContextDecodeErrorZ* orig_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 void  CS_LDK_APIError_free(int64_t this_ptr) {
@@ -35838,6 +37811,29 @@ int64_t  CS_LDK_BigSize_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
+int8_tArray  CS_LDK_UntrustedString_write(int64_t obj) {
+       LDKUntrustedString obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UntrustedString_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_UntrustedString_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = UntrustedString_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
 void  CS_LDK_Hostname_free(int64_t this_obj) {
        LDKHostname this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -36069,7 +38065,7 @@ int64_t  CS_LDK_TransactionU16LenLimited_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_sign(int8_tArray msg, int8_tArray sk) {
+jstring  CS_LDK_sign(int8_tArray msg, int8_tArray sk) {
        LDKu8slice msg_ref;
        msg_ref.datalen = msg->arr_len;
        msg_ref.data = msg->elems;
@@ -36077,10 +38073,11 @@ int64_t  CS_LDK_sign(int8_tArray msg, int8_tArray sk) {
        CHECK(sk->arr_len == 32);
        memcpy(sk_arr, sk->elems, 32); FREE(sk);
        uint8_t (*sk_ref)[32] = &sk_arr;
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = sign(msg_ref, sk_ref);
+       LDKStr ret_str = sign(msg_ref, sk_ref);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        FREE(msg);
-       return tag_ptr(ret_conv, true);
+       return ret_conv;
 }
 
 int64_t  CS_LDK_recover_pk(int8_tArray msg, jstring sig) {
@@ -36107,31 +38104,6 @@ jboolean  CS_LDK_verify(int8_tArray msg, jstring sig, int8_tArray pk) {
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_construct_invoice_preimage(int8_tArray hrp_bytes, ptrArray data_without_signature) {
-       LDKu8slice hrp_bytes_ref;
-       hrp_bytes_ref.datalen = hrp_bytes->arr_len;
-       hrp_bytes_ref.data = hrp_bytes->elems;
-       LDKCVec_U5Z data_without_signature_constr;
-       data_without_signature_constr.datalen = data_without_signature->arr_len;
-       if (data_without_signature_constr.datalen > 0)
-               data_without_signature_constr.data = MALLOC(data_without_signature_constr.datalen * sizeof(LDKU5), "LDKCVec_U5Z Elements");
-       else
-               data_without_signature_constr.data = NULL;
-       int8_t* data_without_signature_vals = (void*) data_without_signature->elems;
-       for (size_t h = 0; h < data_without_signature_constr.datalen; h++) {
-               int8_t data_without_signature_conv_7 = data_without_signature_vals[h];
-               
-               data_without_signature_constr.data[h] = (LDKU5){ ._0 = data_without_signature_conv_7 };
-       }
-       FREE(data_without_signature);
-       LDKCVec_u8Z ret_var = construct_invoice_preimage(hrp_bytes_ref, data_without_signature_constr);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       FREE(hrp_bytes);
-       return ret_arr;
-}
-
 void  CS_LDK_KVStore_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -36185,7 +38157,7 @@ void  CS_LDK_MonitorUpdatingPersister_free(int64_t this_obj) {
        MonitorUpdatingPersister_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_MonitorUpdatingPersister_new(int64_t kv_store, int64_t logger, int64_t maximum_pending_updates, int64_t entropy_source, int64_t signer_provider) {
+int64_t  CS_LDK_MonitorUpdatingPersister_new(int64_t kv_store, int64_t logger, int64_t maximum_pending_updates, int64_t entropy_source, int64_t signer_provider, int64_t broadcaster, int64_t fee_estimator) {
        void* kv_store_ptr = untag_ptr(kv_store);
        CHECK_ACCESS(kv_store_ptr);
        LDKKVStore kv_store_conv = *(LDKKVStore*)(kv_store_ptr);
@@ -36214,45 +38186,47 @@ int64_t  CS_LDK_MonitorUpdatingPersister_new(int64_t kv_store, int64_t logger, i
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
        }
-       LDKMonitorUpdatingPersister ret_var = MonitorUpdatingPersister_new(kv_store_conv, logger_conv, maximum_pending_updates, entropy_source_conv, signer_provider_conv);
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       CHECK_ACCESS(broadcaster_ptr);
+       LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(broadcaster_ptr);
+       if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKBroadcasterInterface_JCalls_cloned(&broadcaster_conv);
+       }
+       void* fee_estimator_ptr = untag_ptr(fee_estimator);
+       CHECK_ACCESS(fee_estimator_ptr);
+       LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(fee_estimator_ptr);
+       if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKFeeEstimator_JCalls_cloned(&fee_estimator_conv);
+       }
+       LDKMonitorUpdatingPersister ret_var = MonitorUpdatingPersister_new(kv_store_conv, logger_conv, maximum_pending_updates, entropy_source_conv, signer_provider_conv, broadcaster_conv, fee_estimator_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_MonitorUpdatingPersister_read_all_channel_monitors_with_updates(int64_t this_arg, int64_t broadcaster, int64_t fee_estimator) {
+int64_t  CS_LDK_MonitorUpdatingPersister_read_all_channel_monitors_with_updates(int64_t this_arg) {
        LDKMonitorUpdatingPersister this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* broadcaster_ptr = untag_ptr(broadcaster);
-       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
-       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
-       void* fee_estimator_ptr = untag_ptr(fee_estimator);
-       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
-       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
        LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
-       *ret_conv = MonitorUpdatingPersister_read_all_channel_monitors_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv);
+       *ret_conv = MonitorUpdatingPersister_read_all_channel_monitors_with_updates(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_MonitorUpdatingPersister_read_channel_monitor_with_updates(int64_t this_arg, int64_t broadcaster, int64_t fee_estimator, jstring monitor_key) {
+int64_t  CS_LDK_MonitorUpdatingPersister_read_channel_monitor_with_updates(int64_t this_arg, jstring monitor_key) {
        LDKMonitorUpdatingPersister this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* broadcaster_ptr = untag_ptr(broadcaster);
-       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
-       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
-       void* fee_estimator_ptr = untag_ptr(fee_estimator);
-       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
-       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
        LDKStr monitor_key_conv = str_ref_to_owned_c(monitor_key);
        LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
-       *ret_conv = MonitorUpdatingPersister_read_channel_monitor_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv, monitor_key_conv);
+       *ret_conv = MonitorUpdatingPersister_read_channel_monitor_with_updates(&this_arg_conv, monitor_key_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -36327,186 +38301,6 @@ int64_t  CS_LDK_scid_from_parts(int64_t block, int64_t tx_index, int64_t vout_in
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_UntrustedString_free(int64_t this_obj) {
-       LDKUntrustedString this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UntrustedString_free(this_obj_conv);
-}
-
-jstring  CS_LDK_UntrustedString_get_a(int64_t this_ptr) {
-       LDKUntrustedString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr ret_str = UntrustedString_get_a(&this_ptr_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-void  CS_LDK_UntrustedString_set_a(int64_t this_ptr, jstring val) {
-       LDKUntrustedString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr val_conv = str_ref_to_owned_c(val);
-       UntrustedString_set_a(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_UntrustedString_new(jstring a_arg) {
-       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
-       LDKUntrustedString ret_var = UntrustedString_new(a_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t UntrustedString_clone_ptr(LDKUntrustedString *NONNULL_PTR arg) {
-       LDKUntrustedString ret_var = UntrustedString_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_UntrustedString_clone_ptr(int64_t arg) {
-       LDKUntrustedString arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = UntrustedString_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_UntrustedString_clone(int64_t orig) {
-       LDKUntrustedString orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKUntrustedString ret_var = UntrustedString_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_UntrustedString_eq(int64_t a, int64_t b) {
-       LDKUntrustedString a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKUntrustedString b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = UntrustedString_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_UntrustedString_hash(int64_t o) {
-       LDKUntrustedString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = UntrustedString_hash(&o_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_UntrustedString_write(int64_t obj) {
-       LDKUntrustedString obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UntrustedString_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_UntrustedString_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = UntrustedString_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-jstring  CS_LDK_UntrustedString_to_str(int64_t o) {
-       LDKUntrustedString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = UntrustedString_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-void  CS_LDK_PrintableString_free(int64_t this_obj) {
-       LDKPrintableString this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PrintableString_free(this_obj_conv);
-}
-
-jstring  CS_LDK_PrintableString_get_a(int64_t this_ptr) {
-       LDKPrintableString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr ret_str = PrintableString_get_a(&this_ptr_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-void  CS_LDK_PrintableString_set_a(int64_t this_ptr, jstring val) {
-       LDKPrintableString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr val_conv = str_ref_to_owned_c(val);
-       PrintableString_set_a(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_PrintableString_new(jstring a_arg) {
-       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
-       LDKPrintableString ret_var = PrintableString_new(a_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-jstring  CS_LDK_PrintableString_to_str(int64_t o) {
-       LDKPrintableString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = PrintableString_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
 void  CS_LDK_TrackedSpendableOutput_free(int64_t this_obj) {
        LDKTrackedSpendableOutput this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -37222,6 +39016,29 @@ int64_t  CS_LDK_Sleeper_from_two_futures(int64_t fut_a, int64_t fut_b) {
        return ret_ref;
 }
 
+int64_t  CS_LDK_Sleeper_from_three_futures(int64_t fut_a, int64_t fut_b, int64_t fut_c) {
+       LDKFuture fut_a_conv;
+       fut_a_conv.inner = untag_ptr(fut_a);
+       fut_a_conv.is_owned = ptr_is_owned(fut_a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fut_a_conv);
+       fut_a_conv.is_owned = false;
+       LDKFuture fut_b_conv;
+       fut_b_conv.inner = untag_ptr(fut_b);
+       fut_b_conv.is_owned = ptr_is_owned(fut_b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fut_b_conv);
+       fut_b_conv.is_owned = false;
+       LDKFuture fut_c_conv;
+       fut_c_conv.inner = untag_ptr(fut_c);
+       fut_c_conv.is_owned = ptr_is_owned(fut_c);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fut_c_conv);
+       fut_c_conv.is_owned = false;
+       LDKSleeper ret_var = Sleeper_from_three_futures(&fut_a_conv, &fut_b_conv, &fut_c_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 int64_t  CS_LDK_Sleeper_new(int64_tArray futures) {
        LDKCVec_FutureZ futures_constr;
        futures_constr.datalen = futures->arr_len;
@@ -37492,7 +39309,32 @@ void  CS_LDK_Record_set_line(int64_t this_ptr, int32_t val) {
        Record_set_line(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Record_new(int32_t level_arg, int8_tArray peer_id_arg, int64_t channel_id_arg, jstring args_arg, jstring module_path_arg, jstring file_arg, int32_t line_arg) {
+int64_t  CS_LDK_Record_get_payment_hash(int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = Record_get_payment_hash(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_Record_set_payment_hash(int64_t this_ptr, int64_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       Record_set_payment_hash(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_Record_new(int32_t level_arg, int8_tArray peer_id_arg, int64_t channel_id_arg, jstring args_arg, jstring module_path_arg, jstring file_arg, int32_t line_arg, int64_t payment_hash_arg) {
        LDKLevel level_arg_conv = LDKLevel_from_cs(level_arg);
        LDKPublicKey peer_id_arg_ref;
        CHECK(peer_id_arg->arr_len == 33);
@@ -37505,7 +39347,11 @@ int64_t  CS_LDK_Record_new(int32_t level_arg, int8_tArray peer_id_arg, int64_t c
        LDKStr args_arg_conv = str_ref_to_owned_c(args_arg);
        LDKStr module_path_arg_conv = str_ref_to_owned_c(module_path_arg);
        LDKStr file_arg_conv = str_ref_to_owned_c(file_arg);
-       LDKRecord ret_var = Record_new(level_arg_conv, peer_id_arg_ref, channel_id_arg_conv, args_arg_conv, module_path_arg_conv, file_arg_conv, line_arg);
+       void* payment_hash_arg_ptr = untag_ptr(payment_hash_arg);
+       CHECK_ACCESS(payment_hash_arg_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_arg_ptr);
+       payment_hash_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash_arg));
+       LDKRecord ret_var = Record_new(level_arg_conv, peer_id_arg_ref, channel_id_arg_conv, args_arg_conv, module_path_arg_conv, file_arg_conv, line_arg, payment_hash_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -37654,23 +39500,23 @@ void  CS_LDK_ChannelHandshakeConfig_set_negotiate_scid_privacy(int64_t this_ptr,
        ChannelHandshakeConfig_set_negotiate_scid_privacy(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_ChannelHandshakeConfig_get_announced_channel(int64_t this_ptr) {
+jboolean  CS_LDK_ChannelHandshakeConfig_get_announce_for_forwarding(int64_t this_ptr) {
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelHandshakeConfig_get_announced_channel(&this_ptr_conv);
+       jboolean ret_conv = ChannelHandshakeConfig_get_announce_for_forwarding(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelHandshakeConfig_set_announced_channel(int64_t this_ptr, jboolean val) {
+void  CS_LDK_ChannelHandshakeConfig_set_announce_for_forwarding(int64_t this_ptr, jboolean val) {
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelHandshakeConfig_set_announced_channel(&this_ptr_conv, val);
+       ChannelHandshakeConfig_set_announce_for_forwarding(&this_ptr_conv, val);
 }
 
 jboolean  CS_LDK_ChannelHandshakeConfig_get_commit_upfront_shutdown_pubkey(int64_t this_ptr) {
@@ -37749,8 +39595,8 @@ void  CS_LDK_ChannelHandshakeConfig_set_our_max_accepted_htlcs(int64_t this_ptr,
        ChannelHandshakeConfig_set_our_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelHandshakeConfig_new(int32_t minimum_depth_arg, int16_t our_to_self_delay_arg, int64_t our_htlc_minimum_msat_arg, int8_t max_inbound_htlc_value_in_flight_percent_of_channel_arg, jboolean negotiate_scid_privacy_arg, jboolean announced_channel_arg, jboolean commit_upfront_shutdown_pubkey_arg, int32_t their_channel_reserve_proportional_millionths_arg, jboolean negotiate_anchors_zero_fee_htlc_tx_arg, int16_t our_max_accepted_htlcs_arg) {
-       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg, max_inbound_htlc_value_in_flight_percent_of_channel_arg, negotiate_scid_privacy_arg, announced_channel_arg, commit_upfront_shutdown_pubkey_arg, their_channel_reserve_proportional_millionths_arg, negotiate_anchors_zero_fee_htlc_tx_arg, our_max_accepted_htlcs_arg);
+int64_t  CS_LDK_ChannelHandshakeConfig_new(int32_t minimum_depth_arg, int16_t our_to_self_delay_arg, int64_t our_htlc_minimum_msat_arg, int8_t max_inbound_htlc_value_in_flight_percent_of_channel_arg, jboolean negotiate_scid_privacy_arg, jboolean announce_for_forwarding_arg, jboolean commit_upfront_shutdown_pubkey_arg, int32_t their_channel_reserve_proportional_millionths_arg, jboolean negotiate_anchors_zero_fee_htlc_tx_arg, int16_t our_max_accepted_htlcs_arg) {
+       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg, max_inbound_htlc_value_in_flight_percent_of_channel_arg, negotiate_scid_privacy_arg, announce_for_forwarding_arg, commit_upfront_shutdown_pubkey_arg, their_channel_reserve_proportional_millionths_arg, negotiate_anchors_zero_fee_htlc_tx_arg, our_max_accepted_htlcs_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -38499,14 +40345,6 @@ int64_t  CS_LDK_ChannelConfigUpdate_new(int64_t forwarding_fee_proportional_mill
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelConfigUpdate_default() {
-       LDKChannelConfigUpdate ret_var = ChannelConfigUpdate_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
 void  CS_LDK_UserConfig_free(int64_t this_obj) {
        LDKUserConfig this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -38691,7 +40529,26 @@ void  CS_LDK_UserConfig_set_accept_mpp_keysend(int64_t this_ptr, jboolean val) {
        UserConfig_set_accept_mpp_keysend(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_UserConfig_new(int64_t channel_handshake_config_arg, int64_t channel_handshake_limits_arg, int64_t channel_config_arg, jboolean accept_forwards_to_priv_channels_arg, jboolean accept_inbound_channels_arg, jboolean manually_accept_inbound_channels_arg, jboolean accept_intercept_htlcs_arg, jboolean accept_mpp_keysend_arg) {
+jboolean  CS_LDK_UserConfig_get_manually_handle_bolt12_invoices(int64_t this_ptr) {
+       LDKUserConfig this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = UserConfig_get_manually_handle_bolt12_invoices(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_UserConfig_set_manually_handle_bolt12_invoices(int64_t this_ptr, jboolean val) {
+       LDKUserConfig this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       UserConfig_set_manually_handle_bolt12_invoices(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_UserConfig_new(int64_t channel_handshake_config_arg, int64_t channel_handshake_limits_arg, int64_t channel_config_arg, jboolean accept_forwards_to_priv_channels_arg, jboolean accept_inbound_channels_arg, jboolean manually_accept_inbound_channels_arg, jboolean accept_intercept_htlcs_arg, jboolean accept_mpp_keysend_arg, jboolean manually_handle_bolt12_invoices_arg) {
        LDKChannelHandshakeConfig channel_handshake_config_arg_conv;
        channel_handshake_config_arg_conv.inner = untag_ptr(channel_handshake_config_arg);
        channel_handshake_config_arg_conv.is_owned = ptr_is_owned(channel_handshake_config_arg);
@@ -38707,7 +40564,7 @@ int64_t  CS_LDK_UserConfig_new(int64_t channel_handshake_config_arg, int64_t cha
        channel_config_arg_conv.is_owned = ptr_is_owned(channel_config_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_config_arg_conv);
        channel_config_arg_conv = ChannelConfig_clone(&channel_config_arg_conv);
-       LDKUserConfig ret_var = UserConfig_new(channel_handshake_config_arg_conv, channel_handshake_limits_arg_conv, channel_config_arg_conv, accept_forwards_to_priv_channels_arg, accept_inbound_channels_arg, manually_accept_inbound_channels_arg, accept_intercept_htlcs_arg, accept_mpp_keysend_arg);
+       LDKUserConfig ret_var = UserConfig_new(channel_handshake_config_arg_conv, channel_handshake_limits_arg_conv, channel_config_arg_conv, accept_forwards_to_priv_channels_arg, accept_inbound_channels_arg, manually_accept_inbound_channels_arg, accept_intercept_htlcs_arg, accept_mpp_keysend_arg, manually_handle_bolt12_invoices_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -39141,8 +40998,13 @@ int32_t  CS_LDK_ConfirmationTarget_clone(int64_t orig) {
        return ret_conv;
 }
 
-int32_t  CS_LDK_ConfirmationTarget_on_chain_sweep() {
-       int32_t ret_conv = LDKConfirmationTarget_to_cs(ConfirmationTarget_on_chain_sweep());
+int32_t  CS_LDK_ConfirmationTarget_maximum_fee_estimate() {
+       int32_t ret_conv = LDKConfirmationTarget_to_cs(ConfirmationTarget_maximum_fee_estimate());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_ConfirmationTarget_urgent_on_chain_sweep() {
+       int32_t ret_conv = LDKConfirmationTarget_to_cs(ConfirmationTarget_urgent_on_chain_sweep());
        return ret_conv;
 }
 
@@ -39198,69 +41060,6 @@ void  CS_LDK_FeeEstimator_free(int64_t this_ptr) {
        FeeEstimator_free(this_ptr_conv);
 }
 
-void  CS_LDK_MonitorUpdateId_free(int64_t this_obj) {
-       LDKMonitorUpdateId this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MonitorUpdateId_free(this_obj_conv);
-}
-
-static inline uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg) {
-       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_MonitorUpdateId_clone_ptr(int64_t arg) {
-       LDKMonitorUpdateId arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = MonitorUpdateId_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_MonitorUpdateId_clone(int64_t orig) {
-       LDKMonitorUpdateId orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_MonitorUpdateId_hash(int64_t o) {
-       LDKMonitorUpdateId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = MonitorUpdateId_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_MonitorUpdateId_eq(int64_t a, int64_t b) {
-       LDKMonitorUpdateId a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKMonitorUpdateId b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = MonitorUpdateId_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
 void  CS_LDK_Persist_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -39413,14 +41212,14 @@ int64_tArray  CS_LDK_ChainMonitor_list_pending_monitor_updates(int64_t this_arg)
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ ret_var = ChainMonitor_list_pending_monitor_updates(&this_arg_conv);
+       LDKCVec_C2Tuple_OutPointCVec_u64ZZZ ret_var = ChainMonitor_list_pending_monitor_updates(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t p = 0; p < ret_var.datalen; p++) {
-               LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv_41_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-               *ret_conv_41_conv = ret_var.data[p];
-               ret_arr_ptr[p] = tag_ptr(ret_conv_41_conv, true);
+       for (size_t d = 0; d < ret_var.datalen; d++) {
+               LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv_29_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+               *ret_conv_29_conv = ret_var.data[d];
+               ret_arr_ptr[d] = tag_ptr(ret_conv_29_conv, true);
        }
        
        FREE(ret_var.data);
@@ -39438,13 +41237,8 @@ int64_t  CS_LDK_ChainMonitor_channel_monitor_updated(int64_t this_arg, int64_t f
        funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
-       LDKMonitorUpdateId completed_update_id_conv;
-       completed_update_id_conv.inner = untag_ptr(completed_update_id);
-       completed_update_id_conv.is_owned = ptr_is_owned(completed_update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(completed_update_id_conv);
-       completed_update_id_conv = MonitorUpdateId_clone(&completed_update_id_conv);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id_conv);
+       *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id);
        return tag_ptr(ret_conv, true);
 }
 
@@ -39852,6 +41646,39 @@ int64_t  CS_LDK_HTLCUpdate_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
+int32_t  CS_LDK_BalanceSource_clone(int64_t orig) {
+       LDKBalanceSource* orig_conv = (LDKBalanceSource*)untag_ptr(orig);
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_clone(orig_conv));
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_holder_force_closed() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_holder_force_closed());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_counterparty_force_closed() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_counterparty_force_closed());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_coop_close() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_coop_close());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_htlc() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_htlc());
+       return ret_conv;
+}
+
+jboolean  CS_LDK_BalanceSource_eq(int64_t a, int64_t b) {
+       LDKBalanceSource* a_conv = (LDKBalanceSource*)untag_ptr(a);
+       LDKBalanceSource* b_conv = (LDKBalanceSource*)untag_ptr(b);
+       jboolean ret_conv = BalanceSource_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_Balance_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -39881,16 +41708,17 @@ int64_t  CS_LDK_Balance_clone(int64_t orig) {
        return ret_ref;
 }
 
-int64_t  CS_LDK_Balance_claimable_on_channel_close(int64_t amount_satoshis) {
+int64_t  CS_LDK_Balance_claimable_on_channel_close(int64_t amount_satoshis, int64_t transaction_fee_satoshis, int64_t outbound_payment_htlc_rounded_msat, int64_t outbound_forwarded_htlc_rounded_msat, int64_t inbound_claiming_htlc_rounded_msat, int64_t inbound_htlc_rounded_msat) {
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
-       *ret_copy = Balance_claimable_on_channel_close(amount_satoshis);
+       *ret_copy = Balance_claimable_on_channel_close(amount_satoshis, transaction_fee_satoshis, outbound_payment_htlc_rounded_msat, outbound_forwarded_htlc_rounded_msat, inbound_claiming_htlc_rounded_msat, inbound_htlc_rounded_msat);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Balance_claimable_awaiting_confirmations(int64_t amount_satoshis, int32_t confirmation_height) {
+int64_t  CS_LDK_Balance_claimable_awaiting_confirmations(int64_t amount_satoshis, int32_t confirmation_height, int32_t source) {
+       LDKBalanceSource source_conv = LDKBalanceSource_from_cs(source);
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
-       *ret_copy = Balance_claimable_awaiting_confirmations(amount_satoshis, confirmation_height);
+       *ret_copy = Balance_claimable_awaiting_confirmations(amount_satoshis, confirmation_height, source_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -39908,12 +41736,12 @@ int64_t  CS_LDK_Balance_contentious_claimable(int64_t amount_satoshis, int32_t t
        return ret_ref;
 }
 
-int64_t  CS_LDK_Balance_maybe_timeout_claimable_htlc(int64_t amount_satoshis, int32_t claimable_height, int8_tArray payment_hash) {
+int64_t  CS_LDK_Balance_maybe_timeout_claimable_htlc(int64_t amount_satoshis, int32_t claimable_height, int8_tArray payment_hash, jboolean outbound_payment) {
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(payment_hash->arr_len == 32);
        memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
-       *ret_copy = Balance_maybe_timeout_claimable_htlc(amount_satoshis, claimable_height, payment_hash_ref);
+       *ret_copy = Balance_maybe_timeout_claimable_htlc(amount_satoshis, claimable_height, payment_hash_ref, outbound_payment);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -40114,7 +41942,7 @@ int64_tArray  CS_LDK_ChannelMonitor_get_and_clear_pending_monitor_events(int64_t
        return ret_arr;
 }
 
-void  CS_LDK_ChannelMonitor_process_pending_events(int64_t this_arg, int64_t handler) {
+int64_t  CS_LDK_ChannelMonitor_process_pending_events(int64_t this_arg, int64_t handler) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -40123,7 +41951,9 @@ void  CS_LDK_ChannelMonitor_process_pending_events(int64_t this_arg, int64_t han
        void* handler_ptr = untag_ptr(handler);
        if (ptr_is_owned(handler)) { CHECK_ACCESS(handler_ptr); }
        LDKEventHandler* handler_conv = (LDKEventHandler*)handler_ptr;
-       ChannelMonitor_process_pending_events(&this_arg_conv, handler_conv);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = ChannelMonitor_process_pending_events(&this_arg_conv, handler_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 int64_t  CS_LDK_ChannelMonitor_initial_counterparty_commitment_tx(int64_t this_arg) {
@@ -40485,6 +42315,16 @@ void  CS_LDK_ChannelMonitor_rebroadcast_pending_claims(int64_t this_arg, int64_t
        ChannelMonitor_rebroadcast_pending_claims(&this_arg_conv, broadcaster_conv, fee_estimator_conv, logger_conv);
 }
 
+jboolean  CS_LDK_ChannelMonitor_has_pending_claims(int64_t this_arg) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelMonitor_has_pending_claims(&this_arg_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_ChannelMonitor_signer_unblocked(int64_t this_arg, int64_t broadcaster, int64_t fee_estimator, int64_t logger) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -40888,11 +42728,19 @@ int64_t  CS_LDK_peel_payment_onion(int64_t msg, int64_t node_signer, int64_t log
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv.is_owned = false;
        void* node_signer_ptr = untag_ptr(node_signer);
-       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
-       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
        void* logger_ptr = untag_ptr(logger);
-       if (ptr_is_owned(logger)) { CHECK_ACCESS(logger_ptr); }
-       LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
        LDKCResult_PendingHTLCInfoInboundHTLCErrZ* ret_conv = MALLOC(sizeof(LDKCResult_PendingHTLCInfoInboundHTLCErrZ), "LDKCResult_PendingHTLCInfoInboundHTLCErrZ");
        *ret_conv = peel_payment_onion(&msg_conv, node_signer_conv, logger_conv, cur_height, accept_mpp_keysend, allow_skimmed_fees);
        return tag_ptr(ret_conv, true);
@@ -41069,12 +42917,38 @@ void  CS_LDK_BlindedForward_set_failure(int64_t this_ptr, int32_t val) {
        BlindedForward_set_failure(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_BlindedForward_new(int8_tArray inbound_blinding_point_arg, int32_t failure_arg) {
+int8_tArray  CS_LDK_BlindedForward_get_next_blinding_override(int64_t this_ptr) {
+       LDKBlindedForward this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedForward_get_next_blinding_override(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_BlindedForward_set_next_blinding_override(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedForward this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       BlindedForward_set_next_blinding_override(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_BlindedForward_new(int8_tArray inbound_blinding_point_arg, int32_t failure_arg, int8_tArray next_blinding_override_arg) {
        LDKPublicKey inbound_blinding_point_arg_ref;
        CHECK(inbound_blinding_point_arg->arr_len == 33);
        memcpy(inbound_blinding_point_arg_ref.compressed_form, inbound_blinding_point_arg->elems, 33); FREE(inbound_blinding_point_arg);
        LDKBlindedFailure failure_arg_conv = LDKBlindedFailure_from_cs(failure_arg);
-       LDKBlindedForward ret_var = BlindedForward_new(inbound_blinding_point_arg_ref, failure_arg_conv);
+       LDKPublicKey next_blinding_override_arg_ref;
+       CHECK(next_blinding_override_arg->arr_len == 33);
+       memcpy(next_blinding_override_arg_ref.compressed_form, next_blinding_override_arg->elems, 33); FREE(next_blinding_override_arg);
+       LDKBlindedForward ret_var = BlindedForward_new(inbound_blinding_point_arg_ref, failure_arg_conv, next_blinding_override_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -42042,7 +43916,7 @@ int64_t  CS_LDK_ChannelManager_close_channel_with_feerate_and_script(int64_t thi
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelManager_force_close_broadcasting_latest_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id) {
+int64_t  CS_LDK_ChannelManager_force_close_broadcasting_latest_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -42056,12 +43930,13 @@ int64_t  CS_LDK_ChannelManager_force_close_broadcasting_latest_txn(int64_t this_
        LDKPublicKey counterparty_node_id_ref;
        CHECK(counterparty_node_id->arr_len == 33);
        memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChannelManager_force_close_broadcasting_latest_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref);
+       *ret_conv = ChannelManager_force_close_broadcasting_latest_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref, error_message_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelManager_force_close_without_broadcasting_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id) {
+int64_t  CS_LDK_ChannelManager_force_close_without_broadcasting_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -42075,27 +43950,30 @@ int64_t  CS_LDK_ChannelManager_force_close_without_broadcasting_txn(int64_t this
        LDKPublicKey counterparty_node_id_ref;
        CHECK(counterparty_node_id->arr_len == 33);
        memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChannelManager_force_close_without_broadcasting_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref);
+       *ret_conv = ChannelManager_force_close_without_broadcasting_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref, error_message_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelManager_force_close_all_channels_broadcasting_latest_txn(int64_t this_arg) {
+void  CS_LDK_ChannelManager_force_close_all_channels_broadcasting_latest_txn(int64_t this_arg, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelManager_force_close_all_channels_broadcasting_latest_txn(&this_arg_conv);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
+       ChannelManager_force_close_all_channels_broadcasting_latest_txn(&this_arg_conv, error_message_conv);
 }
 
-void  CS_LDK_ChannelManager_force_close_all_channels_without_broadcasting_txn(int64_t this_arg) {
+void  CS_LDK_ChannelManager_force_close_all_channels_without_broadcasting_txn(int64_t this_arg, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelManager_force_close_all_channels_without_broadcasting_txn(&this_arg_conv);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
+       ChannelManager_force_close_all_channels_without_broadcasting_txn(&this_arg_conv, error_message_conv);
 }
 
 int64_t  CS_LDK_ChannelManager_send_payment_with_route(int64_t this_arg, int64_t route, int8_tArray payment_hash, int64_t recipient_onion, int8_tArray payment_id) {
@@ -42108,7 +43986,7 @@ int64_t  CS_LDK_ChannelManager_send_payment_with_route(int64_t this_arg, int64_t
        route_conv.inner = untag_ptr(route);
        route_conv.is_owned = ptr_is_owned(route);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
-       route_conv.is_owned = false;
+       route_conv = Route_clone(&route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(payment_hash->arr_len == 32);
        memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
@@ -42121,7 +43999,7 @@ int64_t  CS_LDK_ChannelManager_send_payment_with_route(int64_t this_arg, int64_t
        CHECK(payment_id->arr_len == 32);
        memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
        LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
-       *ret_conv = ChannelManager_send_payment_with_route(&this_arg_conv, &route_conv, payment_hash_ref, recipient_onion_conv, payment_id_ref);
+       *ret_conv = ChannelManager_send_payment_with_route(&this_arg_conv, route_conv, payment_hash_ref, recipient_onion_conv, payment_id_ref);
        return tag_ptr(ret_conv, true);
 }
 
@@ -42292,7 +44170,7 @@ int64_t  CS_LDK_ChannelManager_funding_transaction_generated(int64_t this_arg, i
        temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
        temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
-       temporary_channel_id_conv.is_owned = false;
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
        LDKPublicKey counterparty_node_id_ref;
        CHECK(counterparty_node_id->arr_len == 33);
        memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
@@ -42302,7 +44180,31 @@ int64_t  CS_LDK_ChannelManager_funding_transaction_generated(int64_t this_arg, i
        memcpy(funding_transaction_ref.data, funding_transaction->elems, funding_transaction_ref.datalen); FREE(funding_transaction);
        funding_transaction_ref.data_is_owned = true;
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChannelManager_funding_transaction_generated(&this_arg_conv, &temporary_channel_id_conv, counterparty_node_id_ref, funding_transaction_ref);
+       *ret_conv = ChannelManager_funding_transaction_generated(&this_arg_conv, temporary_channel_id_conv, counterparty_node_id_ref, funding_transaction_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_ChannelManager_unsafe_manual_funding_transaction_generated(int64_t this_arg, int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelId temporary_channel_id_conv;
+       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
+       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKOutPoint funding_conv;
+       funding_conv.inner = untag_ptr(funding);
+       funding_conv.is_owned = ptr_is_owned(funding);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_conv);
+       funding_conv = OutPoint_clone(&funding_conv);
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = ChannelManager_unsafe_manual_funding_transaction_generated(&this_arg_conv, temporary_channel_id_conv, counterparty_node_id_ref, funding_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -42573,14 +44475,18 @@ int64_t  CS_LDK_ChannelManager_accept_inbound_channel_from_trusted_peer_0conf(in
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelManager_create_offer_builder(int64_t this_arg) {
+int64_t  CS_LDK_ChannelManager_create_offer_builder(int64_t this_arg, int64_t absolute_expiry) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
+       void* absolute_expiry_ptr = untag_ptr(absolute_expiry);
+       CHECK_ACCESS(absolute_expiry_ptr);
+       LDKCOption_u64Z absolute_expiry_conv = *(LDKCOption_u64Z*)(absolute_expiry_ptr);
+       absolute_expiry_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(absolute_expiry));
        LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ");
-       *ret_conv = ChannelManager_create_offer_builder(&this_arg_conv);
+       *ret_conv = ChannelManager_create_offer_builder(&this_arg_conv, absolute_expiry_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -42919,6 +44825,17 @@ int64_t  CS_LDK_ChannelManager_as_OffersMessageHandler(int64_t this_arg) {
        return tag_ptr(ret_ret, true);
 }
 
+int64_t  CS_LDK_ChannelManager_as_AsyncPaymentsMessageHandler(int64_t this_arg) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAsyncPaymentsMessageHandler* ret_ret = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler), "LDKAsyncPaymentsMessageHandler");
+       *ret_ret = ChannelManager_as_AsyncPaymentsMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
 int64_t  CS_LDK_ChannelManager_as_NodeIdLookUp(int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -45721,23 +47638,23 @@ void  CS_LDK_ChannelDetails_set_is_usable(int64_t this_ptr, jboolean val) {
        ChannelDetails_set_is_usable(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_ChannelDetails_get_is_public(int64_t this_ptr) {
+jboolean  CS_LDK_ChannelDetails_get_is_announced(int64_t this_ptr) {
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelDetails_get_is_public(&this_ptr_conv);
+       jboolean ret_conv = ChannelDetails_get_is_announced(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelDetails_set_is_public(int64_t this_ptr, jboolean val) {
+void  CS_LDK_ChannelDetails_set_is_announced(int64_t this_ptr, jboolean val) {
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelDetails_set_is_public(&this_ptr_conv, val);
+       ChannelDetails_set_is_announced(&this_ptr_conv, val);
 }
 
 int64_t  CS_LDK_ChannelDetails_get_inbound_htlc_minimum_msat(int64_t this_ptr) {
@@ -45913,7 +47830,7 @@ void  CS_LDK_ChannelDetails_set_pending_outbound_htlcs(int64_t this_ptr, int64_t
        ChannelDetails_set_pending_outbound_htlcs(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_arg, int64_t funding_txo_arg, int64_t channel_type_arg, int64_t short_channel_id_arg, int64_t outbound_scid_alias_arg, int64_t inbound_scid_alias_arg, int64_t channel_value_satoshis_arg, int64_t unspendable_punishment_reserve_arg, int8_tArray user_channel_id_arg, int64_t feerate_sat_per_1000_weight_arg, int64_t balance_msat_arg, int64_t outbound_capacity_msat_arg, int64_t next_outbound_htlc_limit_msat_arg, int64_t next_outbound_htlc_minimum_msat_arg, int64_t inbound_capacity_msat_arg, int64_t confirmations_required_arg, int64_t confirmations_arg, int64_t force_close_spend_delay_arg, jboolean is_outbound_arg, jboolean is_channel_ready_arg, int64_t channel_shutdown_state_arg, jboolean is_usable_arg, jboolean is_public_arg, int64_t inbound_htlc_minimum_msat_arg, int64_t inbound_htlc_maximum_msat_arg, int64_t config_arg, int64_tArray pending_inbound_htlcs_arg, int64_tArray pending_outbound_htlcs_arg) {
+int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_arg, int64_t funding_txo_arg, int64_t channel_type_arg, int64_t short_channel_id_arg, int64_t outbound_scid_alias_arg, int64_t inbound_scid_alias_arg, int64_t channel_value_satoshis_arg, int64_t unspendable_punishment_reserve_arg, int8_tArray user_channel_id_arg, int64_t feerate_sat_per_1000_weight_arg, int64_t balance_msat_arg, int64_t outbound_capacity_msat_arg, int64_t next_outbound_htlc_limit_msat_arg, int64_t next_outbound_htlc_minimum_msat_arg, int64_t inbound_capacity_msat_arg, int64_t confirmations_required_arg, int64_t confirmations_arg, int64_t force_close_spend_delay_arg, jboolean is_outbound_arg, jboolean is_channel_ready_arg, int64_t channel_shutdown_state_arg, jboolean is_usable_arg, jboolean is_announced_arg, int64_t inbound_htlc_minimum_msat_arg, int64_t inbound_htlc_maximum_msat_arg, int64_t config_arg, int64_tArray pending_inbound_htlcs_arg, int64_tArray pending_outbound_htlcs_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -45949,6 +47866,7 @@ int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_
        void* unspendable_punishment_reserve_arg_ptr = untag_ptr(unspendable_punishment_reserve_arg);
        CHECK_ACCESS(unspendable_punishment_reserve_arg_ptr);
        LDKCOption_u64Z unspendable_punishment_reserve_arg_conv = *(LDKCOption_u64Z*)(unspendable_punishment_reserve_arg_ptr);
+       unspendable_punishment_reserve_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(unspendable_punishment_reserve_arg));
        LDKU128 user_channel_id_arg_ref;
        CHECK(user_channel_id_arg->arr_len == 16);
        memcpy(user_channel_id_arg_ref.le_bytes, user_channel_id_arg->elems, 16); FREE(user_channel_id_arg);
@@ -46019,7 +47937,7 @@ int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_
                pending_outbound_htlcs_arg_constr.data[v] = pending_outbound_htlcs_arg_conv_21_conv;
        }
        FREE(pending_outbound_htlcs_arg);
-       LDKChannelDetails ret_var = ChannelDetails_new(channel_id_arg_conv, counterparty_arg_conv, funding_txo_arg_conv, channel_type_arg_conv, short_channel_id_arg_conv, outbound_scid_alias_arg_conv, inbound_scid_alias_arg_conv, channel_value_satoshis_arg, unspendable_punishment_reserve_arg_conv, user_channel_id_arg_ref, feerate_sat_per_1000_weight_arg_conv, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg_conv, confirmations_arg_conv, force_close_spend_delay_arg_conv, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg_conv, is_usable_arg, is_public_arg, inbound_htlc_minimum_msat_arg_conv, inbound_htlc_maximum_msat_arg_conv, config_arg_conv, pending_inbound_htlcs_arg_constr, pending_outbound_htlcs_arg_constr);
+       LDKChannelDetails ret_var = ChannelDetails_new(channel_id_arg_conv, counterparty_arg_conv, funding_txo_arg_conv, channel_type_arg_conv, short_channel_id_arg_conv, outbound_scid_alias_arg_conv, inbound_scid_alias_arg_conv, channel_value_satoshis_arg, unspendable_punishment_reserve_arg_conv, user_channel_id_arg_ref, feerate_sat_per_1000_weight_arg_conv, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg_conv, confirmations_arg_conv, force_close_spend_delay_arg_conv, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg_conv, is_usable_arg, is_announced_arg, inbound_htlc_minimum_msat_arg_conv, inbound_htlc_maximum_msat_arg_conv, config_arg_conv, pending_inbound_htlcs_arg_constr, pending_outbound_htlcs_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -46421,6 +48339,7 @@ int64_t  CS_LDK_Init_new(int64_t features_arg, int64_t networks_arg, int64_t rem
        void* remote_network_address_arg_ptr = untag_ptr(remote_network_address_arg);
        CHECK_ACCESS(remote_network_address_arg_ptr);
        LDKCOption_SocketAddressZ remote_network_address_arg_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_arg_ptr);
+       remote_network_address_arg_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(remote_network_address_arg));
        LDKInit ret_var = Init_new(features_arg_conv, networks_arg_conv, remote_network_address_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
@@ -47432,6 +49351,204 @@ jboolean  CS_LDK_CommonOpenChannelFields_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
+int64_t  CS_LDK_CommonOpenChannelFields_channel_parameters(int64_t this_arg) {
+       LDKCommonOpenChannelFields this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelParameters ret_var = CommonOpenChannelFields_channel_parameters(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ChannelParameters_free(int64_t this_obj) {
+       LDKChannelParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelParameters_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_ChannelParameters_get_dust_limit_satoshis(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_get_dust_limit_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_dust_limit_satoshis(int64_t this_ptr, int64_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_dust_limit_satoshis(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelParameters_get_max_htlc_value_in_flight_msat(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_max_htlc_value_in_flight_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelParameters_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_htlc_minimum_msat(&this_ptr_conv, val);
+}
+
+int32_t  CS_LDK_ChannelParameters_get_commitment_feerate_sat_per_1000_weight(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = ChannelParameters_get_commitment_feerate_sat_per_1000_weight(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_commitment_feerate_sat_per_1000_weight(int64_t this_ptr, int32_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_commitment_feerate_sat_per_1000_weight(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_ChannelParameters_get_to_self_delay(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelParameters_get_to_self_delay(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_to_self_delay(int64_t this_ptr, int16_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_to_self_delay(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_ChannelParameters_get_max_accepted_htlcs(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelParameters_get_max_accepted_htlcs(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_max_accepted_htlcs(int64_t this_ptr, int16_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_max_accepted_htlcs(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelParameters_new(int64_t dust_limit_satoshis_arg, int64_t max_htlc_value_in_flight_msat_arg, int64_t htlc_minimum_msat_arg, int32_t commitment_feerate_sat_per_1000_weight_arg, int16_t to_self_delay_arg, int16_t max_accepted_htlcs_arg) {
+       LDKChannelParameters ret_var = ChannelParameters_new(dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, htlc_minimum_msat_arg, commitment_feerate_sat_per_1000_weight_arg, to_self_delay_arg, max_accepted_htlcs_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ChannelParameters_clone_ptr(LDKChannelParameters *NONNULL_PTR arg) {
+       LDKChannelParameters ret_var = ChannelParameters_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ChannelParameters_clone_ptr(int64_t arg) {
+       LDKChannelParameters arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelParameters_clone(int64_t orig) {
+       LDKChannelParameters orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKChannelParameters ret_var = ChannelParameters_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ChannelParameters_hash(int64_t o) {
+       LDKChannelParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelParameters_eq(int64_t a, int64_t b) {
+       LDKChannelParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_OpenChannel_free(int64_t this_obj) {
        LDKOpenChannel this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -49059,29 +51176,29 @@ jboolean  CS_LDK_Stfu_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
-void  CS_LDK_Splice_free(int64_t this_obj) {
-       LDKSplice this_obj_conv;
+void  CS_LDK_SpliceInit_free(int64_t this_obj) {
+       LDKSpliceInit this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Splice_free(this_obj_conv);
+       SpliceInit_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Splice_get_channel_id(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int64_t  CS_LDK_SpliceInit_get_channel_id(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelId ret_var = Splice_get_channel_id(&this_ptr_conv);
+       LDKChannelId ret_var = SpliceInit_get_channel_id(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Splice_set_channel_id(int64_t this_ptr, int64_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_channel_id(int64_t this_ptr, int64_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -49091,173 +51208,168 @@ void  CS_LDK_Splice_set_channel_id(int64_t this_ptr, int64_t val) {
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelId_clone(&val_conv);
-       Splice_set_channel_id(&this_ptr_conv, val_conv);
+       SpliceInit_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_Splice_get_chain_hash(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int64_t  CS_LDK_SpliceInit_get_funding_contribution_satoshis(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *Splice_get_chain_hash(&this_ptr_conv), 32);
-       return ret_arr;
+       int64_t ret_conv = SpliceInit_get_funding_contribution_satoshis(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Splice_set_chain_hash(int64_t this_ptr, int8_tArray val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_funding_contribution_satoshis(int64_t this_ptr, int64_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       Splice_set_chain_hash(&this_ptr_conv, val_ref);
+       SpliceInit_set_funding_contribution_satoshis(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Splice_get_relative_satoshis(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int32_t  CS_LDK_SpliceInit_get_funding_feerate_perkw(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = Splice_get_relative_satoshis(&this_ptr_conv);
+       int32_t ret_conv = SpliceInit_get_funding_feerate_perkw(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Splice_set_relative_satoshis(int64_t this_ptr, int64_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_funding_feerate_perkw(int64_t this_ptr, int32_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Splice_set_relative_satoshis(&this_ptr_conv, val);
+       SpliceInit_set_funding_feerate_perkw(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_Splice_get_funding_feerate_perkw(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int32_t  CS_LDK_SpliceInit_get_locktime(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = Splice_get_funding_feerate_perkw(&this_ptr_conv);
+       int32_t ret_conv = SpliceInit_get_locktime(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Splice_set_funding_feerate_perkw(int64_t this_ptr, int32_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_locktime(int64_t this_ptr, int32_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Splice_set_funding_feerate_perkw(&this_ptr_conv, val);
+       SpliceInit_set_locktime(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_Splice_get_locktime(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int8_tArray  CS_LDK_SpliceInit_get_funding_pubkey(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = Splice_get_locktime(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, SpliceInit_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_Splice_set_locktime(int64_t this_ptr, int32_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_funding_pubkey(int64_t this_ptr, int8_tArray val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Splice_set_locktime(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       SpliceInit_set_funding_pubkey(&this_ptr_conv, val_ref);
 }
 
-int8_tArray  CS_LDK_Splice_get_funding_pubkey(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int32_t  CS_LDK_SpliceInit_get_require_confirmed_inputs(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Splice_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       int32_t ret_conv = LDKCOption_NoneZ_to_cs(SpliceInit_get_require_confirmed_inputs(&this_ptr_conv));
+       return ret_conv;
 }
 
-void  CS_LDK_Splice_set_funding_pubkey(int64_t this_ptr, int8_tArray val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_require_confirmed_inputs(int64_t this_ptr, int32_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       Splice_set_funding_pubkey(&this_ptr_conv, val_ref);
+       LDKCOption_NoneZ val_conv = LDKCOption_NoneZ_from_cs(val);
+       SpliceInit_set_require_confirmed_inputs(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Splice_new(int64_t channel_id_arg, int8_tArray chain_hash_arg, int64_t relative_satoshis_arg, int32_t funding_feerate_perkw_arg, int32_t locktime_arg, int8_tArray funding_pubkey_arg) {
+int64_t  CS_LDK_SpliceInit_new(int64_t channel_id_arg, int64_t funding_contribution_satoshis_arg, int32_t funding_feerate_perkw_arg, int32_t locktime_arg, int8_tArray funding_pubkey_arg, int32_t require_confirmed_inputs_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
        channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKThirtyTwoBytes chain_hash_arg_ref;
-       CHECK(chain_hash_arg->arr_len == 32);
-       memcpy(chain_hash_arg_ref.data, chain_hash_arg->elems, 32); FREE(chain_hash_arg);
        LDKPublicKey funding_pubkey_arg_ref;
        CHECK(funding_pubkey_arg->arr_len == 33);
        memcpy(funding_pubkey_arg_ref.compressed_form, funding_pubkey_arg->elems, 33); FREE(funding_pubkey_arg);
-       LDKSplice ret_var = Splice_new(channel_id_arg_conv, chain_hash_arg_ref, relative_satoshis_arg, funding_feerate_perkw_arg, locktime_arg, funding_pubkey_arg_ref);
+       LDKCOption_NoneZ require_confirmed_inputs_arg_conv = LDKCOption_NoneZ_from_cs(require_confirmed_inputs_arg);
+       LDKSpliceInit ret_var = SpliceInit_new(channel_id_arg_conv, funding_contribution_satoshis_arg, funding_feerate_perkw_arg, locktime_arg, funding_pubkey_arg_ref, require_confirmed_inputs_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Splice_clone_ptr(LDKSplice *NONNULL_PTR arg) {
-       LDKSplice ret_var = Splice_clone(arg);
+static inline uint64_t SpliceInit_clone_ptr(LDKSpliceInit *NONNULL_PTR arg) {
+       LDKSpliceInit ret_var = SpliceInit_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Splice_clone_ptr(int64_t arg) {
-       LDKSplice arg_conv;
+int64_t  CS_LDK_SpliceInit_clone_ptr(int64_t arg) {
+       LDKSpliceInit arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Splice_clone_ptr(&arg_conv);
+       int64_t ret_conv = SpliceInit_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Splice_clone(int64_t orig) {
-       LDKSplice orig_conv;
+int64_t  CS_LDK_SpliceInit_clone(int64_t orig) {
+       LDKSpliceInit orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKSplice ret_var = Splice_clone(&orig_conv);
+       LDKSpliceInit ret_var = SpliceInit_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Splice_eq(int64_t a, int64_t b) {
-       LDKSplice a_conv;
+jboolean  CS_LDK_SpliceInit_eq(int64_t a, int64_t b) {
+       LDKSpliceInit a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKSplice b_conv;
+       LDKSpliceInit b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Splice_eq(&a_conv, &b_conv);
+       jboolean ret_conv = SpliceInit_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
@@ -49296,46 +51408,23 @@ void  CS_LDK_SpliceAck_set_channel_id(int64_t this_ptr, int64_t val) {
        SpliceAck_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_SpliceAck_get_chain_hash(int64_t this_ptr) {
-       LDKSpliceAck this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *SpliceAck_get_chain_hash(&this_ptr_conv), 32);
-       return ret_arr;
-}
-
-void  CS_LDK_SpliceAck_set_chain_hash(int64_t this_ptr, int8_tArray val) {
-       LDKSpliceAck this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       SpliceAck_set_chain_hash(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_SpliceAck_get_relative_satoshis(int64_t this_ptr) {
+int64_t  CS_LDK_SpliceAck_get_funding_contribution_satoshis(int64_t this_ptr) {
        LDKSpliceAck this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = SpliceAck_get_relative_satoshis(&this_ptr_conv);
+       int64_t ret_conv = SpliceAck_get_funding_contribution_satoshis(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_SpliceAck_set_relative_satoshis(int64_t this_ptr, int64_t val) {
+void  CS_LDK_SpliceAck_set_funding_contribution_satoshis(int64_t this_ptr, int64_t val) {
        LDKSpliceAck this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       SpliceAck_set_relative_satoshis(&this_ptr_conv, val);
+       SpliceAck_set_funding_contribution_satoshis(&this_ptr_conv, val);
 }
 
 int8_tArray  CS_LDK_SpliceAck_get_funding_pubkey(int64_t this_ptr) {
@@ -49361,19 +51450,37 @@ void  CS_LDK_SpliceAck_set_funding_pubkey(int64_t this_ptr, int8_tArray val) {
        SpliceAck_set_funding_pubkey(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_SpliceAck_new(int64_t channel_id_arg, int8_tArray chain_hash_arg, int64_t relative_satoshis_arg, int8_tArray funding_pubkey_arg) {
+int32_t  CS_LDK_SpliceAck_get_require_confirmed_inputs(int64_t this_ptr) {
+       LDKSpliceAck this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = LDKCOption_NoneZ_to_cs(SpliceAck_get_require_confirmed_inputs(&this_ptr_conv));
+       return ret_conv;
+}
+
+void  CS_LDK_SpliceAck_set_require_confirmed_inputs(int64_t this_ptr, int32_t val) {
+       LDKSpliceAck this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_NoneZ val_conv = LDKCOption_NoneZ_from_cs(val);
+       SpliceAck_set_require_confirmed_inputs(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_SpliceAck_new(int64_t channel_id_arg, int64_t funding_contribution_satoshis_arg, int8_tArray funding_pubkey_arg, int32_t require_confirmed_inputs_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
        channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKThirtyTwoBytes chain_hash_arg_ref;
-       CHECK(chain_hash_arg->arr_len == 32);
-       memcpy(chain_hash_arg_ref.data, chain_hash_arg->elems, 32); FREE(chain_hash_arg);
        LDKPublicKey funding_pubkey_arg_ref;
        CHECK(funding_pubkey_arg->arr_len == 33);
        memcpy(funding_pubkey_arg_ref.compressed_form, funding_pubkey_arg->elems, 33); FREE(funding_pubkey_arg);
-       LDKSpliceAck ret_var = SpliceAck_new(channel_id_arg_conv, chain_hash_arg_ref, relative_satoshis_arg, funding_pubkey_arg_ref);
+       LDKCOption_NoneZ require_confirmed_inputs_arg_conv = LDKCOption_NoneZ_from_cs(require_confirmed_inputs_arg);
+       LDKSpliceAck ret_var = SpliceAck_new(channel_id_arg_conv, funding_contribution_satoshis_arg, funding_pubkey_arg_ref, require_confirmed_inputs_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -49460,13 +51567,39 @@ void  CS_LDK_SpliceLocked_set_channel_id(int64_t this_ptr, int64_t val) {
        SpliceLocked_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_SpliceLocked_new(int64_t channel_id_arg) {
+int8_tArray  CS_LDK_SpliceLocked_get_splice_txid(int64_t this_ptr) {
+       LDKSpliceLocked this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *SpliceLocked_get_splice_txid(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_SpliceLocked_set_splice_txid(int64_t this_ptr, int8_tArray val) {
+       LDKSpliceLocked this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       SpliceLocked_set_splice_txid(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_SpliceLocked_new(int64_t channel_id_arg, int8_tArray splice_txid_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
        channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKSpliceLocked ret_var = SpliceLocked_new(channel_id_arg_conv);
+       LDKThirtyTwoBytes splice_txid_arg_ref;
+       CHECK(splice_txid_arg->arr_len == 32);
+       memcpy(splice_txid_arg_ref.data, splice_txid_arg->elems, 32); FREE(splice_txid_arg);
+       LDKSpliceLocked ret_var = SpliceLocked_new(channel_id_arg_conv, splice_txid_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -49637,7 +51770,32 @@ void  CS_LDK_TxAddInput_set_sequence(int64_t this_ptr, int32_t val) {
        TxAddInput_set_sequence(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_TxAddInput_new(int64_t channel_id_arg, int64_t serial_id_arg, int64_t prevtx_arg, int32_t prevtx_out_arg, int32_t sequence_arg) {
+int64_t  CS_LDK_TxAddInput_get_shared_input_txid(int64_t this_ptr) {
+       LDKTxAddInput this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = TxAddInput_get_shared_input_txid(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_TxAddInput_set_shared_input_txid(int64_t this_ptr, int64_t val) {
+       LDKTxAddInput this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       TxAddInput_set_shared_input_txid(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_TxAddInput_new(int64_t channel_id_arg, int64_t serial_id_arg, int64_t prevtx_arg, int32_t prevtx_out_arg, int32_t sequence_arg, int64_t shared_input_txid_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -49648,7 +51806,11 @@ int64_t  CS_LDK_TxAddInput_new(int64_t channel_id_arg, int64_t serial_id_arg, in
        prevtx_arg_conv.is_owned = ptr_is_owned(prevtx_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(prevtx_arg_conv);
        prevtx_arg_conv = TransactionU16LenLimited_clone(&prevtx_arg_conv);
-       LDKTxAddInput ret_var = TxAddInput_new(channel_id_arg_conv, serial_id_arg, prevtx_arg_conv, prevtx_out_arg, sequence_arg);
+       void* shared_input_txid_arg_ptr = untag_ptr(shared_input_txid_arg);
+       CHECK_ACCESS(shared_input_txid_arg_ptr);
+       LDKCOption_ThirtyTwoBytesZ shared_input_txid_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(shared_input_txid_arg_ptr);
+       shared_input_txid_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(shared_input_txid_arg));
+       LDKTxAddInput ret_var = TxAddInput_new(channel_id_arg_conv, serial_id_arg, prevtx_arg_conv, prevtx_out_arg, sequence_arg, shared_input_txid_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -50334,19 +52496,19 @@ void  CS_LDK_TxSignatures_set_witnesses(int64_t this_ptr, ptrArray val) {
        TxSignatures_set_witnesses(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_TxSignatures_get_funding_outpoint_sig(int64_t this_ptr) {
+int64_t  CS_LDK_TxSignatures_get_shared_input_signature(int64_t this_ptr) {
        LDKTxSignatures this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        LDKCOption_ECDSASignatureZ *ret_copy = MALLOC(sizeof(LDKCOption_ECDSASignatureZ), "LDKCOption_ECDSASignatureZ");
-       *ret_copy = TxSignatures_get_funding_outpoint_sig(&this_ptr_conv);
+       *ret_copy = TxSignatures_get_shared_input_signature(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_TxSignatures_set_funding_outpoint_sig(int64_t this_ptr, int64_t val) {
+void  CS_LDK_TxSignatures_set_shared_input_signature(int64_t this_ptr, int64_t val) {
        LDKTxSignatures this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
@@ -50356,10 +52518,10 @@ void  CS_LDK_TxSignatures_set_funding_outpoint_sig(int64_t this_ptr, int64_t val
        CHECK_ACCESS(val_ptr);
        LDKCOption_ECDSASignatureZ val_conv = *(LDKCOption_ECDSASignatureZ*)(val_ptr);
        val_conv = COption_ECDSASignatureZ_clone((LDKCOption_ECDSASignatureZ*)untag_ptr(val));
-       TxSignatures_set_funding_outpoint_sig(&this_ptr_conv, val_conv);
+       TxSignatures_set_shared_input_signature(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_TxSignatures_new(int64_t channel_id_arg, int8_tArray tx_hash_arg, ptrArray witnesses_arg, int64_t funding_outpoint_sig_arg) {
+int64_t  CS_LDK_TxSignatures_new(int64_t channel_id_arg, int8_tArray tx_hash_arg, ptrArray witnesses_arg, int64_t shared_input_signature_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -50385,11 +52547,11 @@ int64_t  CS_LDK_TxSignatures_new(int64_t channel_id_arg, int8_tArray tx_hash_arg
                witnesses_arg_constr.data[i] = witnesses_arg_conv_8_ref;
        }
        FREE(witnesses_arg);
-       void* funding_outpoint_sig_arg_ptr = untag_ptr(funding_outpoint_sig_arg);
-       CHECK_ACCESS(funding_outpoint_sig_arg_ptr);
-       LDKCOption_ECDSASignatureZ funding_outpoint_sig_arg_conv = *(LDKCOption_ECDSASignatureZ*)(funding_outpoint_sig_arg_ptr);
-       funding_outpoint_sig_arg_conv = COption_ECDSASignatureZ_clone((LDKCOption_ECDSASignatureZ*)untag_ptr(funding_outpoint_sig_arg));
-       LDKTxSignatures ret_var = TxSignatures_new(channel_id_arg_conv, tx_hash_arg_ref, witnesses_arg_constr, funding_outpoint_sig_arg_conv);
+       void* shared_input_signature_arg_ptr = untag_ptr(shared_input_signature_arg);
+       CHECK_ACCESS(shared_input_signature_arg_ptr);
+       LDKCOption_ECDSASignatureZ shared_input_signature_arg_conv = *(LDKCOption_ECDSASignatureZ*)(shared_input_signature_arg_ptr);
+       shared_input_signature_arg_conv = COption_ECDSASignatureZ_clone((LDKCOption_ECDSASignatureZ*)untag_ptr(shared_input_signature_arg));
+       LDKTxSignatures ret_var = TxSignatures_new(channel_id_arg_conv, tx_hash_arg_ref, witnesses_arg_constr, shared_input_signature_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -52095,6 +54257,122 @@ jboolean  CS_LDK_UpdateFailMalformedHTLC_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
+void  CS_LDK_CommitmentSignedBatch_free(int64_t this_obj) {
+       LDKCommitmentSignedBatch this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       CommitmentSignedBatch_free(this_obj_conv);
+}
+
+int16_t  CS_LDK_CommitmentSignedBatch_get_batch_size(int64_t this_ptr) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = CommitmentSignedBatch_get_batch_size(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CommitmentSignedBatch_set_batch_size(int64_t this_ptr, int16_t val) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       CommitmentSignedBatch_set_batch_size(&this_ptr_conv, val);
+}
+
+int8_tArray  CS_LDK_CommitmentSignedBatch_get_funding_txid(int64_t this_ptr) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *CommitmentSignedBatch_get_funding_txid(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_CommitmentSignedBatch_set_funding_txid(int64_t this_ptr, int8_tArray val) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       CommitmentSignedBatch_set_funding_txid(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_new(int16_t batch_size_arg, int8_tArray funding_txid_arg) {
+       LDKThirtyTwoBytes funding_txid_arg_ref;
+       CHECK(funding_txid_arg->arr_len == 32);
+       memcpy(funding_txid_arg_ref.data, funding_txid_arg->elems, 32); FREE(funding_txid_arg);
+       LDKCommitmentSignedBatch ret_var = CommitmentSignedBatch_new(batch_size_arg, funding_txid_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t CommitmentSignedBatch_clone_ptr(LDKCommitmentSignedBatch *NONNULL_PTR arg) {
+       LDKCommitmentSignedBatch ret_var = CommitmentSignedBatch_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_CommitmentSignedBatch_clone_ptr(int64_t arg) {
+       LDKCommitmentSignedBatch arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = CommitmentSignedBatch_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_clone(int64_t orig) {
+       LDKCommitmentSignedBatch orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKCommitmentSignedBatch ret_var = CommitmentSignedBatch_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_hash(int64_t o) {
+       LDKCommitmentSignedBatch o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = CommitmentSignedBatch_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_CommitmentSignedBatch_eq(int64_t a, int64_t b) {
+       LDKCommitmentSignedBatch a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKCommitmentSignedBatch b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = CommitmentSignedBatch_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_CommitmentSigned_free(int64_t this_obj) {
        LDKCommitmentSigned this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -52197,7 +54475,34 @@ void  CS_LDK_CommitmentSigned_set_htlc_signatures(int64_t this_ptr, ptrArray val
        CommitmentSigned_set_htlc_signatures(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_CommitmentSigned_new(int64_t channel_id_arg, int8_tArray signature_arg, ptrArray htlc_signatures_arg) {
+int64_t  CS_LDK_CommitmentSigned_get_batch(int64_t this_ptr) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCommitmentSignedBatch ret_var = CommitmentSigned_get_batch(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_CommitmentSigned_set_batch(int64_t this_ptr, int64_t val) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCommitmentSignedBatch val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = CommitmentSignedBatch_clone(&val_conv);
+       CommitmentSigned_set_batch(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_CommitmentSigned_new(int64_t channel_id_arg, int8_tArray signature_arg, ptrArray htlc_signatures_arg, int64_t batch_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -52221,7 +54526,12 @@ int64_t  CS_LDK_CommitmentSigned_new(int64_t channel_id_arg, int8_tArray signatu
                htlc_signatures_arg_constr.data[i] = htlc_signatures_arg_conv_8_ref;
        }
        FREE(htlc_signatures_arg);
-       LDKCommitmentSigned ret_var = CommitmentSigned_new(channel_id_arg_conv, signature_arg_ref, htlc_signatures_arg_constr);
+       LDKCommitmentSignedBatch batch_arg_conv;
+       batch_arg_conv.inner = untag_ptr(batch_arg);
+       batch_arg_conv.is_owned = ptr_is_owned(batch_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(batch_arg_conv);
+       batch_arg_conv = CommitmentSignedBatch_clone(&batch_arg_conv);
+       LDKCommitmentSigned ret_var = CommitmentSigned_new(channel_id_arg_conv, signature_arg_ref, htlc_signatures_arg_constr, batch_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -53472,6 +55782,7 @@ int64_t  CS_LDK_UnsignedNodeAnnouncement_new(int64_t features_arg, int32_t times
                void* addresses_arg_conv_15_ptr = untag_ptr(addresses_arg_conv_15);
                CHECK_ACCESS(addresses_arg_conv_15_ptr);
                LDKSocketAddress addresses_arg_conv_15_conv = *(LDKSocketAddress*)(addresses_arg_conv_15_ptr);
+               addresses_arg_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_arg_conv_15));
                addresses_arg_constr.data[p] = addresses_arg_conv_15_conv;
        }
        FREE(addresses_arg);
@@ -54256,23 +56567,42 @@ void  CS_LDK_UnsignedChannelUpdate_set_timestamp(int64_t this_ptr, int32_t val)
        UnsignedChannelUpdate_set_timestamp(&this_ptr_conv, val);
 }
 
-int8_t  CS_LDK_UnsignedChannelUpdate_get_flags(int64_t this_ptr) {
+int8_t  CS_LDK_UnsignedChannelUpdate_get_message_flags(int64_t this_ptr) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = UnsignedChannelUpdate_get_message_flags(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_UnsignedChannelUpdate_set_message_flags(int64_t this_ptr, int8_t val) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       UnsignedChannelUpdate_set_message_flags(&this_ptr_conv, val);
+}
+
+int8_t  CS_LDK_UnsignedChannelUpdate_get_channel_flags(int64_t this_ptr) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_t ret_conv = UnsignedChannelUpdate_get_flags(&this_ptr_conv);
+       int8_t ret_conv = UnsignedChannelUpdate_get_channel_flags(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_UnsignedChannelUpdate_set_flags(int64_t this_ptr, int8_t val) {
+void  CS_LDK_UnsignedChannelUpdate_set_channel_flags(int64_t this_ptr, int8_t val) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       UnsignedChannelUpdate_set_flags(&this_ptr_conv, val);
+       UnsignedChannelUpdate_set_channel_flags(&this_ptr_conv, val);
 }
 
 int16_t  CS_LDK_UnsignedChannelUpdate_get_cltv_expiry_delta(int64_t this_ptr) {
@@ -54396,7 +56726,7 @@ void  CS_LDK_UnsignedChannelUpdate_set_excess_data(int64_t this_ptr, int8_tArray
        UnsignedChannelUpdate_set_excess_data(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_UnsignedChannelUpdate_new(int8_tArray chain_hash_arg, int64_t short_channel_id_arg, int32_t timestamp_arg, int8_t flags_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int8_tArray excess_data_arg) {
+int64_t  CS_LDK_UnsignedChannelUpdate_new(int8_tArray chain_hash_arg, int64_t short_channel_id_arg, int32_t timestamp_arg, int8_t message_flags_arg, int8_t channel_flags_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int8_tArray excess_data_arg) {
        LDKThirtyTwoBytes chain_hash_arg_ref;
        CHECK(chain_hash_arg->arr_len == 32);
        memcpy(chain_hash_arg_ref.data, chain_hash_arg->elems, 32); FREE(chain_hash_arg);
@@ -54404,7 +56734,7 @@ int64_t  CS_LDK_UnsignedChannelUpdate_new(int8_tArray chain_hash_arg, int64_t sh
        excess_data_arg_ref.datalen = excess_data_arg->arr_len;
        excess_data_arg_ref.data = MALLOC(excess_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
        memcpy(excess_data_arg_ref.data, excess_data_arg->elems, excess_data_arg_ref.datalen); FREE(excess_data_arg);
-       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_new(chain_hash_arg_ref, short_channel_id_arg, timestamp_arg, flags_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fee_base_msat_arg, fee_proportional_millionths_arg, excess_data_arg_ref);
+       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_new(chain_hash_arg_ref, short_channel_id_arg, timestamp_arg, message_flags_arg, channel_flags_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fee_base_msat_arg, fee_proportional_millionths_arg, excess_data_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -56444,25 +58774,25 @@ int64_t  CS_LDK_Stfu_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_Splice_write(int64_t obj) {
-       LDKSplice obj_conv;
+int8_tArray  CS_LDK_SpliceInit_write(int64_t obj) {
+       LDKSpliceInit obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Splice_write(&obj_conv);
+       LDKCVec_u8Z ret_var = SpliceInit_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Splice_read(int8_tArray ser) {
+int64_t  CS_LDK_SpliceInit_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = Splice_read(ser_ref);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = SpliceInit_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
@@ -56812,6 +59142,29 @@ int64_t  CS_LDK_ClosingSignedFeeRange_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
+int8_tArray  CS_LDK_CommitmentSignedBatch_write(int64_t obj) {
+       LDKCommitmentSignedBatch obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = CommitmentSignedBatch_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CommitmentSignedBatch_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
 int8_tArray  CS_LDK_CommitmentSigned_write(int64_t obj) {
        LDKCommitmentSigned obj_conv;
        obj_conv.inner = untag_ptr(obj);
@@ -57583,17 +59936,6 @@ int64_t  CS_LDK_IgnoringMessageHandler_new() {
        return ret_ref;
 }
 
-int64_t  CS_LDK_IgnoringMessageHandler_as_EventsProvider(int64_t this_arg) {
-       LDKIgnoringMessageHandler this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
-       *ret_ret = IgnoringMessageHandler_as_EventsProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
 int64_t  CS_LDK_IgnoringMessageHandler_as_MessageSendEventsProvider(int64_t this_arg) {
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -57638,6 +59980,17 @@ int64_t  CS_LDK_IgnoringMessageHandler_as_OffersMessageHandler(int64_t this_arg)
        return tag_ptr(ret_ret, true);
 }
 
+int64_t  CS_LDK_IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(int64_t this_arg) {
+       LDKIgnoringMessageHandler this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAsyncPaymentsMessageHandler* ret_ret = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler), "LDKAsyncPaymentsMessageHandler");
+       *ret_ret = IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
 int64_t  CS_LDK_IgnoringMessageHandler_as_CustomOnionMessageHandler(int64_t this_arg) {
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -58001,6 +60354,7 @@ int64_t  CS_LDK_PeerDetails_new(int8_tArray counterparty_node_id_arg, int64_t so
        void* socket_address_arg_ptr = untag_ptr(socket_address_arg);
        CHECK_ACCESS(socket_address_arg_ptr);
        LDKCOption_SocketAddressZ socket_address_arg_conv = *(LDKCOption_SocketAddressZ*)(socket_address_arg_ptr);
+       socket_address_arg_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(socket_address_arg));
        LDKInitFeatures init_features_arg_conv;
        init_features_arg_conv.inner = untag_ptr(init_features_arg);
        init_features_arg_conv.is_owned = ptr_is_owned(init_features_arg);
@@ -58168,6 +60522,7 @@ int64_t  CS_LDK_PeerManager_new_outbound_connection(int64_t this_arg, int8_tArra
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
        LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
+       remote_network_address_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(remote_network_address));
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = PeerManager_new_outbound_connection(&this_arg_conv, their_node_id_ref, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -58189,6 +60544,7 @@ int64_t  CS_LDK_PeerManager_new_inbound_connection(int64_t this_arg, int64_t des
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
        LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
+       remote_network_address_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(remote_network_address));
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = PeerManager_new_inbound_connection(&this_arg_conv, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -58301,6 +60657,7 @@ void  CS_LDK_PeerManager_broadcast_node_announcement(int64_t this_arg, int8_tArr
                void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
                CHECK_ACCESS(addresses_conv_15_ptr);
                LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
+               addresses_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_conv_15));
                addresses_constr.data[p] = addresses_conv_15_conv;
        }
        FREE(addresses);
@@ -59278,6 +61635,16 @@ jboolean  CS_LDK_HTLCOutputInCommitment_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
+int64_t  CS_LDK_HTLCOutputInCommitment_to_bitcoin_amount(int64_t this_arg) {
+       LDKHTLCOutputInCommitment this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = HTLCOutputInCommitment_to_bitcoin_amount(&this_arg_conv);
+       return ret_conv;
+}
+
 int8_tArray  CS_LDK_HTLCOutputInCommitment_write(int64_t obj) {
        LDKHTLCOutputInCommitment obj_conv;
        obj_conv.inner = untag_ptr(obj);
@@ -60784,7752 +63151,8407 @@ int64_t  CS_LDK_get_commitment_transaction_number_obscure_factor(int8_tArray bro
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_eq(int64_t a, int64_t b) {
-       LDKInitFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKInitFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_InitFeatures_write(int64_t obj) {
+       LDKInitFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_eq(int64_t a, int64_t b) {
-       LDKNodeFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKNodeFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_InitFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
+       *ret_conv = InitFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelFeatures_eq(int64_t a, int64_t b) {
-       LDKChannelFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_ChannelFeatures_write(int64_t obj) {
+       LDKChannelFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_eq(int64_t a, int64_t b) {
-       LDKBolt11InvoiceFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt11InvoiceFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_ChannelFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
+       *ret_conv = ChannelFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_OfferFeatures_eq(int64_t a, int64_t b) {
-       LDKOfferFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKOfferFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = OfferFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_NodeFeatures_write(int64_t obj) {
+       LDKNodeFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InvoiceRequestFeatures_eq(int64_t a, int64_t b) {
-       LDKInvoiceRequestFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKInvoiceRequestFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_NodeFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
+       *ret_conv = NodeFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_Bolt12InvoiceFeatures_eq(int64_t a, int64_t b) {
-       LDKBolt12InvoiceFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Bolt11InvoiceFeatures_write(int64_t obj) {
+       LDKBolt11InvoiceFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt11InvoiceFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_BlindedHopFeatures_eq(int64_t a, int64_t b) {
-       LDKBlindedHopFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedHopFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedHopFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ");
+       *ret_conv = Bolt11InvoiceFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_eq(int64_t a, int64_t b) {
-       LDKChannelTypeFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelTypeFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Bolt12InvoiceFeatures_write(int64_t obj) {
+       LDKBolt12InvoiceFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12InvoiceFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
-       LDKInitFeatures ret_var = InitFeatures_clone(arg);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ");
+       *ret_conv = Bolt12InvoiceFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_BlindedHopFeatures_write(int64_t obj) {
+       LDKBlindedHopFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHopFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedHopFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedHopFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopFeaturesDecodeErrorZ), "LDKCResult_BlindedHopFeaturesDecodeErrorZ");
+       *ret_conv = BlindedHopFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_ChannelTypeFeatures_write(int64_t obj) {
+       LDKChannelTypeFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelTypeFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelTypeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTypeFeaturesDecodeErrorZ), "LDKCResult_ChannelTypeFeaturesDecodeErrorZ");
+       *ret_conv = ChannelTypeFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_ShutdownScript_free(int64_t this_obj) {
+       LDKShutdownScript this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ShutdownScript_free(this_obj_conv);
+}
+
+static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
+       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InitFeatures_clone_ptr(int64_t arg) {
-       LDKInitFeatures arg_conv;
+int64_t  CS_LDK_ShutdownScript_clone_ptr(int64_t arg) {
+       LDKShutdownScript arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InitFeatures_clone_ptr(&arg_conv);
+       int64_t ret_conv = ShutdownScript_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InitFeatures_clone(int64_t orig) {
-       LDKInitFeatures orig_conv;
+int64_t  CS_LDK_ShutdownScript_clone(int64_t orig) {
+       LDKShutdownScript orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
+       LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
-       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_NodeFeatures_clone_ptr(int64_t arg) {
-       LDKNodeFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = NodeFeatures_clone_ptr(&arg_conv);
+jboolean  CS_LDK_ShutdownScript_eq(int64_t a, int64_t b) {
+       LDKShutdownScript a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKShutdownScript b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ShutdownScript_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_clone(int64_t orig) {
-       LDKNodeFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
+void  CS_LDK_InvalidShutdownScript_free(int64_t this_obj) {
+       LDKInvalidShutdownScript this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvalidShutdownScript_free(this_obj_conv);
+}
+
+int8_tArray  CS_LDK_InvalidShutdownScript_get_script(int64_t this_ptr) {
+       LDKInvalidShutdownScript this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+void  CS_LDK_InvalidShutdownScript_set_script(int64_t this_ptr, int8_tArray val) {
+       LDKInvalidShutdownScript this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = val->arr_len;
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
+       InvalidShutdownScript_set_script(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_InvalidShutdownScript_new(int8_tArray script_arg) {
+       LDKCVec_u8Z script_arg_ref;
+       script_arg_ref.datalen = script_arg->arr_len;
+       script_arg_ref.data = MALLOC(script_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(script_arg_ref.data, script_arg->elems, script_arg_ref.datalen); FREE(script_arg);
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_new(script_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
-       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
+static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelFeatures_clone_ptr(int64_t arg) {
-       LDKChannelFeatures arg_conv;
+int64_t  CS_LDK_InvalidShutdownScript_clone_ptr(int64_t arg) {
+       LDKInvalidShutdownScript arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelFeatures_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvalidShutdownScript_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelFeatures_clone(int64_t orig) {
-       LDKChannelFeatures orig_conv;
+int64_t  CS_LDK_InvalidShutdownScript_clone(int64_t orig) {
+       LDKInvalidShutdownScript orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt11InvoiceFeatures_clone_ptr(LDKBolt11InvoiceFeatures *NONNULL_PTR arg) {
-       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_ShutdownScript_write(int64_t obj) {
+       LDKShutdownScript obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
-int64_t  CS_LDK_Bolt11InvoiceFeatures_clone_ptr(int64_t arg) {
-       LDKBolt11InvoiceFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt11InvoiceFeatures_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_t  CS_LDK_ShutdownScript_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
+       *ret_conv = ShutdownScript_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_clone(int64_t orig) {
-       LDKBolt11InvoiceFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ShutdownScript_new_p2wpkh(int8_tArray pubkey_hash) {
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       LDKShutdownScript ret_var = ShutdownScript_new_p2wpkh(pubkey_hash_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t OfferFeatures_clone_ptr(LDKOfferFeatures *NONNULL_PTR arg) {
-       LDKOfferFeatures ret_var = OfferFeatures_clone(arg);
+int64_t  CS_LDK_ShutdownScript_new_p2wsh(int8_tArray script_hash) {
+       uint8_t script_hash_arr[32];
+       CHECK(script_hash->arr_len == 32);
+       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
+       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
+       LDKShutdownScript ret_var = ShutdownScript_new_p2wsh(script_hash_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_OfferFeatures_clone_ptr(int64_t arg) {
-       LDKOfferFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OfferFeatures_clone_ptr(&arg_conv);
+
+int64_t  CS_LDK_ShutdownScript_new_witness_program(int64_t witness_program) {
+       void* witness_program_ptr = untag_ptr(witness_program);
+       CHECK_ACCESS(witness_program_ptr);
+       LDKWitnessProgram witness_program_conv = *(LDKWitnessProgram*)(witness_program_ptr);
+       witness_program_conv = WitnessProgram_clone((LDKWitnessProgram*)untag_ptr(witness_program));
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
+       *ret_conv = ShutdownScript_new_witness_program(witness_program_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_ShutdownScript_into_inner(int64_t this_arg) {
+       LDKShutdownScript this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = ShutdownScript_clone(&this_arg_conv);
+       LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_ShutdownScript_as_legacy_pubkey(int64_t this_arg) {
+       LDKShutdownScript this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+jboolean  CS_LDK_ShutdownScript_is_compatible(int64_t this_arg, int64_t features) {
+       LDKShutdownScript this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInitFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv.is_owned = false;
+       jboolean ret_conv = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_clone(int64_t orig) {
-       LDKOfferFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOfferFeatures ret_var = OfferFeatures_clone(&orig_conv);
+jstring  CS_LDK_ShutdownScript_to_str(int64_t o) {
+       LDKShutdownScript o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = ShutdownScript_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelId_free(int64_t this_obj) {
+       LDKChannelId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelId_free(this_obj_conv);
+}
+
+int8_tArray  CS_LDK_ChannelId_get_a(int64_t this_ptr) {
+       LDKChannelId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ChannelId_get_a(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_ChannelId_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKChannelId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ChannelId_set_a(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_ChannelId_new(int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK(a_arg->arr_len == 32);
+       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
+       LDKChannelId ret_var = ChannelId_new(a_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t InvoiceRequestFeatures_clone_ptr(LDKInvoiceRequestFeatures *NONNULL_PTR arg) {
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(arg);
+static inline uint64_t ChannelId_clone_ptr(LDKChannelId *NONNULL_PTR arg) {
+       LDKChannelId ret_var = ChannelId_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InvoiceRequestFeatures_clone_ptr(int64_t arg) {
-       LDKInvoiceRequestFeatures arg_conv;
+int64_t  CS_LDK_ChannelId_clone_ptr(int64_t arg) {
+       LDKChannelId arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequestFeatures_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelId_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_clone(int64_t orig) {
-       LDKInvoiceRequestFeatures orig_conv;
+int64_t  CS_LDK_ChannelId_clone(int64_t orig) {
+       LDKChannelId orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(&orig_conv);
+       LDKChannelId ret_var = ChannelId_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt12InvoiceFeatures_clone_ptr(LDKBolt12InvoiceFeatures *NONNULL_PTR arg) {
-       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(arg);
+jboolean  CS_LDK_ChannelId_eq(int64_t a, int64_t b) {
+       LDKChannelId a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelId b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelId_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelId_hash(int64_t o) {
+       LDKChannelId o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelId_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelId_v1_from_funding_txid(int8_tArray txid, int16_t output_index) {
+       uint8_t txid_arr[32];
+       CHECK(txid->arr_len == 32);
+       memcpy(txid_arr, txid->elems, 32); FREE(txid);
+       uint8_t (*txid_ref)[32] = &txid_arr;
+       LDKChannelId ret_var = ChannelId_v1_from_funding_txid(txid_ref, output_index);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12InvoiceFeatures_clone_ptr(int64_t arg) {
-       LDKBolt12InvoiceFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12InvoiceFeatures_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_clone(int64_t orig) {
-       LDKBolt12InvoiceFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ChannelId_v1_from_funding_outpoint(int64_t outpoint) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       LDKChannelId ret_var = ChannelId_v1_from_funding_outpoint(outpoint_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedHopFeatures_clone_ptr(LDKBlindedHopFeatures *NONNULL_PTR arg) {
-       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(arg);
+int64_t  CS_LDK_ChannelId_temporary_from_entropy_source(int64_t entropy_source) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       LDKChannelId ret_var = ChannelId_temporary_from_entropy_source(entropy_source_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedHopFeatures_clone_ptr(int64_t arg) {
-       LDKBlindedHopFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedHopFeatures_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_BlindedHopFeatures_clone(int64_t orig) {
-       LDKBlindedHopFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ChannelId_from_bytes(int8_tArray data) {
+       LDKThirtyTwoBytes data_ref;
+       CHECK(data->arr_len == 32);
+       memcpy(data_ref.data, data->elems, 32); FREE(data);
+       LDKChannelId ret_var = ChannelId_from_bytes(data_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelTypeFeatures_clone_ptr(LDKChannelTypeFeatures *NONNULL_PTR arg) {
-       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(arg);
+int64_t  CS_LDK_ChannelId_new_zero() {
+       LDKChannelId ret_var = ChannelId_new_zero();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelTypeFeatures_clone_ptr(int64_t arg) {
-       LDKChannelTypeFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelTypeFeatures_clone_ptr(&arg_conv);
+
+jboolean  CS_LDK_ChannelId_is_zero(int64_t this_arg) {
+       LDKChannelId this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelId_is_zero(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_clone(int64_t orig) {
-       LDKChannelTypeFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ChannelId_v2_from_revocation_basepoints(int64_t ours, int64_t theirs) {
+       LDKRevocationBasepoint ours_conv;
+       ours_conv.inner = untag_ptr(ours);
+       ours_conv.is_owned = ptr_is_owned(ours);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ours_conv);
+       ours_conv.is_owned = false;
+       LDKRevocationBasepoint theirs_conv;
+       theirs_conv.inner = untag_ptr(theirs);
+       theirs_conv.is_owned = ptr_is_owned(theirs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(theirs_conv);
+       theirs_conv.is_owned = false;
+       LDKChannelId ret_var = ChannelId_v2_from_revocation_basepoints(&ours_conv, &theirs_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InitFeatures_hash(int64_t o) {
-       LDKInitFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = InitFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ChannelId_temporary_v2_from_revocation_basepoint(int64_t our_revocation_basepoint) {
+       LDKRevocationBasepoint our_revocation_basepoint_conv;
+       our_revocation_basepoint_conv.inner = untag_ptr(our_revocation_basepoint);
+       our_revocation_basepoint_conv.is_owned = ptr_is_owned(our_revocation_basepoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(our_revocation_basepoint_conv);
+       our_revocation_basepoint_conv.is_owned = false;
+       LDKChannelId ret_var = ChannelId_temporary_v2_from_revocation_basepoint(&our_revocation_basepoint_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NodeFeatures_hash(int64_t o) {
-       LDKNodeFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = NodeFeatures_hash(&o_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_ChannelId_write(int64_t obj) {
+       LDKChannelId obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelId_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelFeatures_hash(int64_t o) {
-       LDKChannelFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = ChannelFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ChannelId_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelIdDecodeErrorZ), "LDKCResult_ChannelIdDecodeErrorZ");
+       *ret_conv = ChannelId_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_hash(int64_t o) {
-       LDKBolt11InvoiceFeatures o_conv;
+jstring  CS_LDK_ChannelId_to_str(int64_t o) {
+       LDKChannelId o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Bolt11InvoiceFeatures_hash(&o_conv);
+       LDKStr ret_str = ChannelId_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_hash(int64_t o) {
-       LDKOfferFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = OfferFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_phantom_invoice(int64_t amt_msat, int64_t payment_hash, jstring description, int32_t invoice_expiry_delta_secs, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
+       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
+       if (phantom_route_hints_constr.datalen > 0)
+               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
+       else
+               phantom_route_hints_constr.data = NULL;
+       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
+       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
+               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
+               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
+               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
+               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
+               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
+               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
+       }
+       FREE(phantom_route_hints);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_phantom_invoice(amt_msat_conv, payment_hash_conv, description_conv, invoice_expiry_delta_secs, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_hash(int64_t o) {
-       LDKInvoiceRequestFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequestFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_phantom_invoice_with_description_hash(int64_t amt_msat, int64_t payment_hash, int32_t invoice_expiry_delta_secs, int64_t description_hash, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       LDKSha256 description_hash_conv;
+       description_hash_conv.inner = untag_ptr(description_hash);
+       description_hash_conv.is_owned = ptr_is_owned(description_hash);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
+       description_hash_conv = Sha256_clone(&description_hash_conv);
+       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
+       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
+       if (phantom_route_hints_constr.datalen > 0)
+               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
+       else
+               phantom_route_hints_constr.data = NULL;
+       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
+       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
+               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
+               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
+               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
+               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
+               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
+               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
+       }
+       FREE(phantom_route_hints);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_phantom_invoice_with_description_hash(amt_msat_conv, payment_hash_conv, invoice_expiry_delta_secs, description_hash_conv, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_hash(int64_t o) {
-       LDKBolt12InvoiceFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Bolt12InvoiceFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_invoice_from_channelmanager(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_hash(int64_t o) {
-       LDKBlindedHopFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedHopFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKSha256 description_hash_conv;
+       description_hash_conv.inner = untag_ptr(description_hash);
+       description_hash_conv.is_owned = ptr_is_owned(description_hash);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
+       description_hash_conv = Sha256_clone(&description_hash_conv);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_with_description_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_hash(int64_t o) {
-       LDKChannelTypeFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = ChannelTypeFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKSha256 description_hash_conv;
+       description_hash_conv.inner = untag_ptr(description_hash);
+       description_hash_conv.is_owned = ptr_is_owned(description_hash);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
+       description_hash_conv = Sha256_clone(&description_hash_conv);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_free(int64_t this_obj) {
-       LDKInitFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InitFeatures_free(this_obj_conv);
+int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_free(int64_t this_obj) {
-       LDKNodeFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeFeatures_free(this_obj_conv);
+int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int8_tArray payment_hash, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, payment_hash_ref, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelFeatures_free(int64_t this_obj) {
-       LDKChannelFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelFeatures_free(this_obj_conv);
+int64_t  CS_LDK_payment_parameters_from_zero_amount_invoice(int64_t invoice, int64_t amount_msat) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = payment_parameters_from_zero_amount_invoice(&invoice_conv, amount_msat);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_free(int64_t this_obj) {
-       LDKBolt11InvoiceFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt11InvoiceFeatures_free(this_obj_conv);
+int64_t  CS_LDK_payment_parameters_from_invoice(int64_t invoice) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = payment_parameters_from_invoice(&invoice_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_OfferFeatures_free(int64_t this_obj) {
-       LDKOfferFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferFeatures_free(this_obj_conv);
+void  CS_LDK_Retry_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKRetry this_ptr_conv = *(LDKRetry*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Retry_free(this_ptr_conv);
 }
 
-void  CS_LDK_InvoiceRequestFeatures_free(int64_t this_obj) {
-       LDKInvoiceRequestFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestFeatures_free(this_obj_conv);
+static inline uint64_t Retry_clone_ptr(LDKRetry *NONNULL_PTR arg) {
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-
-void  CS_LDK_Bolt12InvoiceFeatures_free(int64_t this_obj) {
-       LDKBolt12InvoiceFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12InvoiceFeatures_free(this_obj_conv);
+int64_t  CS_LDK_Retry_clone_ptr(int64_t arg) {
+       LDKRetry* arg_conv = (LDKRetry*)untag_ptr(arg);
+       int64_t ret_conv = Retry_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_BlindedHopFeatures_free(int64_t this_obj) {
-       LDKBlindedHopFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedHopFeatures_free(this_obj_conv);
+int64_t  CS_LDK_Retry_clone(int64_t orig) {
+       LDKRetry* orig_conv = (LDKRetry*)untag_ptr(orig);
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_free(int64_t this_obj) {
-       LDKChannelTypeFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelTypeFeatures_free(this_obj_conv);
+int64_t  CS_LDK_Retry_attempts(int32_t a) {
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_attempts(a);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InitFeatures_empty() {
-       LDKInitFeatures ret_var = InitFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Retry_timeout(int64_t a) {
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_timeout(a);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInitFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+jboolean  CS_LDK_Retry_eq(int64_t a, int64_t b) {
+       LDKRetry* a_conv = (LDKRetry*)untag_ptr(a);
+       LDKRetry* b_conv = (LDKRetry*)untag_ptr(b);
+       jboolean ret_conv = Retry_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_unknown_bits(&this_arg_conv);
+int64_t  CS_LDK_Retry_hash(int64_t o) {
+       LDKRetry* o_conv = (LDKRetry*)untag_ptr(o);
+       int64_t ret_conv = Retry_hash(o_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InitFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InitFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_Retry_write(int64_t obj) {
+       LDKRetry* obj_conv = (LDKRetry*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = Retry_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InitFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_required_custom_bit(&this_arg_conv, bit);
+int64_t  CS_LDK_Retry_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = Retry_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InitFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_RetryableSendFailure_clone(int64_t orig) {
+       LDKRetryableSendFailure* orig_conv = (LDKRetryableSendFailure*)untag_ptr(orig);
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_clone(orig_conv));
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_empty() {
-       LDKNodeFeatures ret_var = NodeFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_RetryableSendFailure_payment_expired() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_payment_expired());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+int32_t  CS_LDK_RetryableSendFailure_route_not_found() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_route_not_found());
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_unknown_bits(&this_arg_conv);
+int32_t  CS_LDK_RetryableSendFailure_duplicate_payment() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_duplicate_payment());
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_RetryableSendFailure_onion_packet_size_exceeded() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_onion_packet_size_exceeded());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_RetryableSendFailure_eq(int64_t a, int64_t b) {
+       LDKRetryableSendFailure* a_conv = (LDKRetryableSendFailure*)untag_ptr(a);
+       LDKRetryableSendFailure* b_conv = (LDKRetryableSendFailure*)untag_ptr(b);
+       jboolean ret_conv = RetryableSendFailure_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_NodeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_PaymentSendFailure_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPaymentSendFailure this_ptr_conv = *(LDKPaymentSendFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PaymentSendFailure_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_ChannelFeatures_empty() {
-       LDKChannelFeatures ret_var = ChannelFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-
-jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = ChannelFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+int64_t  CS_LDK_PaymentSendFailure_clone_ptr(int64_t arg) {
+       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)untag_ptr(arg);
+       int64_t ret_conv = PaymentSendFailure_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_PaymentSendFailure_clone(int64_t orig) {
+       LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)untag_ptr(orig);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_parameter_error(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKAPIError a_conv = *(LDKAPIError*)(a_ptr);
+       a_conv = APIError_clone((LDKAPIError*)untag_ptr(a));
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_parameter_error(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_path_parameter_error(int64_tArray a) {
+       LDKCVec_CResult_NoneAPIErrorZZ a_constr;
+       a_constr.datalen = a->arr_len;
+       if (a_constr.datalen > 0)
+               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
+       else
+               a_constr.data = NULL;
+       int64_t* a_vals = a->elems;
+       for (size_t w = 0; w < a_constr.datalen; w++) {
+               int64_t a_conv_22 = a_vals[w];
+               void* a_conv_22_ptr = untag_ptr(a_conv_22);
+               CHECK_ACCESS(a_conv_22_ptr);
+               LDKCResult_NoneAPIErrorZ a_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(a_conv_22_ptr);
+               a_conv_22_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)untag_ptr(a_conv_22));
+               a_constr.data[w] = a_conv_22_conv;
+       }
+       FREE(a);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_path_parameter_error(a_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_all_failed_resend_safe(int64_tArray a) {
+       LDKCVec_APIErrorZ a_constr;
+       a_constr.datalen = a->arr_len;
+       if (a_constr.datalen > 0)
+               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKAPIError), "LDKCVec_APIErrorZ Elements");
+       else
+               a_constr.data = NULL;
+       int64_t* a_vals = a->elems;
+       for (size_t k = 0; k < a_constr.datalen; k++) {
+               int64_t a_conv_10 = a_vals[k];
+               void* a_conv_10_ptr = untag_ptr(a_conv_10);
+               CHECK_ACCESS(a_conv_10_ptr);
+               LDKAPIError a_conv_10_conv = *(LDKAPIError*)(a_conv_10_ptr);
+               a_conv_10_conv = APIError_clone((LDKAPIError*)untag_ptr(a_conv_10));
+               a_constr.data[k] = a_conv_10_conv;
+       }
+       FREE(a);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_all_failed_resend_safe(a_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_duplicate_payment() {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_duplicate_payment();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_empty() {
-       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_PaymentSendFailure_partial_failure(int64_tArray results, int64_t failed_paths_retry, int8_tArray payment_id) {
+       LDKCVec_CResult_NoneAPIErrorZZ results_constr;
+       results_constr.datalen = results->arr_len;
+       if (results_constr.datalen > 0)
+               results_constr.data = MALLOC(results_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
+       else
+               results_constr.data = NULL;
+       int64_t* results_vals = results->elems;
+       for (size_t w = 0; w < results_constr.datalen; w++) {
+               int64_t results_conv_22 = results_vals[w];
+               void* results_conv_22_ptr = untag_ptr(results_conv_22);
+               CHECK_ACCESS(results_conv_22_ptr);
+               LDKCResult_NoneAPIErrorZ results_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(results_conv_22_ptr);
+               results_conv_22_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)untag_ptr(results_conv_22));
+               results_constr.data[w] = results_conv_22_conv;
+       }
+       FREE(results);
+       LDKRouteParameters failed_paths_retry_conv;
+       failed_paths_retry_conv.inner = untag_ptr(failed_paths_retry);
+       failed_paths_retry_conv.is_owned = ptr_is_owned(failed_paths_retry);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
+       failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_partial_failure(results_constr, failed_paths_retry_conv, payment_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBolt11InvoiceFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+jboolean  CS_LDK_PaymentSendFailure_eq(int64_t a, int64_t b) {
+       LDKPaymentSendFailure* a_conv = (LDKPaymentSendFailure*)untag_ptr(a);
+       LDKPaymentSendFailure* b_conv = (LDKPaymentSendFailure*)untag_ptr(b);
+       jboolean ret_conv = PaymentSendFailure_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_Bolt12PaymentError_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKBolt12PaymentError this_ptr_conv = *(LDKBolt12PaymentError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Bolt12PaymentError_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t Bolt12PaymentError_clone_ptr(LDKBolt12PaymentError *NONNULL_PTR arg) {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Bolt12PaymentError_clone_ptr(int64_t arg) {
+       LDKBolt12PaymentError* arg_conv = (LDKBolt12PaymentError*)untag_ptr(arg);
+       int64_t ret_conv = Bolt12PaymentError_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Bolt12PaymentError_clone(int64_t orig) {
+       LDKBolt12PaymentError* orig_conv = (LDKBolt12PaymentError*)untag_ptr(orig);
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Bolt12PaymentError_unexpected_invoice() {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_unexpected_invoice();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Bolt12PaymentError_duplicate_invoice() {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_duplicate_invoice();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferFeatures_empty() {
-       LDKOfferFeatures ret_var = OfferFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Bolt12PaymentError_unknown_required_features() {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_unknown_required_features();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_OfferFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = OfferFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt12PaymentError_sending_failed(int32_t a) {
+       LDKRetryableSendFailure a_conv = LDKRetryableSendFailure_from_cs(a);
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_sending_failed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_OfferFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = OfferFeatures_requires_unknown_bits(&this_arg_conv);
+jboolean  CS_LDK_Bolt12PaymentError_eq(int64_t a, int64_t b) {
+       LDKBolt12PaymentError* a_conv = (LDKBolt12PaymentError*)untag_ptr(a);
+       LDKBolt12PaymentError* b_conv = (LDKBolt12PaymentError*)untag_ptr(b);
+       jboolean ret_conv = Bolt12PaymentError_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ProbeSendFailure_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKProbeSendFailure this_ptr_conv = *(LDKProbeSendFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ProbeSendFailure_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_OfferFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg) {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_ProbeSendFailure_clone_ptr(int64_t arg) {
+       LDKProbeSendFailure* arg_conv = (LDKProbeSendFailure*)untag_ptr(arg);
+       int64_t ret_conv = ProbeSendFailure_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_ProbeSendFailure_clone(int64_t orig) {
+       LDKProbeSendFailure* orig_conv = (LDKProbeSendFailure*)untag_ptr(orig);
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_ProbeSendFailure_route_not_found() {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_route_not_found();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_empty() {
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_ProbeSendFailure_sending_failed(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKPaymentSendFailure a_conv = *(LDKPaymentSendFailure*)(a_ptr);
+       a_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(a));
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_sending_failed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+jboolean  CS_LDK_ProbeSendFailure_eq(int64_t a, int64_t b) {
+       LDKProbeSendFailure* a_conv = (LDKProbeSendFailure*)untag_ptr(a);
+       LDKProbeSendFailure* b_conv = (LDKProbeSendFailure*)untag_ptr(b);
+       jboolean ret_conv = ProbeSendFailure_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_RecipientOnionFields_free(int64_t this_obj) {
+       LDKRecipientOnionFields this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RecipientOnionFields_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RecipientOnionFields_get_payment_secret(int64_t this_ptr) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = RecipientOnionFields_get_payment_secret(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_RecipientOnionFields_set_payment_secret(int64_t this_ptr, int64_t val) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       RecipientOnionFields_set_payment_secret(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RecipientOnionFields_get_payment_metadata(int64_t this_ptr) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = RecipientOnionFields_get_payment_metadata(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_RecipientOnionFields_set_payment_metadata(int64_t this_ptr, int64_t val) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
+       RecipientOnionFields_set_payment_metadata(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_empty() {
-       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_empty();
+static inline uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg) {
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
+int64_t  CS_LDK_RecipientOnionFields_clone_ptr(int64_t arg) {
+       LDKRecipientOnionFields arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = RecipientOnionFields_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_BlindedHopFeatures_empty() {
-       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_empty();
+int64_t  CS_LDK_RecipientOnionFields_clone(int64_t orig) {
+       LDKRecipientOnionFields orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBlindedHopFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits(&this_arg_conv);
+jboolean  CS_LDK_RecipientOnionFields_eq(int64_t a, int64_t b) {
+       LDKRecipientOnionFields a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRecipientOnionFields b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RecipientOnionFields_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_BlindedHopFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_RecipientOnionFields_write(int64_t obj) {
+       LDKRecipientOnionFields obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RecipientOnionFields_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_required_custom_bit(&this_arg_conv, bit);
+int64_t  CS_LDK_RecipientOnionFields_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RecipientOnionFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsDecodeErrorZ), "LDKCResult_RecipientOnionFieldsDecodeErrorZ");
+       *ret_conv = RecipientOnionFields_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RecipientOnionFields_secret_only(int8_tArray payment_secret) {
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_secret_only(payment_secret_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_empty() {
-       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_empty();
+int64_t  CS_LDK_RecipientOnionFields_spontaneous_empty() {
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_spontaneous_empty();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_RecipientOnionFields_with_custom_tlvs(int64_t this_arg, int64_tArray custom_tlvs) {
+       LDKRecipientOnionFields this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTypeFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
+       this_arg_conv = RecipientOnionFields_clone(&this_arg_conv);
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs_constr;
+       custom_tlvs_constr.datalen = custom_tlvs->arr_len;
+       if (custom_tlvs_constr.datalen > 0)
+               custom_tlvs_constr.data = MALLOC(custom_tlvs_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
+       else
+               custom_tlvs_constr.data = NULL;
+       int64_t* custom_tlvs_vals = custom_tlvs->elems;
+       for (size_t x = 0; x < custom_tlvs_constr.datalen; x++) {
+               int64_t custom_tlvs_conv_23 = custom_tlvs_vals[x];
+               void* custom_tlvs_conv_23_ptr = untag_ptr(custom_tlvs_conv_23);
+               CHECK_ACCESS(custom_tlvs_conv_23_ptr);
+               LDKC2Tuple_u64CVec_u8ZZ custom_tlvs_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(custom_tlvs_conv_23_ptr);
+               custom_tlvs_conv_23_conv = C2Tuple_u64CVec_u8ZZ_clone((LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(custom_tlvs_conv_23));
+               custom_tlvs_constr.data[x] = custom_tlvs_conv_23_conv;
+       }
+       FREE(custom_tlvs);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = RecipientOnionFields_with_custom_tlvs(this_arg_conv, custom_tlvs_constr);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_tArray  CS_LDK_RecipientOnionFields_custom_tlvs(int64_t this_arg) {
+       LDKRecipientOnionFields this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret_var = RecipientOnionFields_custom_tlvs(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_u64CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+               *ret_conv_23_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_CustomMessageReader_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomMessageReader this_ptr_conv = *(LDKCustomMessageReader*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomMessageReader_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(arg);
+       return tag_ptr(ret_ret, true);
 }
-
-int64_t  CS_LDK_ChannelTypeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Type_clone_ptr(int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKType* arg_conv = (LDKType*)arg_ptr;
+       int64_t ret_conv = Type_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Type_clone(int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKType* orig_conv = (LDKType*)orig_ptr;
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int8_tArray  CS_LDK_InitFeatures_write(int64_t obj) {
-       LDKInitFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_Type_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKType this_ptr_conv = *(LDKType*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Type_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_InitFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
-       *ret_conv = InitFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_OfferId_free(int64_t this_obj) {
+       LDKOfferId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferId_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_ChannelFeatures_write(int64_t obj) {
-       LDKChannelFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int8_tArray  CS_LDK_OfferId_get_a(int64_t this_ptr) {
+       LDKOfferId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *OfferId_get_a(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
-       *ret_conv = ChannelFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_OfferId_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKOfferId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       OfferId_set_a(&this_ptr_conv, val_ref);
 }
 
-int8_tArray  CS_LDK_NodeFeatures_write(int64_t obj) {
-       LDKNodeFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_OfferId_new(int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK(a_arg->arr_len == 32);
+       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
+       LDKOfferId ret_var = OfferId_new(a_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NodeFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
-       *ret_conv = NodeFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t OfferId_clone_ptr(LDKOfferId *NONNULL_PTR arg) {
+       LDKOfferId ret_var = OfferId_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OfferId_clone_ptr(int64_t arg) {
+       LDKOfferId arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OfferId_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_Bolt11InvoiceFeatures_write(int64_t obj) {
-       LDKBolt11InvoiceFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt11InvoiceFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_OfferId_clone(int64_t orig) {
+       LDKOfferId orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOfferId ret_var = OfferId_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ");
-       *ret_conv = Bolt11InvoiceFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_OfferId_eq(int64_t a, int64_t b) {
+       LDKOfferId a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKOfferId b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = OfferId_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_Bolt12InvoiceFeatures_write(int64_t obj) {
-       LDKBolt12InvoiceFeatures obj_conv;
+int8_tArray  CS_LDK_OfferId_write(int64_t obj) {
+       LDKOfferId obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12InvoiceFeatures_write(&obj_conv);
+       LDKCVec_u8Z ret_var = OfferId_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_read(int8_tArray ser) {
+int64_t  CS_LDK_OfferId_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ");
-       *ret_conv = Bolt12InvoiceFeatures_read(ser_ref);
+       LDKCResult_OfferIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferIdDecodeErrorZ), "LDKCResult_OfferIdDecodeErrorZ");
+       *ret_conv = OfferId_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_BlindedHopFeatures_write(int64_t obj) {
-       LDKBlindedHopFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHopFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_free(int64_t this_obj) {
+       LDKOfferWithExplicitMetadataBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferWithExplicitMetadataBuilder_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedHopFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopFeaturesDecodeErrorZ), "LDKCResult_BlindedHopFeaturesDecodeErrorZ");
-       *ret_conv = BlindedHopFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t OfferWithExplicitMetadataBuilder_clone_ptr(LDKOfferWithExplicitMetadataBuilder *NONNULL_PTR arg) {
+       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone_ptr(int64_t arg) {
+       LDKOfferWithExplicitMetadataBuilder arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OfferWithExplicitMetadataBuilder_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelTypeFeatures_write(int64_t obj) {
-       LDKChannelTypeFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelTypeFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone(int64_t orig) {
+       LDKOfferWithExplicitMetadataBuilder orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ChannelTypeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTypeFeaturesDecodeErrorZ), "LDKCResult_ChannelTypeFeaturesDecodeErrorZ");
-       *ret_conv = ChannelTypeFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_OfferWithDerivedMetadataBuilder_free(int64_t this_obj) {
+       LDKOfferWithDerivedMetadataBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferWithDerivedMetadataBuilder_free(this_obj_conv);
 }
 
-void  CS_LDK_InitFeatures_set_data_loss_protect_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_data_loss_protect_optional(&this_arg_conv);
+static inline uint64_t OfferWithDerivedMetadataBuilder_clone_ptr(LDKOfferWithDerivedMetadataBuilder *NONNULL_PTR arg) {
+       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
+       LDKOfferWithDerivedMetadataBuilder arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OfferWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_data_loss_protect_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_data_loss_protect_required(&this_arg_conv);
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone(int64_t orig) {
+       LDKOfferWithDerivedMetadataBuilder orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_data_loss_protect(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_new(int8_tArray signing_pubkey) {
+       LDKPublicKey signing_pubkey_ref;
+       CHECK(signing_pubkey->arr_len == 33);
+       memcpy(signing_pubkey_ref.compressed_form, signing_pubkey->elems, 33); FREE(signing_pubkey);
+       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_new(signing_pubkey_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_data_loss_protect_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_metadata(int64_t this_arg, int8_tArray metadata) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_data_loss_protect_optional(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKCVec_u8Z metadata_ref;
+       metadata_ref.datalen = metadata->arr_len;
+       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = OfferWithExplicitMetadataBuilder_metadata(this_arg_conv, metadata_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_data_loss_protect_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_data_loss_protect_required(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       OfferWithExplicitMetadataBuilder_chain(this_arg_conv, network_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_data_loss_protect(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       OfferWithExplicitMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_data_loss_protect(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       OfferWithExplicitMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_data_loss_protect(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_description(int64_t this_arg, jstring description) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       OfferWithExplicitMetadataBuilder_description(this_arg_conv, description_conv);
 }
 
-void  CS_LDK_InitFeatures_set_initial_routing_sync_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_initial_routing_sync_optional(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
+       OfferWithExplicitMetadataBuilder_issuer(this_arg_conv, issuer_conv);
 }
 
-void  CS_LDK_InitFeatures_set_initial_routing_sync_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_path(int64_t this_arg, int64_t path) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_initial_routing_sync_required(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKBlindedMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = BlindedMessagePath_clone(&path_conv);
+       OfferWithExplicitMetadataBuilder_path(this_arg_conv, path_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_initial_routing_sync(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_initial_routing_sync(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       void* quantity_ptr = untag_ptr(quantity);
+       CHECK_ACCESS(quantity_ptr);
+       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
+       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
+       OfferWithExplicitMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
 }
 
-void  CS_LDK_InitFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_build(int64_t this_arg) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
+       *ret_conv = OfferWithExplicitMetadataBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(int8_tArray node_id, int64_t expanded_key, int64_t nonce) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(node_id_ref, &expanded_key_conv, nonce_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       OfferWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
 }
 
-void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       OfferWithDerivedMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
 }
 
-void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       OfferWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       OfferWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
+       OfferWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKBlindedMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = BlindedMessagePath_clone(&path_conv);
+       OfferWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
 }
 
-void  CS_LDK_InitFeatures_set_gossip_queries_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_gossip_queries_optional(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       void* quantity_ptr = untag_ptr(quantity);
+       CHECK_ACCESS(quantity_ptr);
+       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
+       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
+       OfferWithDerivedMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
 }
 
-void  CS_LDK_InitFeatures_set_gossip_queries_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_build(int64_t this_arg) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_gossip_queries_required(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
+       *ret_conv = OfferWithDerivedMetadataBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_gossip_queries(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_gossip_queries(&this_arg_conv);
+void  CS_LDK_Offer_free(int64_t this_obj) {
+       LDKOffer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Offer_free(this_obj_conv);
+}
+
+static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
+       LDKOffer ret_var = Offer_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Offer_clone_ptr(int64_t arg) {
+       LDKOffer arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_gossip_queries_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_gossip_queries_optional(&this_arg_conv);
+int64_t  CS_LDK_Offer_clone(int64_t orig) {
+       LDKOffer orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOffer ret_var = Offer_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_gossip_queries_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+ptrArray  CS_LDK_Offer_chains(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_gossip_queries_required(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = Offer_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_gossip_queries(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_metadata(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_gossip_queries(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = Offer_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_gossip_queries(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_amount(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_gossip_queries(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = Offer_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_gossip_queries(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_description(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_gossip_queries(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_variable_length_onion_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_offer_features(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_variable_length_onion_optional(&this_arg_conv);
+       LDKOfferFeatures ret_var = Offer_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_variable_length_onion_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_absolute_expiry(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_variable_length_onion_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_variable_length_onion(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_issuer(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_variable_length_onion(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_variable_length_onion_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_tArray  CS_LDK_Offer_paths(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_variable_length_onion_optional(&this_arg_conv);
+       LDKCVec_BlindedMessagePathZ ret_var = Offer_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_variable_length_onion_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_supported_quantity(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_variable_length_onion_required(&this_arg_conv);
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Offer_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_variable_length_onion(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Offer_signing_pubkey(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_variable_length_onion(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Offer_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_id(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_variable_length_onion_optional(&this_arg_conv);
+       LDKOfferId ret_var = Offer_id(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_supports_chain(int64_t this_arg, int8_tArray chain) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_variable_length_onion_required(&this_arg_conv);
+       LDKThirtyTwoBytes chain_ref;
+       CHECK(chain->arr_len == 32);
+       memcpy(chain_ref.data, chain->elems, 32); FREE(chain);
+       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_variable_length_onion(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_is_expired(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_variable_length_onion(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_is_expired_no_std(&this_arg_conv, duration_since_epoch);
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_variable_length_onion(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_is_valid_quantity(int64_t this_arg, int64_t quantity) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_variable_length_onion(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_expects_quantity(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_static_remote_key_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_request_invoice_deriving_payer_id(int64_t this_arg, int64_t expanded_key, int64_t nonce, int8_tArray payment_id) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_static_remote_key_optional(&this_arg_conv);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ");
+       *ret_conv = Offer_request_invoice_deriving_payer_id(&this_arg_conv, &expanded_key_conv, nonce_conv, payment_id_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_static_remote_key_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_request_invoice_deriving_metadata(int64_t this_arg, int8_tArray payer_id, int64_t expanded_key, int64_t nonce, int8_tArray payment_id) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_static_remote_key_required(&this_arg_conv);
+       LDKPublicKey payer_id_ref;
+       CHECK(payer_id->arr_len == 33);
+       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
+       *ret_conv = Offer_request_invoice_deriving_metadata(&this_arg_conv, payer_id_ref, &expanded_key_conv, nonce_conv, payment_id_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_static_remote_key(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_request_invoice(int64_t this_arg, int8_tArray metadata, int8_tArray payer_id) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_u8Z metadata_ref;
+       metadata_ref.datalen = metadata->arr_len;
+       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
+       LDKPublicKey payer_id_ref;
+       CHECK(payer_id->arr_len == 33);
+       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
+       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
+       *ret_conv = Offer_request_invoice(&this_arg_conv, metadata_ref, payer_id_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_static_remote_key_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_static_remote_key_optional(&this_arg_conv);
+int64_t  CS_LDK_Offer_hash(int64_t o) {
+       LDKOffer o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Offer_hash(&o_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_static_remote_key_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_static_remote_key_required(&this_arg_conv);
+int64_t  CS_LDK_Offer_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = Offer_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_static_remote_key(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_static_remote_key(&this_arg_conv);
+int8_tArray  CS_LDK_Offer_write(int64_t obj) {
+       LDKOffer obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Offer_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+void  CS_LDK_Amount_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKAmount this_ptr_conv = *(LDKAmount*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Amount_free(this_ptr_conv);
+}
+
+static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Amount_clone_ptr(int64_t arg) {
+       LDKAmount* arg_conv = (LDKAmount*)untag_ptr(arg);
+       int64_t ret_conv = Amount_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Amount_clone(int64_t orig) {
+       LDKAmount* orig_conv = (LDKAmount*)untag_ptr(orig);
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Amount_bitcoin(int64_t amount_msats) {
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_bitcoin(amount_msats);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Amount_currency(int8_tArray iso4217_code, int64_t amount) {
+       LDKThreeBytes iso4217_code_ref;
+       CHECK(iso4217_code->arr_len == 3);
+       memcpy(iso4217_code_ref.data, iso4217_code->elems, 3); FREE(iso4217_code);
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_currency(iso4217_code_ref, amount);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_Quantity_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKQuantity this_ptr_conv = *(LDKQuantity*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Quantity_free(this_ptr_conv);
+}
+
+static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Quantity_clone_ptr(int64_t arg) {
+       LDKQuantity* arg_conv = (LDKQuantity*)untag_ptr(arg);
+       int64_t ret_conv = Quantity_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Quantity_clone(int64_t orig) {
+       LDKQuantity* orig_conv = (LDKQuantity*)untag_ptr(orig);
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Quantity_bounded(int64_t a) {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_bounded(a);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Quantity_unbounded() {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_unbounded();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Quantity_one() {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_one();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Offer_from_str(jstring s) {
+       LDKStr s_conv = str_ref_to_owned_c(s);
+       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
+       *ret_conv = Offer_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jstring  CS_LDK_Offer_to_str(int64_t o) {
+       LDKOffer o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = Offer_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_free(int64_t this_obj) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceWithExplicitSigningPubkeyBuilder_free(this_obj_conv);
+}
+
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_free(int64_t this_obj) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceWithDerivedSigningPubkeyBuilder_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_build(int64_t this_arg) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_static_remote_key_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ");
+       *ret_conv = InvoiceWithExplicitSigningPubkeyBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_static_remote_key_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_static_remote_key(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       uint8_t script_hash_arr[32];
+       CHECK(script_hash->arr_len == 32);
+       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
+       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
+       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_static_remote_key(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_static_remote_key(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       LDKTweakedPublicKey utput_key_ref;
+       CHECK(utput_key->arr_len == 32);
+       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
+       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_static_remote_key(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(this_arg_conv);
 }
 
-void  CS_LDK_InitFeatures_set_payment_secret_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(int64_t this_arg) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_payment_secret_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ");
+       *ret_conv = InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_payment_secret_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_payment_secret_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_payment_secret(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_payment_secret(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       uint8_t script_hash_arr[32];
+       CHECK(script_hash->arr_len == 32);
+       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
+       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
+       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
 }
 
-void  CS_LDK_NodeFeatures_set_payment_secret_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_payment_secret_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
 }
 
-void  CS_LDK_NodeFeatures_set_payment_secret_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_payment_secret_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       LDKTweakedPublicKey utput_key_ref;
+       CHECK(utput_key->arr_len == 32);
+       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
+       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_payment_secret(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_payment_secret(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(this_arg_conv);
+}
+
+void  CS_LDK_UnsignedBolt12Invoice_free(int64_t this_obj) {
+       LDKUnsignedBolt12Invoice this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedBolt12Invoice_free(this_obj_conv);
+}
+
+static inline uint64_t UnsignedBolt12Invoice_clone_ptr(LDKUnsignedBolt12Invoice *NONNULL_PTR arg) {
+       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_UnsignedBolt12Invoice_clone_ptr(int64_t arg) {
+       LDKUnsignedBolt12Invoice arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedBolt12Invoice_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_secret_optional(&this_arg_conv);
+int64_t  CS_LDK_UnsignedBolt12Invoice_clone(int64_t orig) {
+       LDKUnsignedBolt12Invoice orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+void  CS_LDK_SignBolt12InvoiceFn_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignBolt12InvoiceFn this_ptr_conv = *(LDKSignBolt12InvoiceFn*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignBolt12InvoiceFn_free(this_ptr_conv);
+}
+
+int64_t  CS_LDK_UnsignedBolt12Invoice_tagged_hash(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_secret_required(&this_arg_conv);
+       LDKTaggedHash ret_var = UnsignedBolt12Invoice_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_secret(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+void  CS_LDK_Bolt12Invoice_free(int64_t this_obj) {
+       LDKBolt12Invoice this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12Invoice_free(this_obj_conv);
+}
+
+static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Bolt12Invoice_clone_ptr(int64_t arg) {
+       LDKBolt12Invoice arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Bolt12Invoice_clone(int64_t orig) {
+       LDKBolt12Invoice orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_UnsignedBolt12Invoice_created_at(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_secret(&this_arg_conv);
+       int64_t ret_conv = UnsignedBolt12Invoice_created_at(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_payment_secret(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_relative_expiry(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_payment_secret(&this_arg_conv);
+       int64_t ret_conv = UnsignedBolt12Invoice_relative_expiry(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_payment_secret(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+jboolean  CS_LDK_UnsignedBolt12Invoice_is_expired(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_payment_secret(&this_arg_conv);
+       jboolean ret_conv = UnsignedBolt12Invoice_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_secret(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+ptrArray  CS_LDK_UnsignedBolt12Invoice_fallbacks(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_secret(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_StrZ ret_var = UnsignedBolt12Invoice_fallbacks(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       jstring *ret_arr_ptr = (jstring*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKStr ret_conv_8_str = ret_var.data[i];
+               jstring ret_conv_8_conv = str_ref_to_cs(ret_conv_8_str.chars, ret_conv_8_str.len);
+               Str_free(ret_conv_8_str);
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_features(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_basic_mpp_optional(&this_arg_conv);
+       LDKBolt12InvoiceFeatures ret_var = UnsignedBolt12Invoice_invoice_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_signing_pubkey(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_basic_mpp_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_offer_chains(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = UnsignedBolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_chain(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_basic_mpp_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_metadata(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_basic_mpp_required(&this_arg_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = UnsignedBolt12Invoice_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_amount(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = UnsignedBolt12Invoice_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_offer_features(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+       LDKOfferFeatures ret_var = UnsignedBolt12Invoice_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_description(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_absolute_expiry(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedBolt12Invoice_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_issuer(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt12InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int64_tArray  CS_LDK_UnsignedBolt12Invoice_message_paths(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt12InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+       LDKCVec_BlindedMessagePathZ ret_var = UnsignedBolt12Invoice_message_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_supported_quantity(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
+       *ret_copy = UnsignedBolt12Invoice_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_metadata(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = UnsignedBolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_request_features(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKInvoiceRequestFeatures ret_var = UnsignedBolt12Invoice_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_quantity(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedBolt12Invoice_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_id(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_wumbo_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_payer_note(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_wumbo_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_wumbo_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_payment_hash(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_wumbo_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payment_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_wumbo(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_amount_msats(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_wumbo(&this_arg_conv);
+       int64_t ret_conv = UnsignedBolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_wumbo_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_created_at(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_wumbo_optional(&this_arg_conv);
+       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_wumbo_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_relative_expiry(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_wumbo_required(&this_arg_conv);
+       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_wumbo(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+jboolean  CS_LDK_Bolt12Invoice_is_expired(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_wumbo(&this_arg_conv);
+       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_wumbo(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+ptrArray  CS_LDK_Bolt12Invoice_fallbacks(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_wumbo(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_StrZ ret_var = Bolt12Invoice_fallbacks(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       jstring *ret_arr_ptr = (jstring*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKStr ret_conv_8_str = ret_var.data[i];
+               jstring ret_conv_8_conv = str_ref_to_cs(ret_conv_8_str.chars, ret_conv_8_str.len);
+               Str_free(ret_conv_8_str);
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_wumbo(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_invoice_features(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_wumbo(&this_arg_conv);
-       return ret_conv;
+       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_invoice_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_signing_pubkey(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_offer_chains(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = Bolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_chain(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_metadata(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = Bolt12Invoice_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_amount(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = Bolt12Invoice_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_offer_features(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKOfferFeatures ret_var = Bolt12Invoice_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_description(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_absolute_expiry(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_issuer(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Bolt12Invoice_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_tArray  CS_LDK_Bolt12Invoice_message_paths(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedMessagePathZ ret_var = Bolt12Invoice_message_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_supported_quantity(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
+       *ret_copy = Bolt12Invoice_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_payer_metadata(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = Bolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_invoice_request_features(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = Bolt12Invoice_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_quantity(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_payer_id(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_payer_note(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_payment_hash(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_payment_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_amount_msats(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_signature(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_signature(&this_arg_conv).compact_form, 64);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_signable_hash(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_signable_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_verify_using_metadata(int64_t this_arg, int64_t key) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = Bolt12Invoice_verify_using_metadata(&this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_verify_using_payer_data(int64_t this_arg, int8_tArray payment_id, int64_t nonce, int64_t key) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = Bolt12Invoice_verify_using_payer_data(&this_arg_conv, payment_id_ref, nonce_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+int64_t  CS_LDK_Bolt12Invoice_hash(int64_t o) {
+       LDKBolt12Invoice o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_write(int64_t obj) {
+       LDKUnsignedBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedBolt12Invoice_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_route_blinding_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_route_blinding_optional(&this_arg_conv);
+int8_tArray  CS_LDK_Bolt12Invoice_write(int64_t obj) {
+       LDKBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_route_blinding_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_route_blinding_required(&this_arg_conv);
+int64_t  CS_LDK_Bolt12Invoice_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = Bolt12Invoice_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_route_blinding(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_route_blinding(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_InvoiceError_free(int64_t this_obj) {
+       LDKInvoiceError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceError_free(this_obj_conv);
 }
 
-void  CS_LDK_NodeFeatures_set_route_blinding_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_route_blinding_optional(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_get_erroneous_field(int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_route_blinding_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_route_blinding_required(&this_arg_conv);
+void  CS_LDK_InvoiceError_set_erroneous_field(int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ErroneousField_clone(&val_conv);
+       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_route_blinding(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_route_blinding(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_InvoiceError_get_message(int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_route_blinding(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_route_blinding(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_InvoiceError_set_message(int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = UntrustedString_clone(&val_conv);
+       InvoiceError_set_message(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_route_blinding(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_route_blinding(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_new(int64_t erroneous_field_arg, int64_t message_arg) {
+       LDKErroneousField erroneous_field_arg_conv;
+       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
+       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
+       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
+       LDKUntrustedString message_arg_conv;
+       message_arg_conv.inner = untag_ptr(message_arg);
+       message_arg_conv.is_owned = ptr_is_owned(message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
+       message_arg_conv = UntrustedString_clone(&message_arg_conv);
+       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
+       LDKInvoiceError ret_var = InvoiceError_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_InvoiceError_clone_ptr(int64_t arg) {
+       LDKInvoiceError arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_clone(int64_t orig) {
+       LDKInvoiceError orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+void  CS_LDK_ErroneousField_free(int64_t this_obj) {
+       LDKErroneousField this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ErroneousField_free(this_obj_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_shutdown_anysegwit(&this_arg_conv);
+int64_t  CS_LDK_ErroneousField_get_tlv_fieldnum(int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+void  CS_LDK_ErroneousField_set_tlv_fieldnum(int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
 }
 
-void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+int64_t  CS_LDK_ErroneousField_get_suggested_value(int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_shutdown_anysegwit(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_ErroneousField_set_suggested_value(int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
+       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_shutdown_anysegwit(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_ErroneousField_new(int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
+       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
+       CHECK_ACCESS(suggested_value_arg_ptr);
+       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
+       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
+       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_shutdown_anysegwit(&this_arg_conv);
+static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
+       LDKErroneousField ret_var = ErroneousField_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ErroneousField_clone_ptr(int64_t arg) {
+       LDKErroneousField arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_taproot_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_taproot_optional(&this_arg_conv);
+int64_t  CS_LDK_ErroneousField_clone(int64_t orig) {
+       LDKErroneousField orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_taproot_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_taproot_required(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_from_string(jstring s) {
+       LDKStr s_conv = str_ref_to_owned_c(s);
+       LDKInvoiceError ret_var = InvoiceError_from_string(s_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_taproot(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_taproot(&this_arg_conv);
+jstring  CS_LDK_InvoiceError_to_str(int64_t o) {
+       LDKInvoiceError o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = InvoiceError_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_taproot_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_taproot_optional(&this_arg_conv);
+int8_tArray  CS_LDK_InvoiceError_write(int64_t obj) {
+       LDKInvoiceError obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_taproot_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_taproot_required(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
+       *ret_conv = InvoiceError_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_taproot(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_taproot(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_free(int64_t this_obj) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequestWithExplicitPayerIdBuilder_free(this_obj_conv);
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_taproot_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_taproot_optional(&this_arg_conv);
+void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_free(int64_t this_obj) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequestWithDerivedPayerIdBuilder_free(this_obj_conv);
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_taproot_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_build(int64_t this_arg) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_taproot_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ), "LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_taproot(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_chain(this_arg_conv, network_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_taproot(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_taproot(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_quantity(this_arg_conv, quantity);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_taproot(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
+       InvoiceRequestWithExplicitPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
 }
 
-void  CS_LDK_InitFeatures_set_onion_messages_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(int64_t this_arg) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_onion_messages_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKCResult_InvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_onion_messages_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_onion_messages_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_chain(this_arg_conv, network_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_onion_messages(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_onion_messages(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_onion_messages_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_onion_messages_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_quantity(this_arg_conv, quantity);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_onion_messages_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_onion_messages_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
+       InvoiceRequestWithDerivedPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_onion_messages(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_onion_messages(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_UnsignedInvoiceRequest_free(int64_t this_obj) {
+       LDKUnsignedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedInvoiceRequest_free(this_obj_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_onion_messages(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_onion_messages(&this_arg_conv);
-       return ret_conv;
+static inline uint64_t UnsignedInvoiceRequest_clone_ptr(LDKUnsignedInvoiceRequest *NONNULL_PTR arg) {
+       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-jboolean  CS_LDK_NodeFeatures_requires_onion_messages(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_onion_messages(&this_arg_conv);
+int64_t  CS_LDK_UnsignedInvoiceRequest_clone_ptr(int64_t arg) {
+       LDKUnsignedInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedInvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_channel_type_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_channel_type_optional(&this_arg_conv);
+int64_t  CS_LDK_UnsignedInvoiceRequest_clone(int64_t orig) {
+       LDKUnsignedInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_channel_type_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_channel_type_required(&this_arg_conv);
+void  CS_LDK_SignInvoiceRequestFn_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignInvoiceRequestFn this_ptr_conv = *(LDKSignInvoiceRequestFn*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignInvoiceRequestFn_free(this_ptr_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_channel_type(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_tagged_hash(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_channel_type(&this_arg_conv);
-       return ret_conv;
+       LDKTaggedHash ret_var = UnsignedInvoiceRequest_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_channel_type_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_channel_type_optional(&this_arg_conv);
+void  CS_LDK_InvoiceRequest_free(int64_t this_obj) {
+       LDKInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequest_free(this_obj_conv);
 }
 
-void  CS_LDK_NodeFeatures_set_channel_type_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_channel_type_required(&this_arg_conv);
+static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-jboolean  CS_LDK_NodeFeatures_supports_channel_type(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_channel_type(&this_arg_conv);
+int64_t  CS_LDK_InvoiceRequest_clone_ptr(int64_t arg) {
+       LDKInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_channel_type(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_channel_type(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_InvoiceRequest_clone(int64_t orig) {
+       LDKInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_channel_type(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_channel_type(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_VerifiedInvoiceRequest_free(int64_t this_obj) {
+       LDKVerifiedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       VerifiedInvoiceRequest_free(this_obj_conv);
 }
 
-void  CS_LDK_InitFeatures_set_scid_privacy_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_scid_privacy_optional(&this_arg_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_get_offer_id(int64_t this_ptr) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOfferId ret_var = VerifiedInvoiceRequest_get_offer_id(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_scid_privacy_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_scid_privacy_required(&this_arg_conv);
+void  CS_LDK_VerifiedInvoiceRequest_set_offer_id(int64_t this_ptr, int64_t val) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOfferId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OfferId_clone(&val_conv);
+       VerifiedInvoiceRequest_set_offer_id(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_scid_privacy(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_scid_privacy(&this_arg_conv);
+static inline uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg) {
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_VerifiedInvoiceRequest_clone_ptr(int64_t arg) {
+       LDKVerifiedInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = VerifiedInvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_scid_privacy_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_clone(int64_t orig) {
+       LDKVerifiedInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+ptrArray  CS_LDK_UnsignedInvoiceRequest_chains(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_scid_privacy_optional(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = UnsignedInvoiceRequest_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_scid_privacy_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_metadata(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_scid_privacy_required(&this_arg_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = UnsignedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_scid_privacy(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_amount(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = UnsignedInvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_description(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_scid_privacy_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_offer_features(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_scid_privacy_required(&this_arg_conv);
+       LDKOfferFeatures ret_var = UnsignedInvoiceRequest_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_scid_privacy(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_absolute_expiry(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_scid_privacy(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_issuer(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_scid_privacy(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_tArray  CS_LDK_UnsignedInvoiceRequest_paths(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedMessagePathZ ret_var = UnsignedInvoiceRequest_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_scid_privacy(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_supported_quantity(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = UnsignedInvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_signing_pubkey(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_metadata_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_metadata(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_metadata_required(&this_arg_conv);
+       LDKu8slice ret_var = UnsignedInvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_metadata(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_chain(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_metadata(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, UnsignedInvoiceRequest_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_metadata(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_amount_msats(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_metadata(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_zero_conf_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_invoice_request_features(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_zero_conf_optional(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = UnsignedInvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_zero_conf_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_quantity(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_zero_conf_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_zero_conf(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_id(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_zero_conf(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_zero_conf_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_payer_note(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_zero_conf_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_zero_conf_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+ptrArray  CS_LDK_InvoiceRequest_chains(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_zero_conf_required(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = InvoiceRequest_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_zero_conf(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_metadata(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = InvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_zero_conf_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_amount(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_zero_conf_optional(&this_arg_conv);
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = InvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_zero_conf_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_description(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_zero_conf_required(&this_arg_conv);
+       LDKPrintableString ret_var = InvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_zero_conf(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_offer_features(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKOfferFeatures ret_var = InvoiceRequest_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_zero_conf(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_absolute_expiry(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_zero_conf(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_issuer(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = InvoiceRequest_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_zero_conf(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_tArray  CS_LDK_InvoiceRequest_paths(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedMessagePathZ ret_var = InvoiceRequest_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_keysend_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_supported_quantity(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_keysend_optional(&this_arg_conv);
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = InvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_keysend_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_signing_pubkey(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_keysend_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_keysend(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_payer_metadata(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_keysend(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = InvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_keysend(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_chain(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_keysend(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_trampoline_routing_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_amount_msats(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_trampoline_routing_optional(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_trampoline_routing_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_invoice_request_features(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_trampoline_routing_required(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_trampoline_routing(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_quantity(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_trampoline_routing_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_payer_id(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_trampoline_routing_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_trampoline_routing_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_payer_note(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_trampoline_routing_required(&this_arg_conv);
+       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_trampoline_routing(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_trampoline_routing_optional(&this_arg_conv);
-}
-
-void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_InvoiceRequest_verify_using_metadata(int64_t this_arg, int64_t key) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_trampoline_routing_required(&this_arg_conv);
+       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = InvoiceRequest_verify_using_metadata(this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_trampoline_routing(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_verify_using_recipient_data(int64_t this_arg, int64_t nonce, int64_t key) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = InvoiceRequest_verify_using_recipient_data(this_arg_conv, nonce_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_InvoiceRequest_signature(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_signature(&this_arg_conv).compact_form, 64);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_trampoline_routing(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+ptrArray  CS_LDK_VerifiedInvoiceRequest_chains(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_ThirtyTwoBytesZ ret_var = VerifiedInvoiceRequest_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_trampoline_routing(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_metadata(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = VerifiedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_trampoline_routing(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_amount(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = VerifiedInvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ShutdownScript_free(int64_t this_obj) {
-       LDKShutdownScript this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ShutdownScript_free(this_obj_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_description(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
-       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
+int64_t  CS_LDK_VerifiedInvoiceRequest_offer_features(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = VerifiedInvoiceRequest_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ShutdownScript_clone_ptr(int64_t arg) {
-       LDKShutdownScript arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ShutdownScript_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_t  CS_LDK_VerifiedInvoiceRequest_absolute_expiry(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ShutdownScript_clone(int64_t orig) {
-       LDKShutdownScript orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_issuer(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ShutdownScript_eq(int64_t a, int64_t b) {
-       LDKShutdownScript a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKShutdownScript b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ShutdownScript_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_tArray  CS_LDK_VerifiedInvoiceRequest_paths(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedMessagePathZ ret_var = VerifiedInvoiceRequest_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_InvalidShutdownScript_free(int64_t this_obj) {
-       LDKInvalidShutdownScript this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvalidShutdownScript_free(this_obj_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_supported_quantity(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = VerifiedInvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InvalidShutdownScript_get_script(int64_t this_ptr) {
-       LDKInvalidShutdownScript this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_signing_pubkey(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, VerifiedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_metadata(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = VerifiedInvoiceRequest_payer_metadata(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_InvalidShutdownScript_set_script(int64_t this_ptr, int8_tArray val) {
-       LDKInvalidShutdownScript this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z val_ref;
-       val_ref.datalen = val->arr_len;
-       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
-       InvalidShutdownScript_set_script(&this_ptr_conv, val_ref);
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_chain(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, VerifiedInvoiceRequest_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InvalidShutdownScript_new(int8_tArray script_arg) {
-       LDKCVec_u8Z script_arg_ref;
-       script_arg_ref.datalen = script_arg->arr_len;
-       script_arg_ref.data = MALLOC(script_arg_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(script_arg_ref.data, script_arg->elems, script_arg_ref.datalen); FREE(script_arg);
-       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_new(script_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_VerifiedInvoiceRequest_amount_msats(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
-       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
+int64_t  CS_LDK_VerifiedInvoiceRequest_invoice_request_features(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = VerifiedInvoiceRequest_invoice_request_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InvalidShutdownScript_clone_ptr(int64_t arg) {
-       LDKInvalidShutdownScript arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvalidShutdownScript_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_InvalidShutdownScript_clone(int64_t orig) {
-       LDKInvalidShutdownScript orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_VerifiedInvoiceRequest_quantity(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_ShutdownScript_write(int64_t obj) {
-       LDKShutdownScript obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_id(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, VerifiedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ShutdownScript_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
-       *ret_conv = ShutdownScript_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_ShutdownScript_new_p2wpkh(int8_tArray pubkey_hash) {
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       LDKShutdownScript ret_var = ShutdownScript_new_p2wpkh(pubkey_hash_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ShutdownScript_new_p2wsh(int8_tArray script_hash) {
-       uint8_t script_hash_arr[32];
-       CHECK(script_hash->arr_len == 32);
-       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
-       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
-       LDKShutdownScript ret_var = ShutdownScript_new_p2wsh(script_hash_ref);
+int64_t  CS_LDK_VerifiedInvoiceRequest_payer_note(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_payer_note(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ShutdownScript_new_witness_program(int64_t witness_program) {
-       void* witness_program_ptr = untag_ptr(witness_program);
-       CHECK_ACCESS(witness_program_ptr);
-       LDKWitnessProgram witness_program_conv = *(LDKWitnessProgram*)(witness_program_ptr);
-       witness_program_conv = WitnessProgram_clone((LDKWitnessProgram*)untag_ptr(witness_program));
-       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
-       *ret_conv = ShutdownScript_new_witness_program(witness_program_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_ShutdownScript_into_inner(int64_t this_arg) {
-       LDKShutdownScript this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = ShutdownScript_clone(&this_arg_conv);
-       LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_ShutdownScript_as_legacy_pubkey(int64_t this_arg) {
-       LDKShutdownScript this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys(&this_arg_conv, payment_paths_constr, payment_hash_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ShutdownScript_is_compatible(int64_t this_arg, int64_t features) {
-       LDKShutdownScript this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKInitFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv.is_owned = false;
-       jboolean ret_conv = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
-       return ret_conv;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
+       return tag_ptr(ret_conv, true);
 }
 
-jstring  CS_LDK_ShutdownScript_to_str(int64_t o) {
-       LDKShutdownScript o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ShutdownScript_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_write(int64_t obj) {
+       LDKUnsignedInvoiceRequest obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedInvoiceRequest_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelId_free(int64_t this_obj) {
-       LDKChannelId this_obj_conv;
+int8_tArray  CS_LDK_InvoiceRequest_write(int64_t obj) {
+       LDKInvoiceRequest obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+void  CS_LDK_InvoiceRequestFields_free(int64_t this_obj) {
+       LDKInvoiceRequestFields this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelId_free(this_obj_conv);
+       InvoiceRequestFields_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_ChannelId_get_a(int64_t this_ptr) {
-       LDKChannelId this_ptr_conv;
+int8_tArray  CS_LDK_InvoiceRequestFields_get_payer_id(int64_t this_ptr) {
+       LDKInvoiceRequestFields this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *ChannelId_get_a(&this_ptr_conv), 32);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequestFields_get_payer_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
 }
 
-void  CS_LDK_ChannelId_set_a(int64_t this_ptr, int8_tArray val) {
-       LDKChannelId this_ptr_conv;
+void  CS_LDK_InvoiceRequestFields_set_payer_id(int64_t this_ptr, int8_tArray val) {
+       LDKInvoiceRequestFields this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       ChannelId_set_a(&this_ptr_conv, val_ref);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       InvoiceRequestFields_set_payer_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_ChannelId_new(int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK(a_arg->arr_len == 32);
-       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
-       LDKChannelId ret_var = ChannelId_new(a_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
+int64_t  CS_LDK_InvoiceRequestFields_get_quantity(int64_t this_ptr) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequestFields_get_quantity(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
 
-static inline uint64_t ChannelId_clone_ptr(LDKChannelId *NONNULL_PTR arg) {
-       LDKChannelId ret_var = ChannelId_clone(arg);
+void  CS_LDK_InvoiceRequestFields_set_quantity(int64_t this_ptr, int64_t val) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       InvoiceRequestFields_set_quantity(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_InvoiceRequestFields_get_payer_note_truncated(int64_t this_ptr) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString ret_var = InvoiceRequestFields_get_payer_note_truncated(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelId_clone_ptr(int64_t arg) {
-       LDKChannelId arg_conv;
+
+void  CS_LDK_InvoiceRequestFields_set_payer_note_truncated(int64_t this_ptr, int64_t val) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = UntrustedString_clone(&val_conv);
+       InvoiceRequestFields_set_payer_note_truncated(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_InvoiceRequestFields_new(int8_tArray payer_id_arg, int64_t quantity_arg, int64_t payer_note_truncated_arg) {
+       LDKPublicKey payer_id_arg_ref;
+       CHECK(payer_id_arg->arr_len == 33);
+       memcpy(payer_id_arg_ref.compressed_form, payer_id_arg->elems, 33); FREE(payer_id_arg);
+       void* quantity_arg_ptr = untag_ptr(quantity_arg);
+       CHECK_ACCESS(quantity_arg_ptr);
+       LDKCOption_u64Z quantity_arg_conv = *(LDKCOption_u64Z*)(quantity_arg_ptr);
+       quantity_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(quantity_arg));
+       LDKUntrustedString payer_note_truncated_arg_conv;
+       payer_note_truncated_arg_conv.inner = untag_ptr(payer_note_truncated_arg);
+       payer_note_truncated_arg_conv.is_owned = ptr_is_owned(payer_note_truncated_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payer_note_truncated_arg_conv);
+       payer_note_truncated_arg_conv = UntrustedString_clone(&payer_note_truncated_arg_conv);
+       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_new(payer_id_arg_ref, quantity_arg_conv, payer_note_truncated_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t InvoiceRequestFields_clone_ptr(LDKInvoiceRequestFields *NONNULL_PTR arg) {
+       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_InvoiceRequestFields_clone_ptr(int64_t arg) {
+       LDKInvoiceRequestFields arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelId_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvoiceRequestFields_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelId_clone(int64_t orig) {
-       LDKChannelId orig_conv;
+int64_t  CS_LDK_InvoiceRequestFields_clone(int64_t orig) {
+       LDKInvoiceRequestFields orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelId ret_var = ChannelId_clone(&orig_conv);
+       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelId_eq(int64_t a, int64_t b) {
-       LDKChannelId a_conv;
+jboolean  CS_LDK_InvoiceRequestFields_eq(int64_t a, int64_t b) {
+       LDKInvoiceRequestFields a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKChannelId b_conv;
+       LDKInvoiceRequestFields b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = ChannelId_eq(&a_conv, &b_conv);
+       jboolean ret_conv = InvoiceRequestFields_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelId_hash(int64_t o) {
-       LDKChannelId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = ChannelId_hash(&o_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_InvoiceRequestFields_write(int64_t obj) {
+       LDKInvoiceRequestFields obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceRequestFields_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelId_v1_from_funding_txid(int8_tArray txid, int16_t output_index) {
-       uint8_t txid_arr[32];
-       CHECK(txid->arr_len == 32);
-       memcpy(txid_arr, txid->elems, 32); FREE(txid);
-       uint8_t (*txid_ref)[32] = &txid_arr;
-       LDKChannelId ret_var = ChannelId_v1_from_funding_txid(txid_ref, output_index);
+int64_t  CS_LDK_InvoiceRequestFields_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InvoiceRequestFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestFieldsDecodeErrorZ), "LDKCResult_InvoiceRequestFieldsDecodeErrorZ");
+       *ret_conv = InvoiceRequestFields_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_TaggedHash_free(int64_t this_obj) {
+       LDKTaggedHash this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       TaggedHash_free(this_obj_conv);
+}
+
+static inline uint64_t TaggedHash_clone_ptr(LDKTaggedHash *NONNULL_PTR arg) {
+       LDKTaggedHash ret_var = TaggedHash_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_TaggedHash_clone_ptr(int64_t arg) {
+       LDKTaggedHash arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = TaggedHash_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_ChannelId_v1_from_funding_outpoint(int64_t outpoint) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       LDKChannelId ret_var = ChannelId_v1_from_funding_outpoint(outpoint_conv);
+int64_t  CS_LDK_TaggedHash_clone(int64_t orig) {
+       LDKTaggedHash orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKTaggedHash ret_var = TaggedHash_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelId_temporary_from_entropy_source(int64_t entropy_source) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       LDKChannelId ret_var = ChannelId_temporary_from_entropy_source(entropy_source_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int8_tArray  CS_LDK_TaggedHash_as_digest(int64_t this_arg) {
+       LDKTaggedHash this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *TaggedHash_as_digest(&this_arg_conv), 32);
+       return ret_arr;
+}
+
+jstring  CS_LDK_TaggedHash_tag(int64_t this_arg) {
+       LDKTaggedHash this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKStr ret_str = TaggedHash_tag(&this_arg_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_TaggedHash_merkle_root(int64_t this_arg) {
+       LDKTaggedHash this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, TaggedHash_merkle_root(&this_arg_conv).data, 32);
+       return ret_arr;
+}
+
+void  CS_LDK_SignError_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignError this_ptr_conv = *(LDKSignError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignError_free(this_ptr_conv);
+}
+
+static inline uint64_t SignError_clone_ptr(LDKSignError *NONNULL_PTR arg) {
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_SignError_clone_ptr(int64_t arg) {
+       LDKSignError* arg_conv = (LDKSignError*)untag_ptr(arg);
+       int64_t ret_conv = SignError_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_ChannelId_from_bytes(int8_tArray data) {
-       LDKThirtyTwoBytes data_ref;
-       CHECK(data->arr_len == 32);
-       memcpy(data_ref.data, data->elems, 32); FREE(data);
-       LDKChannelId ret_var = ChannelId_from_bytes(data_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SignError_clone(int64_t orig) {
+       LDKSignError* orig_conv = (LDKSignError*)untag_ptr(orig);
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelId_new_zero() {
-       LDKChannelId ret_var = ChannelId_new_zero();
+int64_t  CS_LDK_SignError_signing() {
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_signing();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SignError_verification(int32_t a) {
+       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_verification(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_Nonce_free(int64_t this_obj) {
+       LDKNonce this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Nonce_free(this_obj_conv);
+}
+
+static inline uint64_t Nonce_clone_ptr(LDKNonce *NONNULL_PTR arg) {
+       LDKNonce ret_var = Nonce_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-jboolean  CS_LDK_ChannelId_is_zero(int64_t this_arg) {
-       LDKChannelId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelId_is_zero(&this_arg_conv);
+int64_t  CS_LDK_Nonce_clone_ptr(int64_t arg) {
+       LDKNonce arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Nonce_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelId_v2_from_revocation_basepoints(int64_t ours, int64_t theirs) {
-       LDKRevocationBasepoint ours_conv;
-       ours_conv.inner = untag_ptr(ours);
-       ours_conv.is_owned = ptr_is_owned(ours);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ours_conv);
-       ours_conv.is_owned = false;
-       LDKRevocationBasepoint theirs_conv;
-       theirs_conv.inner = untag_ptr(theirs);
-       theirs_conv.is_owned = ptr_is_owned(theirs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(theirs_conv);
-       theirs_conv.is_owned = false;
-       LDKChannelId ret_var = ChannelId_v2_from_revocation_basepoints(&ours_conv, &theirs_conv);
+int64_t  CS_LDK_Nonce_clone(int64_t orig) {
+       LDKNonce orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKNonce ret_var = Nonce_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelId_temporary_v2_from_revocation_basepoint(int64_t our_revocation_basepoint) {
-       LDKRevocationBasepoint our_revocation_basepoint_conv;
-       our_revocation_basepoint_conv.inner = untag_ptr(our_revocation_basepoint);
-       our_revocation_basepoint_conv.is_owned = ptr_is_owned(our_revocation_basepoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(our_revocation_basepoint_conv);
-       our_revocation_basepoint_conv.is_owned = false;
-       LDKChannelId ret_var = ChannelId_temporary_v2_from_revocation_basepoint(&our_revocation_basepoint_conv);
+jboolean  CS_LDK_Nonce_eq(int64_t a, int64_t b) {
+       LDKNonce a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNonce b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Nonce_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Nonce_from_entropy_source(int64_t entropy_source) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKNonce ret_var = Nonce_from_entropy_source(entropy_source_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_ChannelId_write(int64_t obj) {
-       LDKChannelId obj_conv;
+int8_tArray  CS_LDK_Nonce_as_slice(int64_t this_arg) {
+       LDKNonce this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Nonce_as_slice(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_Nonce_write(int64_t obj) {
+       LDKNonce obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelId_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Nonce_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelId_read(int8_tArray ser) {
+int64_t  CS_LDK_Nonce_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_ChannelIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelIdDecodeErrorZ), "LDKCResult_ChannelIdDecodeErrorZ");
-       *ret_conv = ChannelId_read(ser_ref);
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = Nonce_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-jstring  CS_LDK_ChannelId_to_str(int64_t o) {
-       LDKChannelId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ChannelId_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+void  CS_LDK_Bolt12ParseError_free(int64_t this_obj) {
+       LDKBolt12ParseError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12ParseError_free(this_obj_conv);
 }
 
-void  CS_LDK_Retry_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKRetry this_ptr_conv = *(LDKRetry*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Retry_free(this_ptr_conv);
+static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Bolt12ParseError_clone_ptr(int64_t arg) {
+       LDKBolt12ParseError arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Retry_clone_ptr(LDKRetry *NONNULL_PTR arg) {
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_Bolt12ParseError_clone(int64_t orig) {
+       LDKBolt12ParseError orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Retry_clone_ptr(int64_t arg) {
-       LDKRetry* arg_conv = (LDKRetry*)untag_ptr(arg);
-       int64_t ret_conv = Retry_clone_ptr(arg_conv);
+
+int32_t  CS_LDK_Bolt12SemanticError_clone(int64_t orig) {
+       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_clone(orig_conv));
        return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_clone(int64_t orig) {
-       LDKRetry* orig_conv = (LDKRetry*)untag_ptr(orig);
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_already_expired() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_already_expired());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_attempts(int32_t a) {
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_attempts(a);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unsupported_chain() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_chain());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_timeout(int64_t a) {
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_timeout(a);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_chain() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_chain());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_Retry_eq(int64_t a, int64_t b) {
-       LDKRetry* a_conv = (LDKRetry*)untag_ptr(a);
-       LDKRetry* b_conv = (LDKRetry*)untag_ptr(b);
-       jboolean ret_conv = Retry_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_amount());
        return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_hash(int64_t o) {
-       LDKRetry* o_conv = (LDKRetry*)untag_ptr(o);
-       int64_t ret_conv = Retry_hash(o_conv);
+int32_t  CS_LDK_Bolt12SemanticError_invalid_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_amount());
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Retry_write(int64_t obj) {
-       LDKRetry* obj_conv = (LDKRetry*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = Retry_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int32_t  CS_LDK_Bolt12SemanticError_insufficient_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_insufficient_amount());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
-       *ret_conv = Retry_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_amount());
+       return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_clone(int64_t orig) {
-       LDKRetryableSendFailure* orig_conv = (LDKRetryableSendFailure*)untag_ptr(orig);
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_clone(orig_conv));
+int32_t  CS_LDK_Bolt12SemanticError_unsupported_currency() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_currency());
        return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_payment_expired() {
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_payment_expired());
+int32_t  CS_LDK_Bolt12SemanticError_unknown_required_features() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unknown_required_features());
        return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_route_not_found() {
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_route_not_found());
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_features() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_features());
        return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_duplicate_payment() {
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_duplicate_payment());
+int32_t  CS_LDK_Bolt12SemanticError_missing_description() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_description());
        return ret_conv;
 }
 
-jboolean  CS_LDK_RetryableSendFailure_eq(int64_t a, int64_t b) {
-       LDKRetryableSendFailure* a_conv = (LDKRetryableSendFailure*)untag_ptr(a);
-       LDKRetryableSendFailure* b_conv = (LDKRetryableSendFailure*)untag_ptr(b);
-       jboolean ret_conv = RetryableSendFailure_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_signing_pubkey() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signing_pubkey());
        return ret_conv;
 }
 
-void  CS_LDK_PaymentSendFailure_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPaymentSendFailure this_ptr_conv = *(LDKPaymentSendFailure*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PaymentSendFailure_free(this_ptr_conv);
+int32_t  CS_LDK_Bolt12SemanticError_invalid_signing_pubkey() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_signing_pubkey());
+       return ret_conv;
 }
 
-static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_signing_pubkey() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_signing_pubkey());
+       return ret_conv;
 }
-int64_t  CS_LDK_PaymentSendFailure_clone_ptr(int64_t arg) {
-       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)untag_ptr(arg);
-       int64_t ret_conv = PaymentSendFailure_clone_ptr(arg_conv);
+
+int32_t  CS_LDK_Bolt12SemanticError_missing_quantity() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_quantity());
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_clone(int64_t orig) {
-       LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)untag_ptr(orig);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_invalid_quantity() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_quantity());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_parameter_error(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKAPIError a_conv = *(LDKAPIError*)(a_ptr);
-       a_conv = APIError_clone((LDKAPIError*)untag_ptr(a));
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_parameter_error(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_quantity() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_quantity());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_path_parameter_error(int64_tArray a) {
-       LDKCVec_CResult_NoneAPIErrorZZ a_constr;
-       a_constr.datalen = a->arr_len;
-       if (a_constr.datalen > 0)
-               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
-       else
-               a_constr.data = NULL;
-       int64_t* a_vals = a->elems;
-       for (size_t w = 0; w < a_constr.datalen; w++) {
-               int64_t a_conv_22 = a_vals[w];
-               void* a_conv_22_ptr = untag_ptr(a_conv_22);
-               CHECK_ACCESS(a_conv_22_ptr);
-               LDKCResult_NoneAPIErrorZ a_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(a_conv_22_ptr);
-               a_conv_22_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)untag_ptr(a_conv_22));
-               a_constr.data[w] = a_conv_22_conv;
-       }
-       FREE(a);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_path_parameter_error(a_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_invalid_metadata() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_metadata());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_all_failed_resend_safe(int64_tArray a) {
-       LDKCVec_APIErrorZ a_constr;
-       a_constr.datalen = a->arr_len;
-       if (a_constr.datalen > 0)
-               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKAPIError), "LDKCVec_APIErrorZ Elements");
-       else
-               a_constr.data = NULL;
-       int64_t* a_vals = a->elems;
-       for (size_t k = 0; k < a_constr.datalen; k++) {
-               int64_t a_conv_10 = a_vals[k];
-               void* a_conv_10_ptr = untag_ptr(a_conv_10);
-               CHECK_ACCESS(a_conv_10_ptr);
-               LDKAPIError a_conv_10_conv = *(LDKAPIError*)(a_conv_10_ptr);
-               a_conv_10_conv = APIError_clone((LDKAPIError*)untag_ptr(a_conv_10));
-               a_constr.data[k] = a_conv_10_conv;
-       }
-       FREE(a);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_all_failed_resend_safe(a_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_metadata() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_metadata());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_duplicate_payment() {
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_duplicate_payment();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_payer_metadata() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_metadata());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_partial_failure(int64_tArray results, int64_t failed_paths_retry, int8_tArray payment_id) {
-       LDKCVec_CResult_NoneAPIErrorZZ results_constr;
-       results_constr.datalen = results->arr_len;
-       if (results_constr.datalen > 0)
-               results_constr.data = MALLOC(results_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
-       else
-               results_constr.data = NULL;
-       int64_t* results_vals = results->elems;
-       for (size_t w = 0; w < results_constr.datalen; w++) {
-               int64_t results_conv_22 = results_vals[w];
-               void* results_conv_22_ptr = untag_ptr(results_conv_22);
-               CHECK_ACCESS(results_conv_22_ptr);
-               LDKCResult_NoneAPIErrorZ results_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(results_conv_22_ptr);
-               results_constr.data[w] = results_conv_22_conv;
-       }
-       FREE(results);
-       LDKRouteParameters failed_paths_retry_conv;
-       failed_paths_retry_conv.inner = untag_ptr(failed_paths_retry);
-       failed_paths_retry_conv.is_owned = ptr_is_owned(failed_paths_retry);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
-       failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_partial_failure(results_constr, failed_paths_retry_conv, payment_id_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_payer_id() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_id());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_PaymentSendFailure_eq(int64_t a, int64_t b) {
-       LDKPaymentSendFailure* a_conv = (LDKPaymentSendFailure*)untag_ptr(a);
-       LDKPaymentSendFailure* b_conv = (LDKPaymentSendFailure*)untag_ptr(b);
-       jboolean ret_conv = PaymentSendFailure_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_duplicate_payment_id() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_duplicate_payment_id());
        return ret_conv;
 }
 
-void  CS_LDK_ProbeSendFailure_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKProbeSendFailure this_ptr_conv = *(LDKProbeSendFailure*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ProbeSendFailure_free(this_ptr_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_paths() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_paths());
+       return ret_conv;
 }
 
-static inline uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg) {
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_paths() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_paths());
+       return ret_conv;
 }
-int64_t  CS_LDK_ProbeSendFailure_clone_ptr(int64_t arg) {
-       LDKProbeSendFailure* arg_conv = (LDKProbeSendFailure*)untag_ptr(arg);
-       int64_t ret_conv = ProbeSendFailure_clone_ptr(arg_conv);
+
+int32_t  CS_LDK_Bolt12SemanticError_invalid_pay_info() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_pay_info());
        return ret_conv;
 }
 
-int64_t  CS_LDK_ProbeSendFailure_clone(int64_t orig) {
-       LDKProbeSendFailure* orig_conv = (LDKProbeSendFailure*)untag_ptr(orig);
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_creation_time() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_creation_time());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ProbeSendFailure_route_not_found() {
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_route_not_found();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_payment_hash() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payment_hash());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ProbeSendFailure_sending_failed(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKPaymentSendFailure a_conv = *(LDKPaymentSendFailure*)(a_ptr);
-       a_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(a));
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_sending_failed(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_payment_hash() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_payment_hash());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_ProbeSendFailure_eq(int64_t a, int64_t b) {
-       LDKProbeSendFailure* a_conv = (LDKProbeSendFailure*)untag_ptr(a);
-       LDKProbeSendFailure* b_conv = (LDKProbeSendFailure*)untag_ptr(b);
-       jboolean ret_conv = ProbeSendFailure_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_signature() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signature());
        return ret_conv;
 }
 
-void  CS_LDK_RecipientOnionFields_free(int64_t this_obj) {
-       LDKRecipientOnionFields this_obj_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_free(int64_t this_obj) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RecipientOnionFields_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_RecipientOnionFields_get_payment_secret(int64_t this_ptr) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
-       *ret_copy = RecipientOnionFields_get_payment_secret(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_RecipientOnionFields_set_payment_secret(int64_t this_ptr, int64_t val) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
-       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
-       RecipientOnionFields_set_payment_secret(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_RecipientOnionFields_get_payment_metadata(int64_t this_ptr) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = RecipientOnionFields_get_payment_metadata(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_RecipientOnionFields_set_payment_metadata(int64_t this_ptr, int64_t val) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
-       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
-       RecipientOnionFields_set_payment_metadata(&this_ptr_conv, val_conv);
+       RefundMaybeWithDerivedMetadataBuilder_free(this_obj_conv);
 }
 
-static inline uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg) {
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(arg);
+static inline uint64_t RefundMaybeWithDerivedMetadataBuilder_clone_ptr(LDKRefundMaybeWithDerivedMetadataBuilder *NONNULL_PTR arg) {
+       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RecipientOnionFields_clone_ptr(int64_t arg) {
-       LDKRecipientOnionFields arg_conv;
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
+       LDKRefundMaybeWithDerivedMetadataBuilder arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RecipientOnionFields_clone_ptr(&arg_conv);
+       int64_t ret_conv = RefundMaybeWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RecipientOnionFields_clone(int64_t orig) {
-       LDKRecipientOnionFields orig_conv;
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone(int64_t orig) {
+       LDKRefundMaybeWithDerivedMetadataBuilder orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(&orig_conv);
+       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_RecipientOnionFields_eq(int64_t a, int64_t b) {
-       LDKRecipientOnionFields a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRecipientOnionFields b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RecipientOnionFields_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_RecipientOnionFields_write(int64_t obj) {
-       LDKRecipientOnionFields obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RecipientOnionFields_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_new(int8_tArray metadata, int8_tArray payer_id, int64_t amount_msats) {
+       LDKCVec_u8Z metadata_ref;
+       metadata_ref.datalen = metadata->arr_len;
+       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
+       LDKPublicKey payer_id_ref;
+       CHECK(payer_id->arr_len == 33);
+       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
+       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
+       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_new(metadata_ref, payer_id_ref, amount_msats);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RecipientOnionFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsDecodeErrorZ), "LDKCResult_RecipientOnionFieldsDecodeErrorZ");
-       *ret_conv = RecipientOnionFields_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(int8_tArray node_id, int64_t expanded_key, int64_t nonce, int64_t amount_msats, int8_tArray payment_id) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
+       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(node_id_ref, &expanded_key_conv, nonce_conv, amount_msats, payment_id_ref);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_secret_only(int8_tArray payment_secret) {
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_secret_only(payment_secret_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       RefundMaybeWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_spontaneous_empty() {
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_spontaneous_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_with_custom_tlvs(int64_t this_arg, int64_tArray custom_tlvs) {
-       LDKRecipientOnionFields this_arg_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RecipientOnionFields_clone(&this_arg_conv);
-       LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs_constr;
-       custom_tlvs_constr.datalen = custom_tlvs->arr_len;
-       if (custom_tlvs_constr.datalen > 0)
-               custom_tlvs_constr.data = MALLOC(custom_tlvs_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
-       else
-               custom_tlvs_constr.data = NULL;
-       int64_t* custom_tlvs_vals = custom_tlvs->elems;
-       for (size_t x = 0; x < custom_tlvs_constr.datalen; x++) {
-               int64_t custom_tlvs_conv_23 = custom_tlvs_vals[x];
-               void* custom_tlvs_conv_23_ptr = untag_ptr(custom_tlvs_conv_23);
-               CHECK_ACCESS(custom_tlvs_conv_23_ptr);
-               LDKC2Tuple_u64CVec_u8ZZ custom_tlvs_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(custom_tlvs_conv_23_ptr);
-               custom_tlvs_conv_23_conv = C2Tuple_u64CVec_u8ZZ_clone((LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(custom_tlvs_conv_23));
-               custom_tlvs_constr.data[x] = custom_tlvs_conv_23_conv;
-       }
-       FREE(custom_tlvs);
-       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
-       *ret_conv = RecipientOnionFields_with_custom_tlvs(this_arg_conv, custom_tlvs_constr);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
+       RefundMaybeWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
 }
 
-int64_tArray  CS_LDK_RecipientOnionFields_custom_tlvs(int64_t this_arg) {
-       LDKRecipientOnionFields this_arg_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret_var = RecipientOnionFields_custom_tlvs(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t x = 0; x < ret_var.datalen; x++) {
-               LDKC2Tuple_u64CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
-               *ret_conv_23_conv = ret_var.data[x];
-               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKBlindedMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = BlindedMessagePath_clone(&path_conv);
+       RefundMaybeWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
 }
 
-void  CS_LDK_CustomMessageReader_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomMessageReader this_ptr_conv = *(LDKCustomMessageReader*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomMessageReader_free(this_ptr_conv);
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       RefundMaybeWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
 }
 
-static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
-       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
-       *ret_ret = Type_clone(arg);
-       return tag_ptr(ret_ret, true);
-}
-int64_t  CS_LDK_Type_clone_ptr(int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKType* arg_conv = (LDKType*)arg_ptr;
-       int64_t ret_conv = Type_clone_ptr(arg_conv);
-       return ret_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_quantity(int64_t this_arg, int64_t quantity) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       RefundMaybeWithDerivedMetadataBuilder_quantity(this_arg_conv, quantity);
 }
 
-int64_t  CS_LDK_Type_clone(int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKType* orig_conv = (LDKType*)orig_ptr;
-       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
-       *ret_ret = Type_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_payer_note(int64_t this_arg, jstring payer_note) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
+       RefundMaybeWithDerivedMetadataBuilder_payer_note(this_arg_conv, payer_note_conv);
 }
 
-void  CS_LDK_Type_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKType this_ptr_conv = *(LDKType*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Type_free(this_ptr_conv);
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_build(int64_t this_arg) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKCResult_RefundBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12SemanticErrorZ), "LDKCResult_RefundBolt12SemanticErrorZ");
+       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_OfferId_free(int64_t this_obj) {
-       LDKOfferId this_obj_conv;
+void  CS_LDK_Refund_free(int64_t this_obj) {
+       LDKRefund this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferId_free(this_obj_conv);
-}
-
-int8_tArray  CS_LDK_OfferId_get_a(int64_t this_ptr) {
-       LDKOfferId this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *OfferId_get_a(&this_ptr_conv), 32);
-       return ret_arr;
-}
-
-void  CS_LDK_OfferId_set_a(int64_t this_ptr, int8_tArray val) {
-       LDKOfferId this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       OfferId_set_a(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_OfferId_new(int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK(a_arg->arr_len == 32);
-       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
-       LDKOfferId ret_var = OfferId_new(a_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       Refund_free(this_obj_conv);
 }
 
-static inline uint64_t OfferId_clone_ptr(LDKOfferId *NONNULL_PTR arg) {
-       LDKOfferId ret_var = OfferId_clone(arg);
+static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
+       LDKRefund ret_var = Refund_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_OfferId_clone_ptr(int64_t arg) {
-       LDKOfferId arg_conv;
+int64_t  CS_LDK_Refund_clone_ptr(int64_t arg) {
+       LDKRefund arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = OfferId_clone_ptr(&arg_conv);
+       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferId_clone(int64_t orig) {
-       LDKOfferId orig_conv;
+int64_t  CS_LDK_Refund_clone(int64_t orig) {
+       LDKRefund orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOfferId ret_var = OfferId_clone(&orig_conv);
+       LDKRefund ret_var = Refund_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_OfferId_eq(int64_t a, int64_t b) {
-       LDKOfferId a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKOfferId b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = OfferId_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_OfferId_write(int64_t obj) {
-       LDKOfferId obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = OfferId_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_Refund_description(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferId_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_OfferIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferIdDecodeErrorZ), "LDKCResult_OfferIdDecodeErrorZ");
-       *ret_conv = OfferId_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_OfferWithExplicitMetadataBuilder_free(int64_t this_obj) {
-       LDKOfferWithExplicitMetadataBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferWithExplicitMetadataBuilder_free(this_obj_conv);
-}
-
-static inline uint64_t OfferWithExplicitMetadataBuilder_clone_ptr(LDKOfferWithExplicitMetadataBuilder *NONNULL_PTR arg) {
-       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone_ptr(int64_t arg) {
-       LDKOfferWithExplicitMetadataBuilder arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OfferWithExplicitMetadataBuilder_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone(int64_t orig) {
-       LDKOfferWithExplicitMetadataBuilder orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Refund_absolute_expiry(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_free(int64_t this_obj) {
-       LDKOfferWithDerivedMetadataBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferWithDerivedMetadataBuilder_free(this_obj_conv);
-}
-
-static inline uint64_t OfferWithDerivedMetadataBuilder_clone_ptr(LDKOfferWithDerivedMetadataBuilder *NONNULL_PTR arg) {
-       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
-       LDKOfferWithDerivedMetadataBuilder arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OfferWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
+jboolean  CS_LDK_Refund_is_expired(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone(int64_t orig) {
-       LDKOfferWithDerivedMetadataBuilder orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_Refund_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Refund_is_expired_no_std(&this_arg_conv, duration_since_epoch);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_new(int8_tArray signing_pubkey) {
-       LDKPublicKey signing_pubkey_ref;
-       CHECK(signing_pubkey->arr_len == 33);
-       memcpy(signing_pubkey_ref.compressed_form, signing_pubkey->elems, 33); FREE(signing_pubkey);
-       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_new(signing_pubkey_ref);
+int64_t  CS_LDK_Refund_issuer(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_metadata(int64_t this_arg, int8_tArray metadata) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_tArray  CS_LDK_Refund_paths(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKCVec_u8Z metadata_ref;
-       metadata_ref.datalen = metadata->arr_len;
-       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = OfferWithExplicitMetadataBuilder_metadata(this_arg_conv, metadata_ref);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedMessagePathZ ret_var = Refund_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int8_tArray  CS_LDK_Refund_payer_metadata(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       OfferWithExplicitMetadataBuilder_chain(this_arg_conv, network_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Refund_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int8_tArray  CS_LDK_Refund_chain(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       OfferWithExplicitMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Refund_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_amount_msats(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       OfferWithExplicitMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_description(int64_t this_arg, jstring description) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_features(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       OfferWithExplicitMetadataBuilder_description(this_arg_conv, description_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_quantity(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
-       OfferWithExplicitMetadataBuilder_issuer(this_arg_conv, issuer_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_path(int64_t this_arg, int64_t path) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int8_tArray  CS_LDK_Refund_payer_id(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKBlindedPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = BlindedPath_clone(&path_conv);
-       OfferWithExplicitMetadataBuilder_path(this_arg_conv, path_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Refund_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_payer_note(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       void* quantity_ptr = untag_ptr(quantity);
-       CHECK_ACCESS(quantity_ptr);
-       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
-       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
-       OfferWithExplicitMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_build(int64_t this_arg) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
-       *ret_conv = OfferWithExplicitMetadataBuilder_build(this_arg_conv);
+int64_t  CS_LDK_Refund_hash(int64_t o) {
+       LDKRefund o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Refund_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Refund_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = Refund_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(int8_tArray node_id, int64_t expanded_key, int64_t entropy_source) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(node_id_ref, &expanded_key_conv, entropy_source_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_Refund_write(int64_t obj) {
+       LDKRefund obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Refund_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       OfferWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
+int64_t  CS_LDK_Refund_from_str(jstring s) {
+       LDKStr s_conv = str_ref_to_owned_c(s);
+       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
+       *ret_conv = Refund_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       OfferWithDerivedMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
+jstring  CS_LDK_Refund_to_str(int64_t o) {
+       LDKRefund o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = Refund_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       OfferWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
+int32_t  CS_LDK_UtxoLookupError_clone(int64_t orig) {
+       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
+       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_clone(orig_conv));
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       OfferWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
+int32_t  CS_LDK_UtxoLookupError_unknown_chain() {
+       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_chain());
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
-       OfferWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
+int32_t  CS_LDK_UtxoLookupError_unknown_tx() {
+       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_tx());
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKBlindedPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = BlindedPath_clone(&path_conv);
-       OfferWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
+void  CS_LDK_UtxoResult_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoResult_free(this_ptr_conv);
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       void* quantity_ptr = untag_ptr(quantity);
-       CHECK_ACCESS(quantity_ptr);
-       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
-       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
-       OfferWithDerivedMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
+static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_UtxoResult_clone_ptr(int64_t arg) {
+       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
+       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_build(int64_t this_arg) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
-       *ret_conv = OfferWithDerivedMetadataBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_UtxoResult_clone(int64_t orig) {
+       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Offer_free(int64_t this_obj) {
-       LDKOffer this_obj_conv;
+int64_t  CS_LDK_UtxoResult_sync(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
+       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_sync(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_UtxoResult_async(int64_t a) {
+       LDKUtxoFuture a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = UtxoFuture_clone(&a_conv);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_async(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_UtxoLookup_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoLookup_free(this_ptr_conv);
+}
+
+void  CS_LDK_UtxoFuture_free(int64_t this_obj) {
+       LDKUtxoFuture this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Offer_free(this_obj_conv);
+       UtxoFuture_free(this_obj_conv);
 }
 
-static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
-       LDKOffer ret_var = Offer_clone(arg);
+static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
+       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Offer_clone_ptr(int64_t arg) {
-       LDKOffer arg_conv;
+int64_t  CS_LDK_UtxoFuture_clone_ptr(int64_t arg) {
+       LDKUtxoFuture arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
+       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_clone(int64_t orig) {
-       LDKOffer orig_conv;
+int64_t  CS_LDK_UtxoFuture_clone(int64_t orig) {
+       LDKUtxoFuture orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOffer ret_var = Offer_clone(&orig_conv);
+       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-ptrArray  CS_LDK_Offer_chains(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = Offer_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+int64_t  CS_LDK_UtxoFuture_new() {
+       LDKUtxoFuture ret_var = UtxoFuture_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Offer_metadata(int64_t this_arg) {
-       LDKOffer this_arg_conv;
+void  CS_LDK_UtxoFuture_resolve_without_forwarding(int64_t this_arg, int64_t graph, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = Offer_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       result_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(result));
+       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
 }
 
-int64_t  CS_LDK_Offer_amount(int64_t this_arg) {
-       LDKOffer this_arg_conv;
+void  CS_LDK_UtxoFuture_resolve(int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = Offer_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       LDKP2PGossipSync gossip_conv;
+       gossip_conv.inner = untag_ptr(gossip);
+       gossip_conv.is_owned = ptr_is_owned(gossip);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
+       gossip_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       result_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(result));
+       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
 }
 
-int64_t  CS_LDK_Offer_description(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_NodeId_free(int64_t this_obj) {
+       LDKNodeId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeId_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Offer_offer_features(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = Offer_offer_features(&this_arg_conv);
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-int64_t  CS_LDK_Offer_absolute_expiry(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeId_clone_ptr(int64_t arg) {
+       LDKNodeId arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_issuer(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+int64_t  CS_LDK_NodeId_clone(int64_t orig) {
+       LDKNodeId orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKNodeId ret_var = NodeId_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_Offer_paths(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Offer_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_Offer_supported_quantity(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Offer_supported_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_Offer_signing_pubkey(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Offer_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+jboolean  CS_LDK_NodeId_eq(int64_t a, int64_t b) {
+       LDKNodeId a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeId b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeId_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_id(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferId ret_var = Offer_id(&this_arg_conv);
+int64_t  CS_LDK_NodeId_from_pubkey(int8_tArray pubkey) {
+       LDKPublicKey pubkey_ref;
+       CHECK(pubkey->arr_len == 33);
+       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
+       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Offer_supports_chain(int64_t this_arg, int8_tArray chain) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKThirtyTwoBytes chain_ref;
-       CHECK(chain->arr_len == 32);
-       memcpy(chain_ref.data, chain->elems, 32); FREE(chain);
-       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Offer_is_expired(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Offer_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_expired_no_std(&this_arg_conv, duration_since_epoch);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Offer_is_valid_quantity(int64_t this_arg, int64_t quantity) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
-       return ret_conv;
+int64_t  CS_LDK_NodeId_from_slice(int8_tArray bytes) {
+       LDKu8slice bytes_ref;
+       bytes_ref.datalen = bytes->arr_len;
+       bytes_ref.data = bytes->elems;
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = NodeId_from_slice(bytes_ref);
+       FREE(bytes);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_Offer_expects_quantity(int64_t this_arg) {
-       LDKOffer this_arg_conv;
+int8_tArray  CS_LDK_NodeId_as_slice(int64_t this_arg) {
+       LDKNodeId this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Offer_request_invoice_deriving_payer_id(int64_t this_arg, int64_t expanded_key, int64_t entropy_source, int8_tArray payment_id) {
-       LDKOffer this_arg_conv;
+int8_tArray  CS_LDK_NodeId_as_array(int64_t this_arg) {
+       LDKNodeId this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ");
-       *ret_conv = Offer_request_invoice_deriving_payer_id(&this_arg_conv, &expanded_key_conv, entropy_source_conv, payment_id_ref);
-       return tag_ptr(ret_conv, true);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, *NodeId_as_array(&this_arg_conv), 33);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Offer_request_invoice_deriving_metadata(int64_t this_arg, int8_tArray payer_id, int64_t expanded_key, int64_t entropy_source, int8_tArray payment_id) {
-       LDKOffer this_arg_conv;
+int64_t  CS_LDK_NodeId_as_pubkey(int64_t this_arg) {
+       LDKNodeId this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPublicKey payer_id_ref;
-       CHECK(payer_id->arr_len == 33);
-       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
-       *ret_conv = Offer_request_invoice_deriving_metadata(&this_arg_conv, payer_id_ref, &expanded_key_conv, entropy_source_conv, payment_id_ref);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Offer_request_invoice(int64_t this_arg, int8_tArray metadata, int8_tArray payer_id) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_u8Z metadata_ref;
-       metadata_ref.datalen = metadata->arr_len;
-       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
-       LDKPublicKey payer_id_ref;
-       CHECK(payer_id->arr_len == 33);
-       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
-       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
-       *ret_conv = Offer_request_invoice(&this_arg_conv, metadata_ref, payer_id_ref);
-       return tag_ptr(ret_conv, true);
+jstring  CS_LDK_NodeId_to_str(int64_t o) {
+       LDKNodeId o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NodeId_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_hash(int64_t o) {
-       LDKOffer o_conv;
+int64_t  CS_LDK_NodeId_hash(int64_t o) {
+       LDKNodeId o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Offer_hash(&o_conv);
+       int64_t ret_conv = NodeId_hash(&o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Offer_write(int64_t obj) {
-       LDKOffer obj_conv;
+int8_tArray  CS_LDK_NodeId_write(int64_t obj) {
+       LDKNodeId obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Offer_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_Amount_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKAmount this_ptr_conv = *(LDKAmount*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Amount_free(this_ptr_conv);
-}
-
-static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_Amount_clone_ptr(int64_t arg) {
-       LDKAmount* arg_conv = (LDKAmount*)untag_ptr(arg);
-       int64_t ret_conv = Amount_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Amount_clone(int64_t orig) {
-       LDKAmount* orig_conv = (LDKAmount*)untag_ptr(orig);
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeId_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = NodeId_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Amount_bitcoin(int64_t amount_msats) {
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_bitcoin(amount_msats);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NetworkGraph_free(int64_t this_obj) {
+       LDKNetworkGraph this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NetworkGraph_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Amount_currency(int8_tArray iso4217_code, int64_t amount) {
-       LDKThreeBytes iso4217_code_ref;
-       CHECK(iso4217_code->arr_len == 3);
-       memcpy(iso4217_code_ref.data, iso4217_code->elems, 3); FREE(iso4217_code);
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_currency(iso4217_code_ref, amount);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ReadOnlyNetworkGraph_free(int64_t this_obj) {
+       LDKReadOnlyNetworkGraph this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
-void  CS_LDK_Quantity_free(int64_t this_ptr) {
+void  CS_LDK_NetworkUpdate_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKQuantity this_ptr_conv = *(LDKQuantity*)(this_ptr_ptr);
+       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       Quantity_free(this_ptr_conv);
+       NetworkUpdate_free(this_ptr_conv);
 }
 
-static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_clone(arg);
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_Quantity_clone_ptr(int64_t arg) {
-       LDKQuantity* arg_conv = (LDKQuantity*)untag_ptr(arg);
-       int64_t ret_conv = Quantity_clone_ptr(arg_conv);
+int64_t  CS_LDK_NetworkUpdate_clone_ptr(int64_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
+       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Quantity_clone(int64_t orig) {
-       LDKQuantity* orig_conv = (LDKQuantity*)untag_ptr(orig);
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_clone(orig_conv);
+int64_t  CS_LDK_NetworkUpdate_clone(int64_t orig) {
+       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Quantity_bounded(int64_t a) {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_bounded(a);
+int64_t  CS_LDK_NetworkUpdate_channel_failure(int64_t short_channel_id, jboolean is_permanent) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Quantity_unbounded() {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_unbounded();
+int64_t  CS_LDK_NetworkUpdate_node_failure(int8_tArray node_id, jboolean is_permanent) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Quantity_one() {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_one();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NetworkUpdate_eq(int64_t a, int64_t b) {
+       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
+       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
+       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_from_str(jstring s) {
-       LDKStr s_conv = str_ref_to_owned_c(s);
-       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
-       *ret_conv = Offer_from_str(s_conv);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_NetworkUpdate_write(int64_t obj) {
+       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jstring  CS_LDK_Offer_to_str(int64_t o) {
-       LDKOffer o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = Offer_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+int64_t  CS_LDK_NetworkUpdate_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_free(int64_t this_obj) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_obj_conv;
+void  CS_LDK_P2PGossipSync_free(int64_t this_obj) {
+       LDKP2PGossipSync this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceWithExplicitSigningPubkeyBuilder_free(this_obj_conv);
+       P2PGossipSync_free(this_obj_conv);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_free(int64_t this_obj) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceWithDerivedSigningPubkeyBuilder_free(this_obj_conv);
+int64_t  CS_LDK_P2PGossipSync_new(int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_build(int64_t this_arg) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
+void  CS_LDK_P2PGossipSync_add_utxo_lookup(int64_t this_arg, int64_t utxo_lookup) {
+       LDKP2PGossipSync this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ");
-       *ret_conv = InvoiceWithExplicitSigningPubkeyBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_conv);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
+void  CS_LDK_NetworkGraph_handle_network_update(int64_t this_arg, int64_t network_update) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
+       this_arg_conv.is_owned = false;
+       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
+       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
+int8_tArray  CS_LDK_NetworkGraph_get_chain_hash(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       uint8_t script_hash_arr[32];
-       CHECK(script_hash->arr_len == 32);
-       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
-       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
-       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, NetworkGraph_get_chain_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
+int64_t  CS_LDK_verify_node_announcement(int64_t msg) {
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_node_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       LDKTweakedPublicKey utput_key_ref;
-       CHECK(utput_key->arr_len == 32);
-       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
-       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
-}
-
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(this_arg_conv);
+int64_t  CS_LDK_verify_channel_announcement(int64_t msg) {
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_channel_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(int64_t this_arg) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
+int64_t  CS_LDK_P2PGossipSync_as_RoutingMessageHandler(int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ");
-       *ret_conv = InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv.is_owned = false;
+       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
+       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
+int64_t  CS_LDK_P2PGossipSync_as_MessageSendEventsProvider(int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
+       this_arg_conv.is_owned = false;
+       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
+       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       uint8_t script_hash_arr[32];
-       CHECK(script_hash->arr_len == 32);
-       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
-       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
-       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
+void  CS_LDK_ChannelUpdateInfo_free(int64_t this_obj) {
+       LDKChannelUpdateInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUpdateInfo_free(this_obj_conv);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
+int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       LDKTweakedPublicKey utput_key_ref;
-       CHECK(utput_key->arr_len == 32);
-       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
-       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
+void  CS_LDK_ChannelUpdateInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(this_arg_conv);
+int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_UnsignedBolt12Invoice_free(int64_t this_obj) {
-       LDKUnsignedBolt12Invoice this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedBolt12Invoice_free(this_obj_conv);
+void  CS_LDK_ChannelUpdateInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t UnsignedBolt12Invoice_clone_ptr(LDKUnsignedBolt12Invoice *NONNULL_PTR arg) {
-       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(arg);
+int64_t  CS_LDK_ChannelUpdateInfo_get_fees(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_UnsignedBolt12Invoice_clone_ptr(int64_t arg) {
-       LDKUnsignedBolt12Invoice arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_clone_ptr(&arg_conv);
+
+void  CS_LDK_ChannelUpdateInfo_set_fees(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
+}
+
+int32_t  CS_LDK_ChannelUpdateInfo_get_last_update(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_clone(int64_t orig) {
-       LDKUnsignedBolt12Invoice orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(&orig_conv);
+void  CS_LDK_ChannelUpdateInfo_set_last_update(int64_t this_ptr, int32_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_ChannelUpdateInfo_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelUpdateInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+jboolean  CS_LDK_ChannelUpdateInfo_get_enabled(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelUpdateInfo_set_enabled(int64_t this_ptr, jboolean val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelUpdateInfo_get_last_update_message(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_SignBolt12InvoiceFn_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignBolt12InvoiceFn this_ptr_conv = *(LDKSignBolt12InvoiceFn*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignBolt12InvoiceFn_free(this_ptr_conv);
+void  CS_LDK_ChannelUpdateInfo_set_last_update_message(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdate val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdate_clone(&val_conv);
+       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_tagged_hash(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTaggedHash ret_var = UnsignedBolt12Invoice_tagged_hash(&this_arg_conv);
+int64_t  CS_LDK_ChannelUpdateInfo_new(int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int32_t last_update_arg, int16_t cltv_expiry_delta_arg, jboolean enabled_arg, int64_t last_update_message_arg) {
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       LDKChannelUpdate last_update_message_arg_conv;
+       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
+       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
+       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_arg, cltv_expiry_delta_arg, enabled_arg, last_update_message_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Bolt12Invoice_free(int64_t this_obj) {
-       LDKBolt12Invoice this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12Invoice_free(this_obj_conv);
-}
-
-static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
+static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12Invoice_clone_ptr(int64_t arg) {
-       LDKBolt12Invoice arg_conv;
+int64_t  CS_LDK_ChannelUpdateInfo_clone_ptr(int64_t arg) {
+       LDKChannelUpdateInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_clone(int64_t orig) {
-       LDKBolt12Invoice orig_conv;
+int64_t  CS_LDK_ChannelUpdateInfo_clone(int64_t orig) {
+       LDKChannelUpdateInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_offer_chains(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
-       *ret_copy = UnsignedBolt12Invoice_offer_chains(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelUpdateInfo_eq(int64_t a, int64_t b) {
+       LDKChannelUpdateInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelUpdateInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_chain(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_chain(&this_arg_conv).data, 32);
+jstring  CS_LDK_ChannelUpdateInfo_to_str(int64_t o) {
+       LDKChannelUpdateInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = ChannelUpdateInfo_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_ChannelUpdateInfo_write(int64_t obj) {
+       LDKChannelUpdateInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_metadata(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = UnsignedBolt12Invoice_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_ChannelUpdateInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
+       *ret_conv = ChannelUpdateInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_amount(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = UnsignedBolt12Invoice_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelInfo_free(int64_t this_obj) {
+       LDKChannelInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelInfo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_offer_features(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = UnsignedBolt12Invoice_offer_features(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_features(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_description(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedBolt12Invoice_description(&this_arg_conv);
+void  CS_LDK_ChannelInfo_set_features(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       ChannelInfo_set_features(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_ChannelInfo_get_node_one(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_absolute_expiry(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedBolt12Invoice_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelInfo_set_node_one(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_issuer(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedBolt12Invoice_issuer(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_node_two(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_UnsignedBolt12Invoice_message_paths(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = UnsignedBolt12Invoice_message_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+void  CS_LDK_ChannelInfo_set_node_two(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_supported_quantity(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
-       *ret_copy = UnsignedBolt12Invoice_supported_quantity(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_capacity_sats(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_metadata(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = UnsignedBolt12Invoice_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+void  CS_LDK_ChannelInfo_set_capacity_sats(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_request_features(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = UnsignedBolt12Invoice_invoice_request_features(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_one_to_two(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_quantity(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedBolt12Invoice_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+void  CS_LDK_ChannelInfo_set_one_to_two(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_ChannelInfo_get_two_to_one(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_id(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+void  CS_LDK_ChannelInfo_set_two_to_one(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_payer_note(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedBolt12Invoice_payer_note(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_announcement_message(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_created_at(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_created_at(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_ChannelInfo_set_announcement_message(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelAnnouncement val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelAnnouncement_clone(&val_conv);
+       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_relative_expiry(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_relative_expiry(&this_arg_conv);
-       return ret_conv;
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-jboolean  CS_LDK_UnsignedBolt12Invoice_is_expired(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = UnsignedBolt12Invoice_is_expired(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_clone_ptr(int64_t arg) {
+       LDKChannelInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_payment_hash(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payment_hash(&this_arg_conv).data, 32);
-       return ret_arr;
+int64_t  CS_LDK_ChannelInfo_clone(int64_t orig) {
+       LDKChannelInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_amount_msats(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_amount_msats(&this_arg_conv);
+jboolean  CS_LDK_ChannelInfo_eq(int64_t a, int64_t b) {
+       LDKChannelInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_features(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_ChannelInfo_get_directional_info(int64_t this_arg, int8_t channel_flags) {
+       LDKChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = UnsignedBolt12Invoice_invoice_features(&this_arg_conv);
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_signing_pubkey(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+jstring  CS_LDK_ChannelInfo_to_str(int64_t o) {
+       LDKChannelInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = ChannelInfo_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_offer_chains(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
-       *ret_copy = Bolt12Invoice_offer_chains(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_ChannelInfo_write(int64_t obj) {
+       LDKChannelInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int8_tArray  CS_LDK_Bolt12Invoice_chain(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_chain(&this_arg_conv).data, 32);
-       return ret_arr;
+int64_t  CS_LDK_ChannelInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = ChannelInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12Invoice_metadata(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = Bolt12Invoice_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_DirectedChannelInfo_free(int64_t this_obj) {
+       LDKDirectedChannelInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DirectedChannelInfo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Bolt12Invoice_amount(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = Bolt12Invoice_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_DirectedChannelInfo_clone_ptr(int64_t arg) {
+       LDKDirectedChannelInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_Bolt12Invoice_offer_features(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = Bolt12Invoice_offer_features(&this_arg_conv);
+int64_t  CS_LDK_DirectedChannelInfo_clone(int64_t orig) {
+       LDKDirectedChannelInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_description(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_channel(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
+       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_absolute_expiry(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_effective_capacity(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Bolt12Invoice_absolute_expiry(&this_arg_conv);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_issuer(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_source(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_issuer(&this_arg_conv);
+       LDKNodeId ret_var = DirectedChannelInfo_source(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_Bolt12Invoice_message_paths(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_target(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Bolt12Invoice_message_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       LDKNodeId ret_var = DirectedChannelInfo_target(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_supported_quantity(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
-       *ret_copy = Bolt12Invoice_supported_quantity(&this_arg_conv);
+void  CS_LDK_EffectiveCapacity_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EffectiveCapacity_free(this_ptr_conv);
+}
+
+static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_EffectiveCapacity_clone_ptr(int64_t arg) {
+       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
+       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int8_tArray  CS_LDK_Bolt12Invoice_payer_metadata(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = Bolt12Invoice_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+int64_t  CS_LDK_EffectiveCapacity_clone(int64_t orig) {
+       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_invoice_request_features(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = Bolt12Invoice_invoice_request_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_EffectiveCapacity_exact_liquidity(int64_t liquidity_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_quantity(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Bolt12Invoice_quantity(&this_arg_conv);
+int64_t  CS_LDK_EffectiveCapacity_advertised_max_htlc(int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_Bolt12Invoice_payer_id(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+int64_t  CS_LDK_EffectiveCapacity_total(int64_t capacity_msat, int64_t htlc_maximum_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_payer_note(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_payer_note(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_EffectiveCapacity_infinite() {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_infinite();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_created_at(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_EffectiveCapacity_hint_max_htlc(int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_relative_expiry(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_EffectiveCapacity_unknown() {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_unknown();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12Invoice_is_expired(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
+int64_t  CS_LDK_EffectiveCapacity_as_msat(int64_t this_arg) {
+       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
+       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Bolt12Invoice_payment_hash(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_payment_hash(&this_arg_conv).data, 32);
+int8_tArray  CS_LDK_RoutingFees_write(int64_t obj) {
+       LDKRoutingFees obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_amount_msats(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_RoutingFees_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = RoutingFees_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12Invoice_invoice_features(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_invoice_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_signing_pubkey(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_signature(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_signature(&this_arg_conv).compact_form, 64);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_signable_hash(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_signable_hash(&this_arg_conv).data, 32);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_Bolt12Invoice_verify(int64_t this_arg, int64_t key) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
-       *ret_conv = Bolt12Invoice_verify(&this_arg_conv, &key_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12Invoice_hash(int64_t o) {
-       LDKBolt12Invoice o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_hash(&o_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_write(int64_t obj) {
-       LDKUnsignedBolt12Invoice obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UnsignedBolt12Invoice_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_write(int64_t obj) {
-       LDKBolt12Invoice obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-void  CS_LDK_BlindedPayInfo_free(int64_t this_obj) {
-       LDKBlindedPayInfo this_obj_conv;
+void  CS_LDK_NodeAnnouncementDetails_free(int64_t this_obj) {
+       LDKNodeAnnouncementDetails this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPayInfo_free(this_obj_conv);
+       NodeAnnouncementDetails_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_BlindedPayInfo_get_fee_base_msat(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_BlindedPayInfo_set_fee_base_msat(int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
-}
-
-int32_t  CS_LDK_BlindedPayInfo_get_fee_proportional_millionths(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_get_features(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeFeatures ret_var = NodeAnnouncementDetails_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedPayInfo_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_features(int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
+       LDKNodeFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeFeatures_clone(&val_conv);
+       NodeAnnouncementDetails_set_features(&this_ptr_conv, val_conv);
 }
 
-int16_t  CS_LDK_BlindedPayInfo_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int32_t  CS_LDK_NodeAnnouncementDetails_get_last_update(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       int32_t ret_conv = NodeAnnouncementDetails_get_last_update(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_BlindedPayInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_last_update(int64_t this_ptr, int32_t val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+       NodeAnnouncementDetails_set_last_update(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int8_tArray  CS_LDK_NodeAnnouncementDetails_get_rgb(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(3, __LINE__);
+       memcpy(ret_arr->elems, *NodeAnnouncementDetails_get_rgb(&this_ptr_conv), 3);
+       return ret_arr;
 }
 
-void  CS_LDK_BlindedPayInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_rgb(int64_t this_ptr, int8_tArray val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+       LDKThreeBytes val_ref;
+       CHECK(val->arr_len == 3);
+       memcpy(val_ref.data, val->elems, 3); FREE(val);
+       NodeAnnouncementDetails_set_rgb(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_get_alias(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeAlias ret_var = NodeAnnouncementDetails_get_alias(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedPayInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_alias(int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+       LDKNodeAlias val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeAlias_clone(&val_conv);
+       NodeAnnouncementDetails_set_alias(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_get_features(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int64_tArray  CS_LDK_NodeAnnouncementDetails_get_addresses(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementDetails_get_addresses(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_BlindedPayInfo_set_features(int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_addresses(int64_t this_ptr, int64_tArray val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedHopFeatures_clone(&val_conv);
-       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
+       LDKCVec_SocketAddressZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t p = 0; p < val_constr.datalen; p++) {
+               int64_t val_conv_15 = val_vals[p];
+               void* val_conv_15_ptr = untag_ptr(val_conv_15);
+               CHECK_ACCESS(val_conv_15_ptr);
+               LDKSocketAddress val_conv_15_conv = *(LDKSocketAddress*)(val_conv_15_ptr);
+               val_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(val_conv_15));
+               val_constr.data[p] = val_conv_15_conv;
+       }
+       FREE(val);
+       NodeAnnouncementDetails_set_addresses(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_new(int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
-       LDKBlindedHopFeatures features_arg_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_new(int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_tArray addresses_arg) {
+       LDKNodeFeatures features_arg_conv;
        features_arg_conv.inner = untag_ptr(features_arg);
        features_arg_conv.is_owned = ptr_is_owned(features_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
+       LDKThreeBytes rgb_arg_ref;
+       CHECK(rgb_arg->arr_len == 3);
+       memcpy(rgb_arg_ref.data, rgb_arg->elems, 3); FREE(rgb_arg);
+       LDKNodeAlias alias_arg_conv;
+       alias_arg_conv.inner = untag_ptr(alias_arg);
+       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
+       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
+       LDKCVec_SocketAddressZ addresses_arg_constr;
+       addresses_arg_constr.datalen = addresses_arg->arr_len;
+       if (addresses_arg_constr.datalen > 0)
+               addresses_arg_constr.data = MALLOC(addresses_arg_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
+       else
+               addresses_arg_constr.data = NULL;
+       int64_t* addresses_arg_vals = addresses_arg->elems;
+       for (size_t p = 0; p < addresses_arg_constr.datalen; p++) {
+               int64_t addresses_arg_conv_15 = addresses_arg_vals[p];
+               void* addresses_arg_conv_15_ptr = untag_ptr(addresses_arg_conv_15);
+               CHECK_ACCESS(addresses_arg_conv_15_ptr);
+               LDKSocketAddress addresses_arg_conv_15_conv = *(LDKSocketAddress*)(addresses_arg_conv_15_ptr);
+               addresses_arg_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_arg_conv_15));
+               addresses_arg_constr.data[p] = addresses_arg_conv_15_conv;
+       }
+       FREE(addresses_arg);
+       LDKNodeAnnouncementDetails ret_var = NodeAnnouncementDetails_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, addresses_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+static inline uint64_t NodeAnnouncementDetails_clone_ptr(LDKNodeAnnouncementDetails *NONNULL_PTR arg) {
+       LDKNodeAnnouncementDetails ret_var = NodeAnnouncementDetails_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedPayInfo_clone_ptr(int64_t arg) {
-       LDKBlindedPayInfo arg_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_clone_ptr(int64_t arg) {
+       LDKNodeAnnouncementDetails arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAnnouncementDetails_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPayInfo_clone(int64_t orig) {
-       LDKBlindedPayInfo orig_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_clone(int64_t orig) {
+       LDKNodeAnnouncementDetails orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
+       LDKNodeAnnouncementDetails ret_var = NodeAnnouncementDetails_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedPayInfo_hash(int64_t o) {
-       LDKBlindedPayInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_BlindedPayInfo_eq(int64_t a, int64_t b) {
-       LDKBlindedPayInfo a_conv;
+jboolean  CS_LDK_NodeAnnouncementDetails_eq(int64_t a, int64_t b) {
+       LDKNodeAnnouncementDetails a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedPayInfo b_conv;
+       LDKNodeAnnouncementDetails b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeAnnouncementDetails_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_BlindedPayInfo_write(int64_t obj) {
-       LDKBlindedPayInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_NodeAnnouncementInfo_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeAnnouncementInfo this_ptr_conv = *(LDKNodeAnnouncementInfo*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeAnnouncementInfo_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = BlindedPayInfo_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-
-void  CS_LDK_InvoiceError_free(int64_t this_obj) {
-       LDKInvoiceError this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceError_free(this_obj_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_clone_ptr(int64_t arg) {
+       LDKNodeAnnouncementInfo* arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(arg);
+       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_InvoiceError_get_erroneous_field(int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_NodeAnnouncementInfo_clone(int64_t orig) {
+       LDKNodeAnnouncementInfo* orig_conv = (LDKNodeAnnouncementInfo*)untag_ptr(orig);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceError_set_erroneous_field(int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ErroneousField_clone(&val_conv);
-       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_relayed(int64_t a) {
+       LDKNodeAnnouncement a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = NodeAnnouncement_clone(&a_conv);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_relayed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceError_get_message(int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_NodeAnnouncementInfo_local(int64_t a) {
+       LDKNodeAnnouncementDetails a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = NodeAnnouncementDetails_clone(&a_conv);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_local(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceError_set_message(int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = UntrustedString_clone(&val_conv);
-       InvoiceError_set_message(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_NodeAnnouncementInfo_eq(int64_t a, int64_t b) {
+       LDKNodeAnnouncementInfo* a_conv = (LDKNodeAnnouncementInfo*)untag_ptr(a);
+       LDKNodeAnnouncementInfo* b_conv = (LDKNodeAnnouncementInfo*)untag_ptr(b);
+       jboolean ret_conv = NodeAnnouncementInfo_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_InvoiceError_new(int64_t erroneous_field_arg, int64_t message_arg) {
-       LDKErroneousField erroneous_field_arg_conv;
-       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
-       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
-       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
-       LDKUntrustedString message_arg_conv;
-       message_arg_conv.inner = untag_ptr(message_arg);
-       message_arg_conv.is_owned = ptr_is_owned(message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
-       message_arg_conv = UntrustedString_clone(&message_arg_conv);
-       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_features(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKNodeFeatures ret_var = NodeAnnouncementInfo_features(this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
-       LDKInvoiceError ret_var = InvoiceError_clone(arg);
+int32_t  CS_LDK_NodeAnnouncementInfo_last_update(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       int32_t ret_conv = NodeAnnouncementInfo_last_update(this_arg_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_NodeAnnouncementInfo_rgb(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       int8_tArray ret_arr = init_int8_tArray(3, __LINE__);
+       memcpy(ret_arr->elems, NodeAnnouncementInfo_rgb(this_arg_conv).data, 3);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_NodeAnnouncementInfo_alias(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKNodeAlias ret_var = NodeAnnouncementInfo_alias(this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InvoiceError_clone_ptr(int64_t arg) {
-       LDKInvoiceError arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_tArray  CS_LDK_NodeAnnouncementInfo_addresses(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementInfo_addresses(this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceError_clone(int64_t orig) {
-       LDKInvoiceError orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_announcement_message(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_announcement_message(this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ErroneousField_free(int64_t this_obj) {
-       LDKErroneousField this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ErroneousField_free(this_obj_conv);
+int8_tArray  CS_LDK_NodeAnnouncementInfo_write(int64_t obj) {
+       LDKNodeAnnouncementInfo* obj_conv = (LDKNodeAnnouncementInfo*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ErroneousField_get_tlv_fieldnum(int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_NodeAnnouncementInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ErroneousField_set_tlv_fieldnum(int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
+void  CS_LDK_NodeAlias_free(int64_t this_obj) {
+       LDKNodeAlias this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeAlias_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ErroneousField_get_suggested_value(int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
+int8_tArray  CS_LDK_NodeAlias_get_a(int64_t this_ptr) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *NodeAlias_get_a(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_ErroneousField_set_suggested_value(int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
+void  CS_LDK_NodeAlias_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
-       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
-       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       NodeAlias_set_a(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_ErroneousField_new(int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
-       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
-       CHECK_ACCESS(suggested_value_arg_ptr);
-       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
-       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
-       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
+int64_t  CS_LDK_NodeAlias_new(int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK(a_arg->arr_len == 32);
+       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
+       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
-       LDKErroneousField ret_var = ErroneousField_clone(arg);
+static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
+       LDKNodeAlias ret_var = NodeAlias_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ErroneousField_clone_ptr(int64_t arg) {
-       LDKErroneousField arg_conv;
+int64_t  CS_LDK_NodeAlias_clone_ptr(int64_t arg) {
+       LDKNodeAlias arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ErroneousField_clone(int64_t orig) {
-       LDKErroneousField orig_conv;
+int64_t  CS_LDK_NodeAlias_clone(int64_t orig) {
+       LDKNodeAlias orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InvoiceError_from_string(jstring s) {
-       LDKStr s_conv = str_ref_to_owned_c(s);
-       LDKInvoiceError ret_var = InvoiceError_from_string(s_conv);
+       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jstring  CS_LDK_InvoiceError_to_str(int64_t o) {
-       LDKInvoiceError o_conv;
+int64_t  CS_LDK_NodeAlias_hash(int64_t o) {
+       LDKNodeAlias o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       LDKStr ret_str = InvoiceError_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+       int64_t ret_conv = NodeAlias_hash(&o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_InvoiceError_write(int64_t obj) {
-       LDKInvoiceError obj_conv;
+jboolean  CS_LDK_NodeAlias_eq(int64_t a, int64_t b) {
+       LDKNodeAlias a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeAlias b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+jstring  CS_LDK_NodeAlias_to_str(int64_t o) {
+       LDKNodeAlias o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NodeAlias_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_NodeAlias_write(int64_t obj) {
+       LDKNodeAlias obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceError_read(int8_tArray ser) {
+int64_t  CS_LDK_NodeAlias_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
-       *ret_conv = InvoiceError_read(ser_ref);
+       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
+       *ret_conv = NodeAlias_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_free(int64_t this_obj) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestWithExplicitPayerIdBuilder_free(this_obj_conv);
-}
-
-void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_free(int64_t this_obj) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestWithDerivedPayerIdBuilder_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_build(int64_t this_arg) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ), "LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_chain(this_arg_conv, network_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_quantity(this_arg_conv, quantity);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
-       InvoiceRequestWithExplicitPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(int64_t this_arg) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKCResult_InvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(this_arg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_chain(this_arg_conv, network_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_quantity(this_arg_conv, quantity);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
-       InvoiceRequestWithDerivedPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
-}
-
-void  CS_LDK_UnsignedInvoiceRequest_free(int64_t this_obj) {
-       LDKUnsignedInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedInvoiceRequest_free(this_obj_conv);
-}
-
-static inline uint64_t UnsignedInvoiceRequest_clone_ptr(LDKUnsignedInvoiceRequest *NONNULL_PTR arg) {
-       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_UnsignedInvoiceRequest_clone_ptr(int64_t arg) {
-       LDKUnsignedInvoiceRequest arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedInvoiceRequest_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_UnsignedInvoiceRequest_clone(int64_t orig) {
-       LDKUnsignedInvoiceRequest orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_SignInvoiceRequestFn_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignInvoiceRequestFn this_ptr_conv = *(LDKSignInvoiceRequestFn*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignInvoiceRequestFn_free(this_ptr_conv);
-}
-
-int64_t  CS_LDK_UnsignedInvoiceRequest_tagged_hash(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTaggedHash ret_var = UnsignedInvoiceRequest_tagged_hash(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_InvoiceRequest_free(int64_t this_obj) {
-       LDKInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequest_free(this_obj_conv);
-}
-
-static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_InvoiceRequest_clone_ptr(int64_t arg) {
-       LDKInvoiceRequest arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_InvoiceRequest_clone(int64_t orig) {
-       LDKInvoiceRequest orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_VerifiedInvoiceRequest_free(int64_t this_obj) {
-       LDKVerifiedInvoiceRequest this_obj_conv;
+void  CS_LDK_NodeInfo_free(int64_t this_obj) {
+       LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       VerifiedInvoiceRequest_free(this_obj_conv);
+       NodeInfo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_get_offer_id(int64_t this_ptr) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+int64_tArray  CS_LDK_NodeInfo_get_channels(int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOfferId ret_var = VerifiedInvoiceRequest_get_offer_id(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_VerifiedInvoiceRequest_set_offer_id(int64_t this_ptr, int64_t val) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+void  CS_LDK_NodeInfo_set_channels(int64_t this_ptr, int64_tArray val) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOfferId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OfferId_clone(&val_conv);
-       VerifiedInvoiceRequest_set_offer_id(&this_ptr_conv, val_conv);
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       FREE(val);
+       NodeInfo_set_channels(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_get_keys(int64_t this_ptr) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+int64_t  CS_LDK_NodeInfo_get_announcement_info(int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = VerifiedInvoiceRequest_get_keys(&this_ptr_conv);
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = NodeInfo_get_announcement_info(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_VerifiedInvoiceRequest_set_keys(int64_t this_ptr, int64_t val) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+void  CS_LDK_NodeInfo_set_announcement_info(int64_t this_ptr, int64_t val) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_SecretKeyZ val_conv = *(LDKCOption_SecretKeyZ*)(val_ptr);
-       val_conv = COption_SecretKeyZ_clone((LDKCOption_SecretKeyZ*)untag_ptr(val));
-       VerifiedInvoiceRequest_set_keys(&this_ptr_conv, val_conv);
+       LDKCOption_NodeAnnouncementInfoZ val_conv = *(LDKCOption_NodeAnnouncementInfoZ*)(val_ptr);
+       val_conv = COption_NodeAnnouncementInfoZ_clone((LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(val));
+       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg) {
-       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(arg);
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_VerifiedInvoiceRequest_clone_ptr(int64_t arg) {
-       LDKVerifiedInvoiceRequest arg_conv;
+int64_t  CS_LDK_NodeInfo_clone_ptr(int64_t arg) {
+       LDKNodeInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = VerifiedInvoiceRequest_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_clone(int64_t orig) {
-       LDKVerifiedInvoiceRequest orig_conv;
+int64_t  CS_LDK_NodeInfo_clone(int64_t orig) {
+       LDKNodeInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(&orig_conv);
+       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-ptrArray  CS_LDK_UnsignedInvoiceRequest_chains(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+jboolean  CS_LDK_NodeInfo_eq(int64_t a, int64_t b) {
+       LDKNodeInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeInfo_is_tor_only(int64_t this_arg) {
+       LDKNodeInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = UnsignedInvoiceRequest_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
+       jboolean ret_conv = NodeInfo_is_tor_only(&this_arg_conv);
+       return ret_conv;
+}
+
+jstring  CS_LDK_NodeInfo_to_str(int64_t o) {
+       LDKNodeInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NodeInfo_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_NodeInfo_write(int64_t obj) {
+       LDKNodeInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_metadata(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = UnsignedInvoiceRequest_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = NodeInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_amount(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = UnsignedInvoiceRequest_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_NetworkGraph_write(int64_t obj) {
+       LDKNetworkGraph obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_description(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedInvoiceRequest_description(&this_arg_conv);
+int64_t  CS_LDK_NetworkGraph_read(int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
+       if (arg_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+jstring  CS_LDK_NetworkGraph_to_str(int64_t o) {
+       LDKNetworkGraph o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NetworkGraph_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_NetworkGraph_new(int32_t network, int64_t logger) {
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_offer_features(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_read_only(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = UnsignedInvoiceRequest_offer_features(&this_arg_conv);
+       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_absolute_expiry(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_get_last_rapid_gossip_sync_timestamp(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_issuer(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_set_last_rapid_gossip_sync_timestamp(int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedInvoiceRequest_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
 }
 
-int64_tArray  CS_LDK_UnsignedInvoiceRequest_paths(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_node_from_announcement(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = UnsignedInvoiceRequest_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_UnsignedInvoiceRequest_supported_quantity(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = UnsignedInvoiceRequest_supported_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_signing_pubkey(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_node_from_unsigned_announcement(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+       LDKUnsignedNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_metadata(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = UnsignedInvoiceRequest_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_chain(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement_no_lookup(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, UnsignedInvoiceRequest_chain(&this_arg_conv).data, 32);
-       return ret_arr;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_amount_msats(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_from_unsigned_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedInvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKUnsignedChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_invoice_request_features(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_add_channel_from_partial_announcement(int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = UnsignedInvoiceRequest_invoice_request_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKChannelFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = ChannelFeatures_clone(&features_conv);
+       LDKPublicKey node_id_1_ref;
+       CHECK(node_id_1->arr_len == 33);
+       memcpy(node_id_1_ref.compressed_form, node_id_1->elems, 33); FREE(node_id_1);
+       LDKPublicKey node_id_2_ref;
+       CHECK(node_id_2->arr_len == 33);
+       memcpy(node_id_2_ref.compressed_form, node_id_2->elems, 33); FREE(node_id_2);
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_quantity(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_channel_failed_permanent(int64_t this_arg, int64_t short_channel_id) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedInvoiceRequest_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_id(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_node_failed_permanent(int64_t this_arg, int8_tArray node_id) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_payer_note(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedInvoiceRequest_payer_note(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
 }
 
-ptrArray  CS_LDK_InvoiceRequest_chains(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking_with_time(int64_t this_arg, int64_t current_time_unix) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = InvoiceRequest_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
 }
 
-int64_t  CS_LDK_InvoiceRequest_metadata(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = InvoiceRequest_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_amount(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_unsigned(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = InvoiceRequest_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKUnsignedChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_description(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_verify_channel_update(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_verify_channel_update(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_offer_features(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ReadOnlyNetworkGraph_channel(int64_t this_arg, int64_t short_channel_id) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = InvoiceRequest_offer_features(&this_arg_conv);
+       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_absolute_expiry(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_channels(int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceRequest_issuer(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ReadOnlyNetworkGraph_node(int64_t this_arg, int64_t node_id) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_issuer(&this_arg_conv);
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_InvoiceRequest_paths(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_nodes(int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = InvoiceRequest_paths(&this_arg_conv);
+       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKNodeId ret_conv_8_var = ret_var.data[i];
+               int64_t ret_conv_8_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
+               ret_arr_ptr[i] = ret_conv_8_ref;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceRequest_supported_quantity(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ReadOnlyNetworkGraph_get_addresses(int64_t this_arg, int8_tArray pubkey) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = InvoiceRequest_supported_quantity(&this_arg_conv);
+       LDKPublicKey pubkey_ref;
+       CHECK(pubkey->arr_len == 33);
+       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_signing_pubkey(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+void  CS_LDK_DefaultRouter_free(int64_t this_obj) {
+       LDKDefaultRouter this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DefaultRouter_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_payer_metadata(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = InvoiceRequest_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+int64_t  CS_LDK_DefaultRouter_new(int64_t network_graph, int64_t logger, int64_t entropy_source, int64_t scorer, int64_t score_params) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
+       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLockableScore_JCalls_cloned(&scorer_conv);
+       }
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
+       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, entropy_source_conv, scorer_conv, score_params_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_chain(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_DefaultRouter_as_Router(int64_t this_arg) {
+       LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_chain(&this_arg_conv).data, 32);
-       return ret_arr;
+       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
+       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_amount_msats(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_DefaultRouter_as_MessageRouter(int64_t this_arg) {
+       LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
+       *ret_ret = DefaultRouter_as_MessageRouter(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_invoice_request_features(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_invoice_request_features(&this_arg_conv);
+void  CS_LDK_Router_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Router_free(this_ptr_conv);
+}
+
+void  CS_LDK_ScorerAccountingForInFlightHtlcs_free(int64_t this_obj) {
+       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_new(int64_t scorer, int64_t inflight_htlcs) {
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKScoreLookUp scorer_conv = *(LDKScoreLookUp*)(scorer_ptr);
+       if (scorer_conv.free == LDKScoreLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScoreLookUp_JCalls_cloned(&scorer_conv);
+       }
+       LDKInFlightHtlcs inflight_htlcs_conv;
+       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
+       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
+       inflight_htlcs_conv.is_owned = false;
+       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_quantity(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(int64_t this_arg) {
+       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_InFlightHtlcs_free(int64_t this_obj) {
+       LDKInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InFlightHtlcs_free(this_obj_conv);
+}
+
+static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_InFlightHtlcs_clone_ptr(int64_t arg) {
+       LDKInFlightHtlcs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-int8_tArray  CS_LDK_InvoiceRequest_payer_id(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+int64_t  CS_LDK_InFlightHtlcs_clone(int64_t orig) {
+       LDKInFlightHtlcs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_payer_note(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+int64_t  CS_LDK_InFlightHtlcs_new() {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
-       LDKInvoiceRequest this_arg_conv;
+void  CS_LDK_InFlightHtlcs_process_path(int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
+       LDKInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
-       return tag_ptr(ret_conv, true);
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv.is_owned = false;
+       LDKPublicKey payer_node_id_ref;
+       CHECK(payer_node_id->arr_len == 33);
+       memcpy(payer_node_id_ref.compressed_form, payer_node_id->elems, 33); FREE(payer_node_id);
+       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
 }
 
-int64_t  CS_LDK_InvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
-       LDKInvoiceRequest this_arg_conv;
+void  CS_LDK_InFlightHtlcs_add_inflight_htlc(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
+       LDKInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequest_verify(int64_t this_arg, int64_t key) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
-       *ret_conv = InvoiceRequest_verify(this_arg_conv, &key_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_InvoiceRequest_signature(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_signature(&this_arg_conv).compact_form, 64);
-       return ret_arr;
-}
-
-ptrArray  CS_LDK_VerifiedInvoiceRequest_chains(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = VerifiedInvoiceRequest_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_metadata(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = VerifiedInvoiceRequest_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_amount(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = VerifiedInvoiceRequest_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_description(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = VerifiedInvoiceRequest_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_offer_features(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = VerifiedInvoiceRequest_offer_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_absolute_expiry(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = VerifiedInvoiceRequest_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_issuer(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = VerifiedInvoiceRequest_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_tArray  CS_LDK_VerifiedInvoiceRequest_paths(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = VerifiedInvoiceRequest_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_supported_quantity(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = VerifiedInvoiceRequest_supported_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_signing_pubkey(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, VerifiedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_metadata(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = VerifiedInvoiceRequest_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_chain(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, VerifiedInvoiceRequest_chain(&this_arg_conv).data, 32);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_amount_msats(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = VerifiedInvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_invoice_request_features(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = VerifiedInvoiceRequest_invoice_request_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_quantity(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_InFlightHtlcs_used_liquidity_msat(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
+       LDKInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = VerifiedInvoiceRequest_quantity(&this_arg_conv);
+       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_id(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, VerifiedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_payer_note(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = VerifiedInvoiceRequest_payer_note(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys(&this_arg_conv, payment_paths_constr, payment_hash_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_write(int64_t obj) {
-       LDKUnsignedInvoiceRequest obj_conv;
+int8_tArray  CS_LDK_InFlightHtlcs_write(int64_t obj) {
+       LDKInFlightHtlcs obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UnsignedInvoiceRequest_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_write(int64_t obj) {
-       LDKInvoiceRequest obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InFlightHtlcs_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
+       *ret_conv = InFlightHtlcs_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceRequestFields_free(int64_t this_obj) {
-       LDKInvoiceRequestFields this_obj_conv;
+void  CS_LDK_RouteHop_free(int64_t this_obj) {
+       LDKRouteHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestFields_free(this_obj_conv);
+       RouteHop_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_InvoiceRequestFields_get_payer_id(int64_t this_ptr) {
-       LDKInvoiceRequestFields this_ptr_conv;
+int8_tArray  CS_LDK_RouteHop_get_pubkey(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequestFields_get_payer_id(&this_ptr_conv).compressed_form, 33);
+       memcpy(ret_arr->elems, RouteHop_get_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
 }
 
-void  CS_LDK_InvoiceRequestFields_set_payer_id(int64_t this_ptr, int8_tArray val) {
-       LDKInvoiceRequestFields this_ptr_conv;
+void  CS_LDK_RouteHop_set_pubkey(int64_t this_ptr, int8_tArray val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -68537,1273 +71559,2007 @@ void  CS_LDK_InvoiceRequestFields_set_payer_id(int64_t this_ptr, int8_tArray val
        LDKPublicKey val_ref;
        CHECK(val->arr_len == 33);
        memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       InvoiceRequestFields_set_payer_id(&this_ptr_conv, val_ref);
+       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_get_quantity(int64_t this_ptr) {
-       LDKInvoiceRequestFields this_ptr_conv;
+int64_t  CS_LDK_RouteHop_get_node_features(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequestFields_get_quantity(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceRequestFields_set_quantity(int64_t this_ptr, int64_t val) {
-       LDKInvoiceRequestFields this_ptr_conv;
+void  CS_LDK_RouteHop_set_node_features(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       InvoiceRequestFields_set_quantity(&this_ptr_conv, val_conv);
+       LDKNodeFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeFeatures_clone(&val_conv);
+       RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_get_payer_note_truncated(int64_t this_ptr) {
-       LDKInvoiceRequestFields this_ptr_conv;
+int64_t  CS_LDK_RouteHop_get_short_channel_id(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKUntrustedString ret_var = InvoiceRequestFields_get_payer_note_truncated(&this_ptr_conv);
+       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_short_channel_id(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHop_get_channel_features(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceRequestFields_set_payer_note_truncated(int64_t this_ptr, int64_t val) {
-       LDKInvoiceRequestFields this_ptr_conv;
+void  CS_LDK_RouteHop_set_channel_features(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKUntrustedString val_conv;
+       LDKChannelFeatures val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = UntrustedString_clone(&val_conv);
-       InvoiceRequestFields_set_payer_note_truncated(&this_ptr_conv, val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_new(int8_tArray payer_id_arg, int64_t quantity_arg, int64_t payer_note_truncated_arg) {
-       LDKPublicKey payer_id_arg_ref;
-       CHECK(payer_id_arg->arr_len == 33);
-       memcpy(payer_id_arg_ref.compressed_form, payer_id_arg->elems, 33); FREE(payer_id_arg);
-       void* quantity_arg_ptr = untag_ptr(quantity_arg);
-       CHECK_ACCESS(quantity_arg_ptr);
-       LDKCOption_u64Z quantity_arg_conv = *(LDKCOption_u64Z*)(quantity_arg_ptr);
-       quantity_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(quantity_arg));
-       LDKUntrustedString payer_note_truncated_arg_conv;
-       payer_note_truncated_arg_conv.inner = untag_ptr(payer_note_truncated_arg);
-       payer_note_truncated_arg_conv.is_owned = ptr_is_owned(payer_note_truncated_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payer_note_truncated_arg_conv);
-       payer_note_truncated_arg_conv = UntrustedString_clone(&payer_note_truncated_arg_conv);
-       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_new(payer_id_arg_ref, quantity_arg_conv, payer_note_truncated_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_RouteHop_get_fee_msat(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-static inline uint64_t InvoiceRequestFields_clone_ptr(LDKInvoiceRequestFields *NONNULL_PTR arg) {
-       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_InvoiceRequestFields_clone_ptr(int64_t arg) {
-       LDKInvoiceRequestFields arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequestFields_clone_ptr(&arg_conv);
-       return ret_conv;
+void  CS_LDK_RouteHop_set_fee_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_clone(int64_t orig) {
-       LDKInvoiceRequestFields orig_conv;
+int32_t  CS_LDK_RouteHop_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHop_set_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+jboolean  CS_LDK_RouteHop_get_maybe_announced_channel(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = RouteHop_get_maybe_announced_channel(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHop_set_maybe_announced_channel(int64_t this_ptr, jboolean val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_maybe_announced_channel(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHop_new(int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg, jboolean maybe_announced_channel_arg) {
+       LDKPublicKey pubkey_arg_ref;
+       CHECK(pubkey_arg->arr_len == 33);
+       memcpy(pubkey_arg_ref.compressed_form, pubkey_arg->elems, 33); FREE(pubkey_arg);
+       LDKNodeFeatures node_features_arg_conv;
+       node_features_arg_conv.inner = untag_ptr(node_features_arg);
+       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
+       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
+       LDKChannelFeatures channel_features_arg_conv;
+       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
+       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
+       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
+       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_RouteHop_clone_ptr(int64_t arg) {
+       LDKRouteHop arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_RouteHop_clone(int64_t orig) {
+       LDKRouteHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(&orig_conv);
+       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_InvoiceRequestFields_eq(int64_t a, int64_t b) {
-       LDKInvoiceRequestFields a_conv;
+int64_t  CS_LDK_RouteHop_hash(int64_t o) {
+       LDKRouteHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_RouteHop_eq(int64_t a, int64_t b) {
+       LDKRouteHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKInvoiceRequestFields b_conv;
+       LDKRouteHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFields_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_InvoiceRequestFields_write(int64_t obj) {
-       LDKInvoiceRequestFields obj_conv;
+int8_tArray  CS_LDK_RouteHop_write(int64_t obj) {
+       LDKRouteHop obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceRequestFields_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_read(int8_tArray ser) {
+int64_t  CS_LDK_RouteHop_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_InvoiceRequestFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestFieldsDecodeErrorZ), "LDKCResult_InvoiceRequestFieldsDecodeErrorZ");
-       *ret_conv = InvoiceRequestFields_read(ser_ref);
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = RouteHop_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_TaggedHash_free(int64_t this_obj) {
-       LDKTaggedHash this_obj_conv;
+void  CS_LDK_BlindedTail_free(int64_t this_obj) {
+       LDKBlindedTail this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       TaggedHash_free(this_obj_conv);
+       BlindedTail_free(this_obj_conv);
 }
 
-static inline uint64_t TaggedHash_clone_ptr(LDKTaggedHash *NONNULL_PTR arg) {
-       LDKTaggedHash ret_var = TaggedHash_clone(arg);
+int64_tArray  CS_LDK_BlindedTail_get_hops(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+void  CS_LDK_BlindedTail_set_hops(int64_t this_ptr, int64_tArray val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t m = 0; m < val_constr.datalen; m++) {
+               int64_t val_conv_12 = val_vals[m];
+               LDKBlindedHop val_conv_12_conv;
+               val_conv_12_conv.inner = untag_ptr(val_conv_12);
+               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
+               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
+               val_constr.data[m] = val_conv_12_conv;
+       }
+       FREE(val);
+       BlindedTail_set_hops(&this_ptr_conv, val_constr);
+}
+
+int8_tArray  CS_LDK_BlindedTail_get_blinding_point(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_BlindedTail_set_blinding_point(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
+}
+
+int32_t  CS_LDK_BlindedTail_get_excess_final_cltv_expiry_delta(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedTail_set_excess_final_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedTail_get_final_value_msat(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedTail_set_final_value_msat(int64_t this_ptr, int64_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedTail_new(int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
+       LDKCVec_BlindedHopZ hops_arg_constr;
+       hops_arg_constr.datalen = hops_arg->arr_len;
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = hops_arg->elems;
+       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
+               int64_t hops_arg_conv_12 = hops_arg_vals[m];
+               LDKBlindedHop hops_arg_conv_12_conv;
+               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
+               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
+               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
+               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
+       }
+       FREE(hops_arg);
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK(blinding_point_arg->arr_len == 33);
+       memcpy(blinding_point_arg_ref.compressed_form, blinding_point_arg->elems, 33); FREE(blinding_point_arg);
+       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_TaggedHash_clone_ptr(int64_t arg) {
-       LDKTaggedHash arg_conv;
+
+static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
+       LDKBlindedTail ret_var = BlindedTail_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_BlindedTail_clone_ptr(int64_t arg) {
+       LDKBlindedTail arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = TaggedHash_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_TaggedHash_clone(int64_t orig) {
-       LDKTaggedHash orig_conv;
+int64_t  CS_LDK_BlindedTail_clone(int64_t orig) {
+       LDKBlindedTail orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKTaggedHash ret_var = TaggedHash_clone(&orig_conv);
+       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_TaggedHash_as_digest(int64_t this_arg) {
-       LDKTaggedHash this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *TaggedHash_as_digest(&this_arg_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_BlindedTail_hash(int64_t o) {
+       LDKBlindedTail o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedTail_hash(&o_conv);
+       return ret_conv;
 }
 
-jstring  CS_LDK_TaggedHash_tag(int64_t this_arg) {
-       LDKTaggedHash this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKStr ret_str = TaggedHash_tag(&this_arg_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+jboolean  CS_LDK_BlindedTail_eq(int64_t a, int64_t b) {
+       LDKBlindedTail a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedTail b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_TaggedHash_merkle_root(int64_t this_arg) {
-       LDKTaggedHash this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, TaggedHash_merkle_root(&this_arg_conv).data, 32);
+int8_tArray  CS_LDK_BlindedTail_write(int64_t obj) {
+       LDKBlindedTail obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_SignError_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignError this_ptr_conv = *(LDKSignError*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignError_free(this_ptr_conv);
+int64_t  CS_LDK_BlindedTail_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
+       *ret_conv = BlindedTail_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t SignError_clone_ptr(LDKSignError *NONNULL_PTR arg) {
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Path_free(int64_t this_obj) {
+       LDKPath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Path_free(this_obj_conv);
 }
-int64_t  CS_LDK_SignError_clone_ptr(int64_t arg) {
-       LDKSignError* arg_conv = (LDKSignError*)untag_ptr(arg);
-       int64_t ret_conv = SignError_clone_ptr(arg_conv);
-       return ret_conv;
+
+int64_tArray  CS_LDK_Path_get_hops(int64_t this_ptr) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_RouteHopZ ret_var = Path_get_hops(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t k = 0; k < ret_var.datalen; k++) {
+               LDKRouteHop ret_conv_10_var = ret_var.data[k];
+               int64_t ret_conv_10_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
+               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
+               ret_arr_ptr[k] = ret_conv_10_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_SignError_clone(int64_t orig) {
-       LDKSignError* orig_conv = (LDKSignError*)untag_ptr(orig);
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Path_set_hops(int64_t this_ptr, int64_tArray val) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_RouteHopZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t k = 0; k < val_constr.datalen; k++) {
+               int64_t val_conv_10 = val_vals[k];
+               LDKRouteHop val_conv_10_conv;
+               val_conv_10_conv.inner = untag_ptr(val_conv_10);
+               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
+               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
+               val_constr.data[k] = val_conv_10_conv;
+       }
+       FREE(val);
+       Path_set_hops(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_SignError_signing() {
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_signing();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_Path_get_blinded_tail(int64_t this_ptr) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SignError_verification(int32_t a) {
-       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_verification(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Path_set_blinded_tail(int64_t this_ptr, int64_t val) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedTail val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedTail_clone(&val_conv);
+       Path_set_blinded_tail(&this_ptr_conv, val_conv);
 }
 
-void  CS_LDK_Bolt12ParseError_free(int64_t this_obj) {
-       LDKBolt12ParseError this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12ParseError_free(this_obj_conv);
+int64_t  CS_LDK_Path_new(int64_tArray hops_arg, int64_t blinded_tail_arg) {
+       LDKCVec_RouteHopZ hops_arg_constr;
+       hops_arg_constr.datalen = hops_arg->arr_len;
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = hops_arg->elems;
+       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
+               int64_t hops_arg_conv_10 = hops_arg_vals[k];
+               LDKRouteHop hops_arg_conv_10_conv;
+               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
+               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
+               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
+               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+       }
+       FREE(hops_arg);
+       LDKBlindedTail blinded_tail_arg_conv;
+       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
+       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
+       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
+       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
+static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
+       LDKPath ret_var = Path_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12ParseError_clone_ptr(int64_t arg) {
-       LDKBolt12ParseError arg_conv;
+int64_t  CS_LDK_Path_clone_ptr(int64_t arg) {
+       LDKPath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
+       int64_t ret_conv = Path_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12ParseError_clone(int64_t orig) {
-       LDKBolt12ParseError orig_conv;
+int64_t  CS_LDK_Path_clone(int64_t orig) {
+       LDKPath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
+       LDKPath ret_var = Path_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_clone(int64_t orig) {
-       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_clone(orig_conv));
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Bolt12SemanticError_already_expired() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_already_expired());
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Bolt12SemanticError_unsupported_chain() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_chain());
+int64_t  CS_LDK_Path_hash(int64_t o) {
+       LDKPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Path_hash(&o_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_chain() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_chain());
-       return ret_conv;
+jboolean  CS_LDK_Path_eq(int64_t a, int64_t b) {
+       LDKPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_amount());
+int64_t  CS_LDK_Path_fee_msat(int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_amount());
+int64_t  CS_LDK_Path_final_value_msat(int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_insufficient_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_insufficient_amount());
-       return ret_conv;
+int64_t  CS_LDK_Path_final_cltv_expiry_delta(int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_amount());
-       return ret_conv;
+void  CS_LDK_Route_free(int64_t this_obj) {
+       LDKRoute this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Route_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unsupported_currency() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_currency());
-       return ret_conv;
+int64_tArray  CS_LDK_Route_get_paths(int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PathZ ret_var = Route_get_paths(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               LDKPath ret_conv_6_var = ret_var.data[g];
+               int64_t ret_conv_6_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
+               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
+               ret_arr_ptr[g] = ret_conv_6_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unknown_required_features() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unknown_required_features());
-       return ret_conv;
+void  CS_LDK_Route_set_paths(int64_t this_ptr, int64_tArray val) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PathZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               LDKPath val_conv_6_conv;
+               val_conv_6_conv.inner = untag_ptr(val_conv_6);
+               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
+               val_conv_6_conv = Path_clone(&val_conv_6_conv);
+               val_constr.data[g] = val_conv_6_conv;
+       }
+       FREE(val);
+       Route_set_paths(&this_ptr_conv, val_constr);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_features() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_features());
-       return ret_conv;
+int64_t  CS_LDK_Route_get_route_params(int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRouteParameters ret_var = Route_get_route_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_description() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_description());
-       return ret_conv;
+void  CS_LDK_Route_set_route_params(int64_t this_ptr, int64_t val) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRouteParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RouteParameters_clone(&val_conv);
+       Route_set_route_params(&this_ptr_conv, val_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_signing_pubkey() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signing_pubkey());
-       return ret_conv;
+int64_t  CS_LDK_Route_new(int64_tArray paths_arg, int64_t route_params_arg) {
+       LDKCVec_PathZ paths_arg_constr;
+       paths_arg_constr.datalen = paths_arg->arr_len;
+       if (paths_arg_constr.datalen > 0)
+               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               paths_arg_constr.data = NULL;
+       int64_t* paths_arg_vals = paths_arg->elems;
+       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
+               int64_t paths_arg_conv_6 = paths_arg_vals[g];
+               LDKPath paths_arg_conv_6_conv;
+               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
+               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
+               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
+               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
+       }
+       FREE(paths_arg);
+       LDKRouteParameters route_params_arg_conv;
+       route_params_arg_conv.inner = untag_ptr(route_params_arg);
+       route_params_arg_conv.is_owned = ptr_is_owned(route_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_arg_conv);
+       route_params_arg_conv = RouteParameters_clone(&route_params_arg_conv);
+       LDKRoute ret_var = Route_new(paths_arg_constr, route_params_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_signing_pubkey() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_signing_pubkey());
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Route_clone_ptr(int64_t arg) {
+       LDKRoute arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Route_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_signing_pubkey() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_signing_pubkey());
-       return ret_conv;
+int64_t  CS_LDK_Route_clone(int64_t orig) {
+       LDKRoute orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKRoute ret_var = Route_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_quantity() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_quantity());
+int64_t  CS_LDK_Route_hash(int64_t o) {
+       LDKRoute o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Route_hash(&o_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_quantity() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_quantity());
+jboolean  CS_LDK_Route_eq(int64_t a, int64_t b) {
+       LDKRoute a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRoute b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_quantity() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_quantity());
+int64_t  CS_LDK_Route_get_total_fees(int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_metadata() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_metadata());
+int64_t  CS_LDK_Route_get_total_amount(int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_metadata() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_metadata());
+jstring  CS_LDK_Route_to_str(int64_t o) {
+       LDKRoute o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = Route_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_payer_metadata() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_metadata());
-       return ret_conv;
+int8_tArray  CS_LDK_Route_write(int64_t obj) {
+       LDKRoute obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Route_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_payer_id() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_id());
-       return ret_conv;
+int64_t  CS_LDK_Route_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = Route_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_duplicate_payment_id() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_duplicate_payment_id());
-       return ret_conv;
+void  CS_LDK_RouteParameters_free(int64_t this_obj) {
+       LDKRouteParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RouteParameters_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_paths() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_paths());
-       return ret_conv;
+int64_t  CS_LDK_RouteParameters_get_payment_params(int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_paths() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_paths());
-       return ret_conv;
+void  CS_LDK_RouteParameters_set_payment_params(int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentParameters_clone(&val_conv);
+       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_pay_info() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_pay_info());
+int64_t  CS_LDK_RouteParameters_get_final_value_msat(int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_creation_time() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_creation_time());
-       return ret_conv;
+void  CS_LDK_RouteParameters_set_final_value_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_payment_hash() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payment_hash());
-       return ret_conv;
+int64_t  CS_LDK_RouteParameters_get_max_total_routing_fee_msat(int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteParameters_get_max_total_routing_fee_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_signature() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signature());
-       return ret_conv;
+void  CS_LDK_RouteParameters_set_max_total_routing_fee_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteParameters_set_max_total_routing_fee_msat(&this_ptr_conv, val_conv);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_free(int64_t this_obj) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RefundMaybeWithDerivedMetadataBuilder_free(this_obj_conv);
+int64_t  CS_LDK_RouteParameters_new(int64_t payment_params_arg, int64_t final_value_msat_arg, int64_t max_total_routing_fee_msat_arg) {
+       LDKPaymentParameters payment_params_arg_conv;
+       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
+       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
+       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
+       void* max_total_routing_fee_msat_arg_ptr = untag_ptr(max_total_routing_fee_msat_arg);
+       CHECK_ACCESS(max_total_routing_fee_msat_arg_ptr);
+       LDKCOption_u64Z max_total_routing_fee_msat_arg_conv = *(LDKCOption_u64Z*)(max_total_routing_fee_msat_arg_ptr);
+       max_total_routing_fee_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(max_total_routing_fee_msat_arg));
+       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg, max_total_routing_fee_msat_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t RefundMaybeWithDerivedMetadataBuilder_clone_ptr(LDKRefundMaybeWithDerivedMetadataBuilder *NONNULL_PTR arg) {
-       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(arg);
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
-       LDKRefundMaybeWithDerivedMetadataBuilder arg_conv;
+int64_t  CS_LDK_RouteParameters_clone_ptr(int64_t arg) {
+       LDKRouteParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RefundMaybeWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone(int64_t orig) {
-       LDKRefundMaybeWithDerivedMetadataBuilder orig_conv;
+int64_t  CS_LDK_RouteParameters_clone(int64_t orig) {
+       LDKRouteParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(&orig_conv);
+       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_new(int8_tArray metadata, int8_tArray payer_id, int64_t amount_msats) {
-       LDKCVec_u8Z metadata_ref;
-       metadata_ref.datalen = metadata->arr_len;
-       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
-       LDKPublicKey payer_id_ref;
-       CHECK(payer_id->arr_len == 33);
-       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
-       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
-       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_new(metadata_ref, payer_id_ref, amount_msats);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RouteParameters_hash(int64_t o) {
+       LDKRouteParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteParameters_hash(&o_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(int8_tArray node_id, int64_t expanded_key, int64_t entropy_source, int64_t amount_msats, int8_tArray payment_id) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
-       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(node_id_ref, &expanded_key_conv, entropy_source_conv, amount_msats, payment_id_ref);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_RouteParameters_eq(int64_t a, int64_t b) {
+       LDKRouteParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRouteParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       RefundMaybeWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
+int64_t  CS_LDK_RouteParameters_from_payment_params_and_value(int64_t payment_params, int64_t final_value_msat) {
+       LDKPaymentParameters payment_params_conv;
+       payment_params_conv.inner = untag_ptr(payment_params);
+       payment_params_conv.is_owned = ptr_is_owned(payment_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_conv);
+       payment_params_conv = PaymentParameters_clone(&payment_params_conv);
+       LDKRouteParameters ret_var = RouteParameters_from_payment_params_and_value(payment_params_conv, final_value_msat);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_RouteParameters_set_max_path_length(int64_t this_arg, int64_t recipient_onion, jboolean is_keysend, int32_t best_block_height) {
+       LDKRouteParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
+       this_arg_conv.is_owned = false;
+       LDKRecipientOnionFields recipient_onion_conv;
+       recipient_onion_conv.inner = untag_ptr(recipient_onion);
+       recipient_onion_conv.is_owned = ptr_is_owned(recipient_onion);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(recipient_onion_conv);
+       recipient_onion_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = RouteParameters_set_max_path_length(&this_arg_conv, &recipient_onion_conv, is_keysend, best_block_height);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
-       RefundMaybeWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
+int8_tArray  CS_LDK_RouteParameters_write(int64_t obj) {
+       LDKRouteParameters obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKBlindedPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = BlindedPath_clone(&path_conv);
-       RefundMaybeWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
+int64_t  CS_LDK_RouteParameters_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = RouteParameters_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       RefundMaybeWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
+void  CS_LDK_PaymentParameters_free(int64_t this_obj) {
+       LDKPaymentParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentParameters_free(this_obj_conv);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_quantity(int64_t this_arg, int64_t quantity) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       RefundMaybeWithDerivedMetadataBuilder_quantity(this_arg_conv, quantity);
+int64_t  CS_LDK_PaymentParameters_get_payee(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_payer_note(int64_t this_arg, jstring payer_note) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
-       RefundMaybeWithDerivedMetadataBuilder_payer_note(this_arg_conv, payer_note_conv);
+void  CS_LDK_PaymentParameters_set_payee(int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
+       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
+       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_build(int64_t this_arg) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKCResult_RefundBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12SemanticErrorZ), "LDKCResult_RefundBolt12SemanticErrorZ");
-       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentParameters_get_expiry_time(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Refund_free(int64_t this_obj) {
-       LDKRefund this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Refund_free(this_obj_conv);
+void  CS_LDK_PaymentParameters_set_expiry_time(int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
-       LDKRefund ret_var = Refund_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_Refund_clone_ptr(int64_t arg) {
-       LDKRefund arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
+int32_t  CS_LDK_PaymentParameters_get_max_total_cltv_expiry_delta(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_clone(int64_t orig) {
-       LDKRefund orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKRefund ret_var = Refund_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentParameters_set_max_total_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Refund_description(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_t  CS_LDK_PaymentParameters_get_max_path_count(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_absolute_expiry(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_PaymentParameters_set_max_path_count(int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_Refund_is_expired(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
+int8_t  CS_LDK_PaymentParameters_get_max_path_length(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = PaymentParameters_get_max_path_length(&this_ptr_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Refund_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Refund_is_expired_no_std(&this_arg_conv, duration_since_epoch);
+void  CS_LDK_PaymentParameters_set_max_path_length(int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_path_length(&this_ptr_conv, val);
+}
+
+int8_t  CS_LDK_PaymentParameters_get_max_channel_saturation_power_of_half(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_issuer(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentParameters_set_max_channel_saturation_power_of_half(int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
-int64_tArray  CS_LDK_Refund_paths(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Refund_paths(&this_arg_conv);
+int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_channels(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-int8_tArray  CS_LDK_Refund_payer_metadata(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = Refund_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+void  CS_LDK_PaymentParameters_set_previously_failed_channels(int64_t this_ptr, int64_tArray val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       FREE(val);
+       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
 }
 
-int8_tArray  CS_LDK_Refund_chain(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Refund_chain(&this_arg_conv).data, 32);
+int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_blinded_path_idxs(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_blinded_path_idxs(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Refund_amount_msats(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_PaymentParameters_set_previously_failed_blinded_path_idxs(int64_t this_ptr, int64_tArray val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       FREE(val);
+       PaymentParameters_set_previously_failed_blinded_path_idxs(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_Refund_features(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+int64_t  CS_LDK_PaymentParameters_new(int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_path_length_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg, int64_tArray previously_failed_blinded_path_idxs_arg) {
+       void* payee_arg_ptr = untag_ptr(payee_arg);
+       CHECK_ACCESS(payee_arg_ptr);
+       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
+       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
+       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
+       CHECK_ACCESS(expiry_time_arg_ptr);
+       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
+       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
+       LDKCVec_u64Z previously_failed_channels_arg_constr;
+       previously_failed_channels_arg_constr.datalen = previously_failed_channels_arg->arr_len;
+       if (previously_failed_channels_arg_constr.datalen > 0)
+               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               previously_failed_channels_arg_constr.data = NULL;
+       int64_t* previously_failed_channels_arg_vals = previously_failed_channels_arg->elems;
+       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
+               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
+               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
+       }
+       FREE(previously_failed_channels_arg);
+       LDKCVec_u64Z previously_failed_blinded_path_idxs_arg_constr;
+       previously_failed_blinded_path_idxs_arg_constr.datalen = previously_failed_blinded_path_idxs_arg->arr_len;
+       if (previously_failed_blinded_path_idxs_arg_constr.datalen > 0)
+               previously_failed_blinded_path_idxs_arg_constr.data = MALLOC(previously_failed_blinded_path_idxs_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               previously_failed_blinded_path_idxs_arg_constr.data = NULL;
+       int64_t* previously_failed_blinded_path_idxs_arg_vals = previously_failed_blinded_path_idxs_arg->elems;
+       for (size_t g = 0; g < previously_failed_blinded_path_idxs_arg_constr.datalen; g++) {
+               int64_t previously_failed_blinded_path_idxs_arg_conv_6 = previously_failed_blinded_path_idxs_arg_vals[g];
+               previously_failed_blinded_path_idxs_arg_constr.data[g] = previously_failed_blinded_path_idxs_arg_conv_6;
+       }
+       FREE(previously_failed_blinded_path_idxs_arg);
+       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_path_length_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr, previously_failed_blinded_path_idxs_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Refund_quantity(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Refund_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
+       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-int8_tArray  CS_LDK_Refund_payer_id(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Refund_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+int64_t  CS_LDK_PaymentParameters_clone_ptr(int64_t arg) {
+       LDKPaymentParameters arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_payer_note(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+int64_t  CS_LDK_PaymentParameters_clone(int64_t orig) {
+       LDKPaymentParameters orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Refund_hash(int64_t o) {
-       LDKRefund o_conv;
+int64_t  CS_LDK_PaymentParameters_hash(int64_t o) {
+       LDKPaymentParameters o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Refund_hash(&o_conv);
+       int64_t ret_conv = PaymentParameters_hash(&o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Refund_write(int64_t obj) {
-       LDKRefund obj_conv;
+jboolean  CS_LDK_PaymentParameters_eq(int64_t a, int64_t b) {
+       LDKPaymentParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPaymentParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_PaymentParameters_write(int64_t obj) {
+       LDKPaymentParameters obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Refund_write(&obj_conv);
+       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Refund_from_str(jstring s) {
-       LDKStr s_conv = str_ref_to_owned_c(s);
-       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
-       *ret_conv = Refund_from_str(s_conv);
+int64_t  CS_LDK_PaymentParameters_read(int8_tArray ser, int32_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
+       *ret_conv = PaymentParameters_read(ser_ref, arg);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-jstring  CS_LDK_Refund_to_str(int64_t o) {
-       LDKRefund o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = Refund_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_from_node_id(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK(payee_pubkey->arr_len == 33);
+       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
+       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_UtxoLookupError_clone(int64_t orig) {
-       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
-       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_clone(orig_conv));
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_for_keysend(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK(payee_pubkey->arr_len == 33);
+       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
+       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_UtxoLookupError_unknown_chain() {
-       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_chain());
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_from_bolt12_invoice(int64_t invoice) {
+       LDKBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_UtxoLookupError_unknown_tx() {
-       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_tx());
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_blinded(int64_tArray blinded_route_hints) {
+       LDKCVec_BlindedPaymentPathZ blinded_route_hints_constr;
+       blinded_route_hints_constr.datalen = blinded_route_hints->arr_len;
+       if (blinded_route_hints_constr.datalen > 0)
+               blinded_route_hints_constr.data = MALLOC(blinded_route_hints_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               blinded_route_hints_constr.data = NULL;
+       int64_t* blinded_route_hints_vals = blinded_route_hints->elems;
+       for (size_t u = 0; u < blinded_route_hints_constr.datalen; u++) {
+               int64_t blinded_route_hints_conv_20 = blinded_route_hints_vals[u];
+               LDKBlindedPaymentPath blinded_route_hints_conv_20_conv;
+               blinded_route_hints_conv_20_conv.inner = untag_ptr(blinded_route_hints_conv_20);
+               blinded_route_hints_conv_20_conv.is_owned = ptr_is_owned(blinded_route_hints_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_route_hints_conv_20_conv);
+               blinded_route_hints_conv_20_conv = BlindedPaymentPath_clone(&blinded_route_hints_conv_20_conv);
+               blinded_route_hints_constr.data[u] = blinded_route_hints_conv_20_conv;
+       }
+       FREE(blinded_route_hints);
+       LDKPaymentParameters ret_var = PaymentParameters_blinded(blinded_route_hints_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_UtxoResult_free(int64_t this_ptr) {
+void  CS_LDK_Payee_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
+       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       UtxoResult_free(this_ptr_conv);
+       Payee_free(this_ptr_conv);
 }
 
-static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(arg);
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_UtxoResult_clone_ptr(int64_t arg) {
-       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
-       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_Payee_clone_ptr(int64_t arg) {
+       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
+       int64_t ret_conv = Payee_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_UtxoResult_clone(int64_t orig) {
-       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(orig_conv);
+int64_t  CS_LDK_Payee_clone(int64_t orig) {
+       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UtxoResult_sync(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
-       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_sync(a_conv);
+int64_t  CS_LDK_Payee_blinded(int64_tArray route_hints, int64_t features) {
+       LDKCVec_BlindedPaymentPathZ route_hints_constr;
+       route_hints_constr.datalen = route_hints->arr_len;
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = route_hints->elems;
+       for (size_t u = 0; u < route_hints_constr.datalen; u++) {
+               int64_t route_hints_conv_20 = route_hints_vals[u];
+               LDKBlindedPaymentPath route_hints_conv_20_conv;
+               route_hints_conv_20_conv.inner = untag_ptr(route_hints_conv_20);
+               route_hints_conv_20_conv.is_owned = ptr_is_owned(route_hints_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_20_conv);
+               route_hints_conv_20_conv = BlindedPaymentPath_clone(&route_hints_conv_20_conv);
+               route_hints_constr.data[u] = route_hints_conv_20_conv;
+       }
+       FREE(route_hints);
+       LDKBolt12InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UtxoResult_async(int64_t a) {
-       LDKUtxoFuture a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = UtxoFuture_clone(&a_conv);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_async(a_conv);
+int64_t  CS_LDK_Payee_clear(int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKCVec_RouteHintZ route_hints_constr;
+       route_hints_constr.datalen = route_hints->arr_len;
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = route_hints->elems;
+       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
+               int64_t route_hints_conv_11 = route_hints_vals[l];
+               LDKRouteHint route_hints_conv_11_conv;
+               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
+               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
+               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
+               route_hints_constr.data[l] = route_hints_conv_11_conv;
+       }
+       FREE(route_hints);
+       LDKBolt11InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_UtxoLookup_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       UtxoLookup_free(this_ptr_conv);
+int64_t  CS_LDK_Payee_hash(int64_t o) {
+       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
+       int64_t ret_conv = Payee_hash(o_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_UtxoFuture_free(int64_t this_obj) {
-       LDKUtxoFuture this_obj_conv;
+jboolean  CS_LDK_Payee_eq(int64_t a, int64_t b) {
+       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
+       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
+       jboolean ret_conv = Payee_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_RouteHint_write(int64_t obj) {
+       LDKRouteHint obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_RouteHint_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = RouteHint_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_RouteHintHop_write(int64_t obj) {
+       LDKRouteHintHop obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_RouteHintHop_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = RouteHintHop_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_FirstHopCandidate_free(int64_t this_obj) {
+       LDKFirstHopCandidate this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UtxoFuture_free(this_obj_conv);
+       FirstHopCandidate_free(this_obj_conv);
 }
 
-static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
-       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
+static inline uint64_t FirstHopCandidate_clone_ptr(LDKFirstHopCandidate *NONNULL_PTR arg) {
+       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_UtxoFuture_clone_ptr(int64_t arg) {
-       LDKUtxoFuture arg_conv;
+int64_t  CS_LDK_FirstHopCandidate_clone_ptr(int64_t arg) {
+       LDKFirstHopCandidate arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
+       int64_t ret_conv = FirstHopCandidate_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UtxoFuture_clone(int64_t orig) {
-       LDKUtxoFuture orig_conv;
+int64_t  CS_LDK_FirstHopCandidate_clone(int64_t orig) {
+       LDKFirstHopCandidate orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
+       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UtxoFuture_new() {
-       LDKUtxoFuture ret_var = UtxoFuture_new();
+void  CS_LDK_PublicHopCandidate_free(int64_t this_obj) {
+       LDKPublicHopCandidate this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PublicHopCandidate_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_PublicHopCandidate_get_short_channel_id(int64_t this_ptr) {
+       LDKPublicHopCandidate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = PublicHopCandidate_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_PublicHopCandidate_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKPublicHopCandidate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PublicHopCandidate_set_short_channel_id(&this_ptr_conv, val);
+}
+
+static inline uint64_t PublicHopCandidate_clone_ptr(LDKPublicHopCandidate *NONNULL_PTR arg) {
+       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-void  CS_LDK_UtxoFuture_resolve_without_forwarding(int64_t this_arg, int64_t graph, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
+int64_t  CS_LDK_PublicHopCandidate_clone_ptr(int64_t arg) {
+       LDKPublicHopCandidate arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PublicHopCandidate_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_UtxoFuture_resolve(int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       LDKP2PGossipSync gossip_conv;
-       gossip_conv.inner = untag_ptr(gossip);
-       gossip_conv.is_owned = ptr_is_owned(gossip);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
-       gossip_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
+int64_t  CS_LDK_PublicHopCandidate_clone(int64_t orig) {
+       LDKPublicHopCandidate orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeId_free(int64_t this_obj) {
-       LDKNodeId this_obj_conv;
+void  CS_LDK_PrivateHopCandidate_free(int64_t this_obj) {
+       LDKPrivateHopCandidate this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeId_free(this_obj_conv);
+       PrivateHopCandidate_free(this_obj_conv);
 }
 
-static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
-       LDKNodeId ret_var = NodeId_clone(arg);
+static inline uint64_t PrivateHopCandidate_clone_ptr(LDKPrivateHopCandidate *NONNULL_PTR arg) {
+       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeId_clone_ptr(int64_t arg) {
-       LDKNodeId arg_conv;
+int64_t  CS_LDK_PrivateHopCandidate_clone_ptr(int64_t arg) {
+       LDKPrivateHopCandidate arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
+       int64_t ret_conv = PrivateHopCandidate_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeId_clone(int64_t orig) {
-       LDKNodeId orig_conv;
+int64_t  CS_LDK_PrivateHopCandidate_clone(int64_t orig) {
+       LDKPrivateHopCandidate orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeId ret_var = NodeId_clone(&orig_conv);
+       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NodeId_from_pubkey(int8_tArray pubkey) {
-       LDKPublicKey pubkey_ref;
-       CHECK(pubkey->arr_len == 33);
-       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
-       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
+void  CS_LDK_BlindedPathCandidate_free(int64_t this_obj) {
+       LDKBlindedPathCandidate this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedPathCandidate_free(this_obj_conv);
+}
+
+static inline uint64_t BlindedPathCandidate_clone_ptr(LDKBlindedPathCandidate *NONNULL_PTR arg) {
+       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-int64_t  CS_LDK_NodeId_from_slice(int8_tArray bytes) {
-       LDKu8slice bytes_ref;
-       bytes_ref.datalen = bytes->arr_len;
-       bytes_ref.data = bytes->elems;
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = NodeId_from_slice(bytes_ref);
-       FREE(bytes);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_NodeId_as_slice(int64_t this_arg) {
-       LDKNodeId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_NodeId_as_array(int64_t this_arg) {
-       LDKNodeId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, *NodeId_as_array(&this_arg_conv), 33);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_NodeId_as_pubkey(int64_t this_arg) {
-       LDKNodeId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
-       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-jstring  CS_LDK_NodeId_to_str(int64_t o) {
-       LDKNodeId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NodeId_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_NodeId_hash(int64_t o) {
-       LDKNodeId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = NodeId_hash(&o_conv);
+int64_t  CS_LDK_BlindedPathCandidate_clone_ptr(int64_t arg) {
+       LDKBlindedPathCandidate arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedPathCandidate_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_NodeId_write(int64_t obj) {
-       LDKNodeId obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_NodeId_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = NodeId_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_BlindedPathCandidate_clone(int64_t orig) {
+       LDKBlindedPathCandidate orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NetworkGraph_free(int64_t this_obj) {
-       LDKNetworkGraph this_obj_conv;
+void  CS_LDK_OneHopBlindedPathCandidate_free(int64_t this_obj) {
+       LDKOneHopBlindedPathCandidate this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NetworkGraph_free(this_obj_conv);
+       OneHopBlindedPathCandidate_free(this_obj_conv);
 }
 
-void  CS_LDK_ReadOnlyNetworkGraph_free(int64_t this_obj) {
-       LDKReadOnlyNetworkGraph this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ReadOnlyNetworkGraph_free(this_obj_conv);
+static inline uint64_t OneHopBlindedPathCandidate_clone_ptr(LDKOneHopBlindedPathCandidate *NONNULL_PTR arg) {
+       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OneHopBlindedPathCandidate_clone_ptr(int64_t arg) {
+       LDKOneHopBlindedPathCandidate arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OneHopBlindedPathCandidate_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_NetworkUpdate_free(int64_t this_ptr) {
+int64_t  CS_LDK_OneHopBlindedPathCandidate_clone(int64_t orig) {
+       LDKOneHopBlindedPathCandidate orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_CandidateRouteHop_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
+       LDKCandidateRouteHop this_ptr_conv = *(LDKCandidateRouteHop*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       NetworkUpdate_free(this_ptr_conv);
+       CandidateRouteHop_free(this_ptr_conv);
 }
 
-static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(arg);
+static inline uint64_t CandidateRouteHop_clone_ptr(LDKCandidateRouteHop *NONNULL_PTR arg) {
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_NetworkUpdate_clone_ptr(int64_t arg) {
-       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
-       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
+int64_t  CS_LDK_CandidateRouteHop_clone_ptr(int64_t arg) {
+       LDKCandidateRouteHop* arg_conv = (LDKCandidateRouteHop*)untag_ptr(arg);
+       int64_t ret_conv = CandidateRouteHop_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NetworkUpdate_clone(int64_t orig) {
-       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(orig_conv);
+int64_t  CS_LDK_CandidateRouteHop_clone(int64_t orig) {
+       LDKCandidateRouteHop* orig_conv = (LDKCandidateRouteHop*)untag_ptr(orig);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_channel_update_message(int64_t msg) {
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
+int64_t  CS_LDK_CandidateRouteHop_first_hop(int64_t a) {
+       LDKFirstHopCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = FirstHopCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_first_hop(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_channel_failure(int64_t short_channel_id, jboolean is_permanent) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
+int64_t  CS_LDK_CandidateRouteHop_public_hop(int64_t a) {
+       LDKPublicHopCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = PublicHopCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_public_hop(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_node_failure(int8_tArray node_id, jboolean is_permanent) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
+int64_t  CS_LDK_CandidateRouteHop_private_hop(int64_t a) {
+       LDKPrivateHopCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = PrivateHopCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_private_hop(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_NetworkUpdate_eq(int64_t a, int64_t b) {
-       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
-       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
-       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_NetworkUpdate_write(int64_t obj) {
-       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_CandidateRouteHop_blinded(int64_t a) {
+       LDKBlindedPathCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = BlindedPathCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_blinded(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
-       *ret_conv = NetworkUpdate_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_CandidateRouteHop_one_hop_blinded(int64_t a) {
+       LDKOneHopBlindedPathCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = OneHopBlindedPathCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_one_hop_blinded(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_P2PGossipSync_free(int64_t this_obj) {
-       LDKP2PGossipSync this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       P2PGossipSync_free(this_obj_conv);
+int64_t  CS_LDK_CandidateRouteHop_globally_unique_short_channel_id(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = CandidateRouteHop_globally_unique_short_channel_id(this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_P2PGossipSync_new(int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
+int32_t  CS_LDK_CandidateRouteHop_cltv_expiry_delta(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       int32_t ret_conv = CandidateRouteHop_cltv_expiry_delta(this_arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_htlc_minimum_msat(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       int64_t ret_conv = CandidateRouteHop_htlc_minimum_msat(this_arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_fees(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKRoutingFees ret_var = CandidateRouteHop_fees(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_source(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKNodeId ret_var = CandidateRouteHop_source(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_target(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKNodeId ret_var = CandidateRouteHop_target(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_find_route(int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK(our_node_pubkey->arr_len == 33);
+       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = untag_ptr(network_graph);
        network_graph_conv.is_owned = ptr_is_owned(network_graph);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        network_graph_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+       LDKCVec_ChannelDetailsZ first_hops_constr;
+       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
+       if (first_hops != NULL) {
+               first_hops_constr.datalen = first_hops->arr_len;
+               if (first_hops_constr.datalen > 0)
+                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
+               else
+                       first_hops_constr.data = NULL;
+               int64_t* first_hops_vals = first_hops->elems;
+               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
+                       int64_t first_hops_conv_16 = first_hops_vals[q];
+                       LDKChannelDetails first_hops_conv_16_conv;
+                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
+                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
+                       first_hops_conv_16_conv.is_owned = false;
+                       first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
+               FREE(first_hops);
+               first_hops_ptr = &first_hops_constr;
        }
        void* logger_ptr = untag_ptr(logger);
        CHECK_ACCESS(logger_ptr);
@@ -69812,1206 +73568,1378 @@ int64_t  CS_LDK_P2PGossipSync_new(int64_t network_graph, int64_t utxo_lookup, in
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       void* scorer_ptr = untag_ptr(scorer);
+       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
+       LDKScoreLookUp* scorer_conv = (LDKScoreLookUp*)scorer_ptr;
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv.is_owned = false;
+       uint8_t random_seed_bytes_arr[32];
+       CHECK(random_seed_bytes->arr_len == 32);
+       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
+       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_P2PGossipSync_add_utxo_lookup(int64_t this_arg, int64_t utxo_lookup) {
-       LDKP2PGossipSync this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
+int64_t  CS_LDK_build_route_from_hops(int8_tArray our_node_pubkey, ptrArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK(our_node_pubkey->arr_len == 33);
+       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
+       LDKCVec_PublicKeyZ hops_constr;
+       hops_constr.datalen = hops->arr_len;
+       if (hops_constr.datalen > 0)
+               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               hops_constr.data = NULL;
+       int8_tArray* hops_vals = (void*) hops->elems;
+       for (size_t i = 0; i < hops_constr.datalen; i++) {
+               int8_tArray hops_conv_8 = hops_vals[i];
+               LDKPublicKey hops_conv_8_ref;
+               CHECK(hops_conv_8->arr_len == 33);
+               memcpy(hops_conv_8_ref.compressed_form, hops_conv_8->elems, 33); FREE(hops_conv_8);
+               hops_constr.data[i] = hops_conv_8_ref;
        }
-       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_conv);
+       FREE(hops);
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       uint8_t random_seed_bytes_arr[32];
+       CHECK(random_seed_bytes->arr_len == 32);
+       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NetworkGraph_handle_network_update(int64_t this_arg, int64_t network_update) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
-       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
+void  CS_LDK_ScoreLookUp_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreLookUp this_ptr_conv = *(LDKScoreLookUp*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreLookUp_free(this_ptr_conv);
 }
 
-int8_tArray  CS_LDK_NetworkGraph_get_chain_hash(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, NetworkGraph_get_chain_hash(&this_arg_conv).data, 32);
-       return ret_arr;
+void  CS_LDK_ScoreUpdate_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreUpdate this_ptr_conv = *(LDKScoreUpdate*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreUpdate_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_verify_node_announcement(int64_t msg) {
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_node_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_Score_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Score_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_verify_channel_announcement(int64_t msg) {
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_channel_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_LockableScore_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       LockableScore_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_P2PGossipSync_as_RoutingMessageHandler(int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+void  CS_LDK_WriteableScore_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WriteableScore_free(this_ptr_conv);
+}
+
+void  CS_LDK_MultiThreadedLockableScore_free(int64_t this_obj) {
+       LDKMultiThreadedLockableScore this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedLockableScore_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_MultiThreadedLockableScore_as_LockableScore(int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
-       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
+       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
+       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_P2PGossipSync_as_MessageSendEventsProvider(int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+int8_tArray  CS_LDK_MultiThreadedLockableScore_write(int64_t obj) {
+       LDKMultiThreadedLockableScore obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_MultiThreadedLockableScore_as_WriteableScore(int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
-       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
+       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
+       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ChannelUpdateInfo_free(int64_t this_obj) {
-       LDKChannelUpdateInfo this_obj_conv;
+int64_t  CS_LDK_MultiThreadedLockableScore_new(int64_t score) {
+       void* score_ptr = untag_ptr(score);
+       CHECK_ACCESS(score_ptr);
+       LDKScore score_conv = *(LDKScore*)(score_ptr);
+       if (score_conv.free == LDKScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScore_JCalls_cloned(&score_conv);
+       }
+       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_MultiThreadedScoreLockRead_free(int64_t this_obj) {
+       LDKMultiThreadedScoreLockRead this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUpdateInfo_free(this_obj_conv);
-}
-
-int32_t  CS_LDK_ChannelUpdateInfo_get_last_update(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
-       return ret_conv;
+       MultiThreadedScoreLockRead_free(this_obj_conv);
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_last_update(int64_t this_ptr, int32_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+void  CS_LDK_MultiThreadedScoreLockWrite_free(int64_t this_obj) {
+       LDKMultiThreadedScoreLockWrite this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedScoreLockWrite_free(this_obj_conv);
 }
 
-jboolean  CS_LDK_ChannelUpdateInfo_get_enabled(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_MultiThreadedScoreLockRead_as_ScoreLookUp(int64_t this_arg) {
+       LDKMultiThreadedScoreLockRead this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = MultiThreadedScoreLockRead_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_enabled(int64_t this_ptr, jboolean val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+int8_tArray  CS_LDK_MultiThreadedScoreLockWrite_write(int64_t obj) {
+       LDKMultiThreadedScoreLockWrite obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = MultiThreadedScoreLockWrite_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int16_t  CS_LDK_ChannelUpdateInfo_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_MultiThreadedScoreLockWrite_as_ScoreUpdate(int64_t this_arg) {
+       LDKMultiThreadedScoreLockWrite this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = MultiThreadedScoreLockWrite_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+void  CS_LDK_ChannelUsage_free(int64_t this_obj) {
+       LDKChannelUsage this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUsage_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelUsage_get_amount_msat(int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
+void  CS_LDK_ChannelUsage_set_amount_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelUsage_get_inflight_htlc_msat(int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ChannelUpdateInfo_get_fees(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ChannelUpdateInfo_set_fees(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
+void  CS_LDK_ChannelUsage_set_inflight_htlc_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
+       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_get_last_update_message(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelUsage_get_effective_capacity(int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_last_update_message(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
+void  CS_LDK_ChannelUsage_set_effective_capacity(int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdate val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdate_clone(&val_conv);
-       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
+       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
+       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_new(int32_t last_update_arg, jboolean enabled_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int64_t last_update_message_arg) {
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       LDKChannelUpdate last_update_message_arg_conv;
-       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
-       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
-       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_message_arg_conv);
+int64_t  CS_LDK_ChannelUsage_new(int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
+       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
+       CHECK_ACCESS(effective_capacity_arg_ptr);
+       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
+       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
+       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
+static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
+       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelUpdateInfo_clone_ptr(int64_t arg) {
-       LDKChannelUpdateInfo arg_conv;
+int64_t  CS_LDK_ChannelUsage_clone_ptr(int64_t arg) {
+       LDKChannelUsage arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_clone(int64_t orig) {
-       LDKChannelUpdateInfo orig_conv;
+int64_t  CS_LDK_ChannelUsage_clone(int64_t orig) {
+       LDKChannelUsage orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
+       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelUpdateInfo_eq(int64_t a, int64_t b) {
-       LDKChannelUpdateInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelUpdateInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
+void  CS_LDK_FixedPenaltyScorer_free(int64_t this_obj) {
+       LDKFixedPenaltyScorer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       FixedPenaltyScorer_free(this_obj_conv);
 }
 
-jstring  CS_LDK_ChannelUpdateInfo_to_str(int64_t o) {
-       LDKChannelUpdateInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ChannelUpdateInfo_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_FixedPenaltyScorer_clone_ptr(int64_t arg) {
+       LDKFixedPenaltyScorer arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelUpdateInfo_write(int64_t obj) {
-       LDKChannelUpdateInfo obj_conv;
+int64_t  CS_LDK_FixedPenaltyScorer_clone(int64_t orig) {
+       LDKFixedPenaltyScorer orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FixedPenaltyScorer_with_penalty(int64_t penalty_msat) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreLookUp(int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = FixedPenaltyScorer_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreUpdate(int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = FixedPenaltyScorer_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_FixedPenaltyScorer_write(int64_t obj) {
+       LDKFixedPenaltyScorer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_read(int8_tArray ser) {
+int64_t  CS_LDK_FixedPenaltyScorer_read(int8_tArray ser, int64_t arg) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
-       *ret_conv = ChannelUpdateInfo_read(ser_ref);
+       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
+       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelInfo_free(int64_t this_obj) {
-       LDKChannelInfo this_obj_conv;
+void  CS_LDK_ProbabilisticScorer_free(int64_t this_obj) {
+       LDKProbabilisticScorer this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelInfo_free(this_obj_conv);
+       ProbabilisticScorer_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_features(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_free(int64_t this_obj) {
+       LDKProbabilisticScoringFeeParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ProbabilisticScoringFeeParameters_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_features(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       ChannelInfo_set_features(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_node_one(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_node_one(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_one_to_two(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_one_to_two(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_node_two(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_node_two(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_two_to_one(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_two_to_one(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_capacity_sats(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_capacity_sats(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_announcement_message(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_announcement_message(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelAnnouncement_clone(&val_conv);
-       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
-}
-
-static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
-       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_ChannelInfo_clone_ptr(int64_t arg) {
-       LDKChannelInfo arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_ChannelInfo_clone(int64_t orig) {
-       LDKChannelInfo orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_ChannelInfo_eq(int64_t a, int64_t b) {
-       LDKChannelInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelInfo_get_directional_info(int64_t this_arg, int8_t channel_flags) {
-       LDKChannelInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
 }
 
-jstring  CS_LDK_ChannelInfo_to_str(int64_t o) {
-       LDKChannelInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ChannelInfo_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+jboolean  CS_LDK_ProbabilisticScoringFeeParameters_get_linear_success_probability(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ProbabilisticScoringFeeParameters_get_linear_success_probability(&this_ptr_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelInfo_write(int64_t obj) {
-       LDKChannelInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ChannelInfo_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
-       *ret_conv = ChannelInfo_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_DirectedChannelInfo_free(int64_t this_obj) {
-       LDKDirectedChannelInfo this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DirectedChannelInfo_free(this_obj_conv);
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_linear_success_probability(int64_t this_ptr, jboolean val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_linear_success_probability(&this_ptr_conv, val);
 }
 
-static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_DirectedChannelInfo_clone_ptr(int64_t arg) {
-       LDKDirectedChannelInfo arg_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone_ptr(int64_t arg) {
+       LDKProbabilisticScoringFeeParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_clone(int64_t orig) {
-       LDKDirectedChannelInfo orig_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone(int64_t orig) {
+       LDKProbabilisticScoringFeeParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_channel(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_default() {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_effective_capacity(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned(int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_source(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned_from_list(int64_t this_arg, int64_tArray node_ids) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNodeId ret_var = DirectedChannelInfo_source(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_NodeIdZ node_ids_constr;
+       node_ids_constr.datalen = node_ids->arr_len;
+       if (node_ids_constr.datalen > 0)
+               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
+       else
+               node_ids_constr.data = NULL;
+       int64_t* node_ids_vals = node_ids->elems;
+       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
+               int64_t node_ids_conv_8 = node_ids_vals[i];
+               LDKNodeId node_ids_conv_8_conv;
+               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
+               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
+               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
+               node_ids_constr.data[i] = node_ids_conv_8_conv;
+       }
+       FREE(node_ids);
+       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_target(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_remove_banned(int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNodeId ret_var = DirectedChannelInfo_target(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
 }
 
-void  CS_LDK_EffectiveCapacity_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EffectiveCapacity_free(this_ptr_conv);
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_manual_penalty(int64_t this_arg, int64_t node_id, int64_t penalty) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
 }
 
-static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ProbabilisticScoringFeeParameters_remove_manual_penalty(int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
 }
-int64_t  CS_LDK_EffectiveCapacity_clone_ptr(int64_t arg) {
-       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
-       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
-       return ret_conv;
+
+void  CS_LDK_ProbabilisticScoringFeeParameters_clear_manual_penalties(int64_t this_arg) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
 }
 
-int64_t  CS_LDK_EffectiveCapacity_clone(int64_t orig) {
-       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_exact_liquidity(int64_t liquidity_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_advertised_max_htlc(int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_total(int64_t capacity_msat, int64_t htlc_maximum_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_infinite() {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_infinite();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_hint_max_htlc(int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_unknown() {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_unknown();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_as_msat(int64_t this_arg) {
-       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
-       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_RoutingFees_free(int64_t this_obj) {
-       LDKRoutingFees this_obj_conv;
+void  CS_LDK_ProbabilisticScoringDecayParameters_free(int64_t this_obj) {
+       LDKProbabilisticScoringDecayParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RoutingFees_free(this_obj_conv);
+       ProbabilisticScoringDecayParameters_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_RoutingFees_get_base_msat(int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_RoutingFees_set_base_msat(int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RoutingFees_set_base_msat(&this_ptr_conv, val);
+       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_RoutingFees_get_proportional_millionths(int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_RoutingFees_set_proportional_millionths(int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
+       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_RoutingFees_new(int32_t base_msat_arg, int32_t proportional_millionths_arg) {
-       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_new(int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_RoutingFees_eq(int64_t a, int64_t b) {
-       LDKRoutingFees a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoutingFees b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
-       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RoutingFees_clone_ptr(int64_t arg) {
-       LDKRoutingFees arg_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone_ptr(int64_t arg) {
+       LDKProbabilisticScoringDecayParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RoutingFees_clone(int64_t orig) {
-       LDKRoutingFees orig_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone(int64_t orig) {
+       LDKProbabilisticScoringDecayParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RoutingFees_hash(int64_t o) {
-       LDKRoutingFees o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_default() {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_RoutingFees_write(int64_t obj) {
-       LDKRoutingFees obj_conv;
+int64_t  CS_LDK_ProbabilisticScorer_new(int64_t decay_params, int64_t network_graph, int64_t logger) {
+       LDKProbabilisticScoringDecayParameters decay_params_conv;
+       decay_params_conv.inner = untag_ptr(decay_params);
+       decay_params_conv.is_owned = ptr_is_owned(decay_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
+       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ProbabilisticScorer_debug_log_liquidity_stats(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_estimated_channel_liquidity_range(int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
+       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_payment_success_probability(int64_t this_arg, int64_t scid, int64_t target, int64_t amount_msat, int64_t params) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKProbabilisticScoringFeeParameters params_conv;
+       params_conv.inner = untag_ptr(params);
+       params_conv.is_owned = ptr_is_owned(params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
+       params_conv.is_owned = false;
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = ProbabilisticScorer_historical_estimated_payment_success_probability(&this_arg_conv, scid, &target_conv, amount_msat, &params_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_as_ScoreLookUp(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ProbabilisticScorer_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_as_ScoreUpdate(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = ProbabilisticScorer_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_as_Score(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
+       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_ProbabilisticScorer_write(int64_t obj) {
+       LDKProbabilisticScorer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RoutingFees_read(int8_tArray ser) {
+int64_t  CS_LDK_ProbabilisticScorer_read(int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
-       *ret_conv = RoutingFees_read(ser_ref);
+       LDKProbabilisticScoringDecayParameters arg_a_conv;
+       arg_a_conv.inner = untag_ptr(arg_a);
+       arg_a_conv.is_owned = ptr_is_owned(arg_a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
+       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
+       LDKNetworkGraph arg_b_conv;
+       arg_b_conv.inner = untag_ptr(arg_b);
+       arg_b_conv.is_owned = ptr_is_owned(arg_b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
+       arg_b_conv.is_owned = false;
+       void* arg_c_ptr = untag_ptr(arg_c);
+       CHECK_ACCESS(arg_c_ptr);
+       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
+       if (arg_c_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&arg_c_conv);
+       }
+       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
+       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeAnnouncementInfo_free(int64_t this_obj) {
-       LDKNodeAnnouncementInfo this_obj_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_free(int64_t this_obj) {
+       LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAnnouncementInfo_free(this_obj_conv);
+       DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_get_features(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
+       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_features(int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures val_conv;
+       LDKOutPoint val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeFeatures_clone(&val_conv);
-       NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_per_commitment_point(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
 }
 
-int32_t  CS_LDK_NodeAnnouncementInfo_get_last_update(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int16_t  CS_LDK_DelayedPaymentOutputDescriptor_get_to_self_delay(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
+       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_last_update(int64_t this_ptr, int32_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_to_self_delay(int64_t this_ptr, int16_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
+       DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
-int8_tArray  CS_LDK_NodeAnnouncementInfo_get_rgb(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_output(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(3, __LINE__);
-       memcpy(ret_arr->elems, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv), 3);
-       return ret_arr;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_rgb(int64_t this_ptr, int8_tArray val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThreeBytes val_ref;
-       CHECK(val->arr_len == 3);
-       memcpy(val_ref.data, val->elems, 3); FREE(val);
-       NodeAnnouncementInfo_set_rgb(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_get_alias(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_revocation_pubkey(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAnnouncementInfo_get_alias(&this_ptr_conv);
+       LDKRevocationKey ret_var = DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_alias(int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_revocation_pubkey(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias val_conv;
+       LDKRevocationKey val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAlias_clone(&val_conv);
-       NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
+       val_conv = RevocationKey_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_get_announcement_message(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
+       LDKChannelTransactionParameters ret_var = DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_announcement_message(int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement val_conv;
+       LDKChannelTransactionParameters val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncement_clone(&val_conv);
-       NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_new(int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_t announcement_message_arg) {
-       LDKNodeFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
-       LDKThreeBytes rgb_arg_ref;
-       CHECK(rgb_arg->arr_len == 3);
-       memcpy(rgb_arg_ref.data, rgb_arg->elems, 3); FREE(rgb_arg);
-       LDKNodeAlias alias_arg_conv;
-       alias_arg_conv.inner = untag_ptr(alias_arg);
-       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
-       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
-       LDKNodeAnnouncement announcement_message_arg_conv;
-       announcement_message_arg_conv.inner = untag_ptr(announcement_message_arg);
-       announcement_message_arg_conv.is_owned = ptr_is_owned(announcement_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
-       announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, announcement_message_arg_conv);
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_new(int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int64_t revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       LDKPublicKey per_commitment_point_arg_ref;
+       CHECK(per_commitment_point_arg->arr_len == 33);
+       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKRevocationKey revocation_pubkey_arg_conv;
+       revocation_pubkey_arg_conv.inner = untag_ptr(revocation_pubkey_arg);
+       revocation_pubkey_arg_conv.is_owned = ptr_is_owned(revocation_pubkey_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(revocation_pubkey_arg_conv);
+       revocation_pubkey_arg_conv = RevocationKey_clone(&revocation_pubkey_arg_conv);
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK(channel_keys_id_arg->arr_len == 32);
+       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
+       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
+       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
+       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
+       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeAnnouncementInfo_clone_ptr(int64_t arg) {
-       LDKNodeAnnouncementInfo arg_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone_ptr(int64_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_clone(int64_t orig) {
-       LDKNodeAnnouncementInfo orig_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone(int64_t orig) {
+       LDKDelayedPaymentOutputDescriptor orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_NodeAnnouncementInfo_eq(int64_t a, int64_t b) {
-       LDKNodeAnnouncementInfo a_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_hash(int64_t o) {
+       LDKDelayedPaymentOutputDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_DelayedPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeAnnouncementInfo b_conv;
+       LDKDelayedPaymentOutputDescriptor b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeAnnouncementInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_tArray  CS_LDK_NodeAnnouncementInfo_addresses(int64_t this_arg) {
-       LDKNodeAnnouncementInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementInfo_addresses(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t p = 0; p < ret_var.datalen; p++) {
-               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
-               *ret_conv_15_copy = ret_var.data[p];
-               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
-               ret_arr_ptr[p] = ret_conv_15_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_NodeAnnouncementInfo_write(int64_t obj) {
-       LDKNodeAnnouncementInfo obj_conv;
+int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_write(int64_t obj) {
+       LDKDelayedPaymentOutputDescriptor obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_read(int8_tArray ser) {
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
-       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeAlias_free(int64_t this_obj) {
-       LDKNodeAlias this_obj_conv;
+void  CS_LDK_StaticPaymentOutputDescriptor_free(int64_t this_obj) {
+       LDKStaticPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAlias_free(this_obj_conv);
+       StaticPaymentOutputDescriptor_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_NodeAlias_get_a(int64_t this_ptr) {
-       LDKNodeAlias this_ptr_conv;
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *NodeAlias_get_a(&this_ptr_conv), 32);
+       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_StaticPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_output(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+void  CS_LDK_StaticPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_NodeAlias_set_a(int64_t this_ptr, int8_tArray val) {
-       LDKNodeAlias this_ptr_conv;
+void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -71019,11951 +74947,13271 @@ void  CS_LDK_NodeAlias_set_a(int64_t this_ptr, int8_tArray val) {
        LDKThirtyTwoBytes val_ref;
        CHECK(val->arr_len == 32);
        memcpy(val_ref.data, val->elems, 32); FREE(val);
-       NodeAlias_set_a(&this_ptr_conv, val_ref);
+       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_NodeAlias_new(int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK(a_arg->arr_len == 32);
-       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
-       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = StaticPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
-       LDKNodeAlias ret_var = NodeAlias_clone(arg);
+void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       StaticPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_new(int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK(channel_keys_id_arg->arr_len == 32);
+       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
+       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
+       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
+       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
+       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeAlias_clone_ptr(int64_t arg) {
-       LDKNodeAlias arg_conv;
+
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone_ptr(int64_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
+       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeAlias_clone(int64_t orig) {
-       LDKNodeAlias orig_conv;
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone(int64_t orig) {
+       LDKStaticPaymentOutputDescriptor orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NodeAlias_hash(int64_t o) {
-       LDKNodeAlias o_conv;
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_hash(int64_t o) {
+       LDKStaticPaymentOutputDescriptor o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = NodeAlias_hash(&o_conv);
+       int64_t ret_conv = StaticPaymentOutputDescriptor_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeAlias_eq(int64_t a, int64_t b) {
-       LDKNodeAlias a_conv;
+jboolean  CS_LDK_StaticPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
+       LDKStaticPaymentOutputDescriptor a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeAlias b_conv;
+       LDKStaticPaymentOutputDescriptor b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
+       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-jstring  CS_LDK_NodeAlias_to_str(int64_t o) {
-       LDKNodeAlias o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NodeAlias_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_witness_script(int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = StaticPaymentOutputDescriptor_witness_script(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_max_witness_length(int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_max_witness_length(&this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_NodeAlias_write(int64_t obj) {
-       LDKNodeAlias obj_conv;
+int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_write(int64_t obj) {
+       LDKStaticPaymentOutputDescriptor obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_conv);
+       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_NodeAlias_read(int8_tArray ser) {
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
-       *ret_conv = NodeAlias_read(ser_ref);
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeInfo_free(int64_t this_obj) {
-       LDKNodeInfo this_obj_conv;
+void  CS_LDK_SpendableOutputDescriptor_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SpendableOutputDescriptor_free(this_ptr_conv);
+}
+
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_SpendableOutputDescriptor_clone_ptr(int64_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
+       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_clone(int64_t orig) {
+       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_static_output(int64_t outpoint, int64_t output, int8_tArray channel_keys_id) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       void* output_ptr = untag_ptr(output);
+       CHECK_ACCESS(output_ptr);
+       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
+       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
+       LDKThirtyTwoBytes channel_keys_id_ref;
+       CHECK(channel_keys_id->arr_len == 32);
+       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv, channel_keys_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_delayed_payment_output(int64_t a) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_static_payment_output(int64_t a) {
+       LDKStaticPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_hash(int64_t o) {
+       LDKSpendableOutputDescriptor* o_conv = (LDKSpendableOutputDescriptor*)untag_ptr(o);
+       int64_t ret_conv = SpendableOutputDescriptor_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_SpendableOutputDescriptor_eq(int64_t a, int64_t b) {
+       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
+       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
+       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_SpendableOutputDescriptor_write(int64_t obj) {
+       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_create_spendable_outputs_psbt(int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = descriptors->arr_len;
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = descriptors->elems;
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       FREE(descriptors);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = outputs->arr_len;
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = outputs->elems;
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       FREE(outputs);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = change_destination_script->arr_len;
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(change_destination_script_ref.data, change_destination_script->elems, change_destination_script_ref.datalen); FREE(change_destination_script);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ), "LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ");
+       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_ChannelDerivationParameters_free(int64_t this_obj) {
+       LDKChannelDerivationParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeInfo_free(this_obj_conv);
+       ChannelDerivationParameters_free(this_obj_conv);
 }
 
-int64_tArray  CS_LDK_NodeInfo_get_channels(int64_t this_ptr) {
-       LDKNodeInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_get_value_satoshis(int64_t this_ptr) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
-       }
-       
-       FREE(ret_var.data);
+       int64_t ret_conv = ChannelDerivationParameters_get_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelDerivationParameters_set_value_satoshis(int64_t this_ptr, int64_t val) {
+       LDKChannelDerivationParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelDerivationParameters_set_value_satoshis(&this_ptr_conv, val);
+}
+
+int8_tArray  CS_LDK_ChannelDerivationParameters_get_keys_id(int64_t this_ptr) {
+       LDKChannelDerivationParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ChannelDerivationParameters_get_keys_id(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_NodeInfo_set_channels(int64_t this_ptr, int64_tArray val) {
-       LDKNodeInfo this_ptr_conv;
+void  CS_LDK_ChannelDerivationParameters_set_keys_id(int64_t this_ptr, int8_tArray val) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       FREE(val);
-       NodeInfo_set_channels(&this_ptr_conv, val_constr);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ChannelDerivationParameters_set_keys_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_NodeInfo_get_announcement_info(int64_t this_ptr) {
-       LDKNodeInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_get_transaction_parameters(int64_t this_ptr) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
+       LDKChannelTransactionParameters ret_var = ChannelDerivationParameters_get_transaction_parameters(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeInfo_set_announcement_info(int64_t this_ptr, int64_t val) {
-       LDKNodeInfo this_ptr_conv;
+void  CS_LDK_ChannelDerivationParameters_set_transaction_parameters(int64_t this_ptr, int64_t val) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo val_conv;
+       LDKChannelTransactionParameters val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncementInfo_clone(&val_conv);
-       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       ChannelDerivationParameters_set_transaction_parameters(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_NodeInfo_new(int64_tArray channels_arg, int64_t announcement_info_arg) {
-       LDKCVec_u64Z channels_arg_constr;
-       channels_arg_constr.datalen = channels_arg->arr_len;
-       if (channels_arg_constr.datalen > 0)
-               channels_arg_constr.data = MALLOC(channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               channels_arg_constr.data = NULL;
-       int64_t* channels_arg_vals = channels_arg->elems;
-       for (size_t g = 0; g < channels_arg_constr.datalen; g++) {
-               int64_t channels_arg_conv_6 = channels_arg_vals[g];
-               channels_arg_constr.data[g] = channels_arg_conv_6;
-       }
-       FREE(channels_arg);
-       LDKNodeAnnouncementInfo announcement_info_arg_conv;
-       announcement_info_arg_conv.inner = untag_ptr(announcement_info_arg);
-       announcement_info_arg_conv.is_owned = ptr_is_owned(announcement_info_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
-       announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
-       LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, announcement_info_arg_conv);
+int64_t  CS_LDK_ChannelDerivationParameters_new(int64_t value_satoshis_arg, int8_tArray keys_id_arg, int64_t transaction_parameters_arg) {
+       LDKThirtyTwoBytes keys_id_arg_ref;
+       CHECK(keys_id_arg->arr_len == 32);
+       memcpy(keys_id_arg_ref.data, keys_id_arg->elems, 32); FREE(keys_id_arg);
+       LDKChannelTransactionParameters transaction_parameters_arg_conv;
+       transaction_parameters_arg_conv.inner = untag_ptr(transaction_parameters_arg);
+       transaction_parameters_arg_conv.is_owned = ptr_is_owned(transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(transaction_parameters_arg_conv);
+       transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&transaction_parameters_arg_conv);
+       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_new(value_satoshis_arg, keys_id_arg_ref, transaction_parameters_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
-       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+static inline uint64_t ChannelDerivationParameters_clone_ptr(LDKChannelDerivationParameters *NONNULL_PTR arg) {
+       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeInfo_clone_ptr(int64_t arg) {
-       LDKNodeInfo arg_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_clone_ptr(int64_t arg) {
+       LDKChannelDerivationParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelDerivationParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeInfo_clone(int64_t orig) {
-       LDKNodeInfo orig_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_clone(int64_t orig) {
+       LDKChannelDerivationParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
+       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_NodeInfo_eq(int64_t a, int64_t b) {
-       LDKNodeInfo a_conv;
+jboolean  CS_LDK_ChannelDerivationParameters_eq(int64_t a, int64_t b) {
+       LDKChannelDerivationParameters a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeInfo b_conv;
+       LDKChannelDerivationParameters b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_NodeInfo_is_tor_only(int64_t this_arg) {
-       LDKNodeInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeInfo_is_tor_only(&this_arg_conv);
-       return ret_conv;
-}
-
-jstring  CS_LDK_NodeInfo_to_str(int64_t o) {
-       LDKNodeInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NodeInfo_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+       jboolean ret_conv = ChannelDerivationParameters_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_NodeInfo_write(int64_t obj) {
-       LDKNodeInfo obj_conv;
+int8_tArray  CS_LDK_ChannelDerivationParameters_write(int64_t obj) {
+       LDKChannelDerivationParameters obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ChannelDerivationParameters_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_NodeInfo_read(int8_tArray ser) {
+int64_t  CS_LDK_ChannelDerivationParameters_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
-       *ret_conv = NodeInfo_read(ser_ref);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = ChannelDerivationParameters_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_NetworkGraph_write(int64_t obj) {
-       LDKNetworkGraph obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
+void  CS_LDK_HTLCDescriptor_free(int64_t this_obj) {
+       LDKHTLCDescriptor this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       HTLCDescriptor_free(this_obj_conv);
+}
 
-int64_t  CS_LDK_NetworkGraph_read(int8_tArray ser, int64_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
-       if (arg_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_conv);
-       }
-       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
-       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_HTLCDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelDerivationParameters ret_var = HTLCDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jstring  CS_LDK_NetworkGraph_to_str(int64_t o) {
-       LDKNetworkGraph o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NetworkGraph_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+void  CS_LDK_HTLCDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelDerivationParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelDerivationParameters_clone(&val_conv);
+       HTLCDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_HTLCDescriptor_get_commitment_txid(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *HTLCDescriptor_get_commitment_txid(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_HTLCDescriptor_set_commitment_txid(int64_t this_ptr, int8_tArray val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       HTLCDescriptor_set_commitment_txid(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_get_per_commitment_number(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = HTLCDescriptor_get_per_commitment_number(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NetworkGraph_new(int32_t network, int64_t logger) {
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
+void  CS_LDK_HTLCDescriptor_set_per_commitment_number(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       HTLCDescriptor_set_per_commitment_number(&this_ptr_conv, val);
+}
+
+int8_tArray  CS_LDK_HTLCDescriptor_get_per_commitment_point(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, HTLCDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_HTLCDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       HTLCDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+}
+
+int32_t  CS_LDK_HTLCDescriptor_get_feerate_per_kw(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = HTLCDescriptor_get_feerate_per_kw(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_HTLCDescriptor_set_feerate_per_kw(int64_t this_ptr, int32_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       HTLCDescriptor_set_feerate_per_kw(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_get_htlc(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKHTLCOutputInCommitment ret_var = HTLCDescriptor_get_htlc(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_read_only(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
+void  CS_LDK_HTLCDescriptor_set_htlc(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKHTLCOutputInCommitment val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = HTLCOutputInCommitment_clone(&val_conv);
+       HTLCDescriptor_set_htlc(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_get_preimage(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = HTLCDescriptor_get_preimage(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_HTLCDescriptor_set_preimage(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       HTLCDescriptor_set_preimage(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_HTLCDescriptor_get_counterparty_sig(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
+       memcpy(ret_arr->elems, HTLCDescriptor_get_counterparty_sig(&this_ptr_conv).compact_form, 64);
+       return ret_arr;
+}
+
+void  CS_LDK_HTLCDescriptor_set_counterparty_sig(int64_t this_ptr, int8_tArray val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKECDSASignature val_ref;
+       CHECK(val->arr_len == 64);
+       memcpy(val_ref.compact_form, val->elems, 64); FREE(val);
+       HTLCDescriptor_set_counterparty_sig(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_new(int64_t channel_derivation_parameters_arg, int8_tArray commitment_txid_arg, int64_t per_commitment_number_arg, int8_tArray per_commitment_point_arg, int32_t feerate_per_kw_arg, int64_t htlc_arg, int64_t preimage_arg, int8_tArray counterparty_sig_arg) {
+       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
+       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
+       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
+       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
+       LDKThirtyTwoBytes commitment_txid_arg_ref;
+       CHECK(commitment_txid_arg->arr_len == 32);
+       memcpy(commitment_txid_arg_ref.data, commitment_txid_arg->elems, 32); FREE(commitment_txid_arg);
+       LDKPublicKey per_commitment_point_arg_ref;
+       CHECK(per_commitment_point_arg->arr_len == 33);
+       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
+       LDKHTLCOutputInCommitment htlc_arg_conv;
+       htlc_arg_conv.inner = untag_ptr(htlc_arg);
+       htlc_arg_conv.is_owned = ptr_is_owned(htlc_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_arg_conv);
+       htlc_arg_conv = HTLCOutputInCommitment_clone(&htlc_arg_conv);
+       void* preimage_arg_ptr = untag_ptr(preimage_arg);
+       CHECK_ACCESS(preimage_arg_ptr);
+       LDKCOption_ThirtyTwoBytesZ preimage_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(preimage_arg_ptr);
+       preimage_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(preimage_arg));
+       LDKECDSASignature counterparty_sig_arg_ref;
+       CHECK(counterparty_sig_arg->arr_len == 64);
+       memcpy(counterparty_sig_arg_ref.compact_form, counterparty_sig_arg->elems, 64); FREE(counterparty_sig_arg);
+       LDKHTLCDescriptor ret_var = HTLCDescriptor_new(channel_derivation_parameters_arg_conv, commitment_txid_arg_ref, per_commitment_number_arg, per_commitment_point_arg_ref, feerate_per_kw_arg, htlc_arg_conv, preimage_arg_conv, counterparty_sig_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_get_last_rapid_gossip_sync_timestamp(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t HTLCDescriptor_clone_ptr(LDKHTLCDescriptor *NONNULL_PTR arg) {
+       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_HTLCDescriptor_clone_ptr(int64_t arg) {
+       LDKHTLCDescriptor arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = HTLCDescriptor_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_NetworkGraph_set_last_rapid_gossip_sync_timestamp(int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
+int64_t  CS_LDK_HTLCDescriptor_clone(int64_t orig) {
+       LDKHTLCDescriptor orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_node_from_announcement(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_HTLCDescriptor_eq(int64_t a, int64_t b) {
+       LDKHTLCDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKHTLCDescriptor b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = HTLCDescriptor_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_node_from_unsigned_announcement(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_HTLCDescriptor_write(int64_t obj) {
+       LDKHTLCDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = HTLCDescriptor_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+int64_t  CS_LDK_HTLCDescriptor_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = HTLCDescriptor_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement_no_lookup(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_outpoint(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+       LDKOutPoint ret_var = HTLCDescriptor_outpoint(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_from_unsigned_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_previous_utxo(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKUnsignedChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
-       return tag_ptr(ret_conv, true);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = HTLCDescriptor_previous_utxo(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-int64_t  CS_LDK_NetworkGraph_add_channel_from_partial_announcement(int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_unsigned_tx_input(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = ChannelFeatures_clone(&features_conv);
-       LDKPublicKey node_id_1_ref;
-       CHECK(node_id_1->arr_len == 33);
-       memcpy(node_id_1_ref.compressed_form, node_id_1->elems, 33); FREE(node_id_1);
-       LDKPublicKey node_id_2_ref;
-       CHECK(node_id_2->arr_len == 33);
-       memcpy(node_id_2_ref.compressed_form, node_id_2->elems, 33); FREE(node_id_2);
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
-       return tag_ptr(ret_conv, true);
+       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
+       *ret_ref = HTLCDescriptor_unsigned_tx_input(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_NetworkGraph_channel_failed_permanent(int64_t this_arg, int64_t short_channel_id) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_tx_output(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = HTLCDescriptor_tx_output(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_NetworkGraph_node_failed_permanent(int64_t this_arg, int8_tArray node_id) {
-       LDKNetworkGraph this_arg_conv;
+int8_tArray  CS_LDK_HTLCDescriptor_witness_script(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
+       LDKCVec_u8Z ret_var = HTLCDescriptor_witness_script(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+int8_tArray  CS_LDK_HTLCDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature, int8_tArray witness_script) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
+       LDKECDSASignature signature_ref;
+       CHECK(signature->arr_len == 64);
+       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
+       LDKu8slice witness_script_ref;
+       witness_script_ref.datalen = witness_script->arr_len;
+       witness_script_ref.data = witness_script->elems;
+       LDKWitness ret_var = HTLCDescriptor_tx_input_witness(&this_arg_conv, signature_ref, witness_script_ref);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       Witness_free(ret_var);
+       FREE(witness_script);
+       return ret_arr;
 }
 
-void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking_with_time(int64_t this_arg, int64_t current_time_unix) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
+       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = HTLCDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ChannelSigner_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ChannelSigner_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_unsigned(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_NetworkGraph_verify_channel_update(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_verify_channel_update(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_ReadOnlyNetworkGraph_channel(int64_t this_arg, int64_t short_channel_id) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_channels(int64_t this_arg) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ReadOnlyNetworkGraph_node(int64_t this_arg, int64_t node_id) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_nodes(int64_t this_arg) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               LDKNodeId ret_conv_8_var = ret_var.data[i];
-               int64_t ret_conv_8_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
-               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
-               ret_arr_ptr[i] = ret_conv_8_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ReadOnlyNetworkGraph_get_addresses(int64_t this_arg, int8_tArray pubkey) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPublicKey pubkey_ref;
-       CHECK(pubkey->arr_len == 33);
-       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
-       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
-       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_DefaultRouter_free(int64_t this_obj) {
-       LDKDefaultRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultRouter_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_DefaultRouter_new(int64_t network_graph, int64_t logger, int64_t entropy_source, int64_t scorer, int64_t score_params) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
-       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLockableScore_JCalls_cloned(&scorer_conv);
-       }
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
-       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, entropy_source_conv, scorer_conv, score_params_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_Recipient_clone(int64_t orig) {
+       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
+       int32_t ret_conv = LDKRecipient_to_cs(Recipient_clone(orig_conv));
+       return ret_conv;
 }
 
-int64_t  CS_LDK_DefaultRouter_as_Router(int64_t this_arg) {
-       LDKDefaultRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
-       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_Recipient_node() {
+       int32_t ret_conv = LDKRecipient_to_cs(Recipient_node());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_DefaultRouter_as_MessageRouter(int64_t this_arg) {
-       LDKDefaultRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
-       *ret_ret = DefaultRouter_as_MessageRouter(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_Recipient_phantom_node() {
+       int32_t ret_conv = LDKRecipient_to_cs(Recipient_phantom_node());
+       return ret_conv;
 }
 
-void  CS_LDK_Router_free(int64_t this_ptr) {
+void  CS_LDK_EntropySource_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
+       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       Router_free(this_ptr_conv);
-}
-
-void  CS_LDK_ScorerAccountingForInFlightHtlcs_free(int64_t this_obj) {
-       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_new(int64_t scorer, int64_t inflight_htlcs) {
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKScoreLookUp scorer_conv = *(LDKScoreLookUp*)(scorer_ptr);
-       if (scorer_conv.free == LDKScoreLookUp_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScoreLookUp_JCalls_cloned(&scorer_conv);
-       }
-       LDKInFlightHtlcs inflight_htlcs_conv;
-       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
-       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
-       inflight_htlcs_conv.is_owned = false;
-       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(int64_t this_arg) {
-       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-void  CS_LDK_InFlightHtlcs_free(int64_t this_obj) {
-       LDKInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InFlightHtlcs_free(this_obj_conv);
-}
-
-static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_InFlightHtlcs_clone_ptr(int64_t arg) {
-       LDKInFlightHtlcs arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_InFlightHtlcs_clone(int64_t orig) {
-       LDKInFlightHtlcs orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InFlightHtlcs_new() {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_InFlightHtlcs_process_path(int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv.is_owned = false;
-       LDKPublicKey payer_node_id_ref;
-       CHECK(payer_node_id->arr_len == 33);
-       memcpy(payer_node_id_ref.compressed_form, payer_node_id->elems, 33); FREE(payer_node_id);
-       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
+       EntropySource_free(this_ptr_conv);
 }
 
-void  CS_LDK_InFlightHtlcs_add_inflight_htlc(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
+void  CS_LDK_NodeSigner_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeSigner_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_InFlightHtlcs_used_liquidity_msat(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_OutputSpender_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOutputSpender this_ptr_conv = *(LDKOutputSpender*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OutputSpender_free(this_ptr_conv);
 }
 
-int8_tArray  CS_LDK_InFlightHtlcs_write(int64_t obj) {
-       LDKInFlightHtlcs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_SignerProvider_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignerProvider_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_InFlightHtlcs_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
-       *ret_conv = InFlightHtlcs_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ChangeDestinationSource_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKChangeDestinationSource this_ptr_conv = *(LDKChangeDestinationSource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ChangeDestinationSource_free(this_ptr_conv);
 }
 
-void  CS_LDK_RouteHop_free(int64_t this_obj) {
-       LDKRouteHop this_obj_conv;
+void  CS_LDK_InMemorySigner_free(int64_t this_obj) {
+       LDKInMemorySigner this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHop_free(this_obj_conv);
+       InMemorySigner_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_RouteHop_get_pubkey(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_funding_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, RouteHop_get_pubkey(&this_ptr_conv).compressed_form, 33);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_funding_key(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_pubkey(int64_t this_ptr, int8_tArray val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_funding_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_node_features(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_revocation_base_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_revocation_base_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_node_features(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_revocation_base_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeFeatures_clone(&val_conv);
-       RouteHop_set_node_features(&this_ptr_conv, val_conv);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_short_channel_id(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_payment_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_payment_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_payment_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_short_channel_id(&this_ptr_conv, val);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_channel_features(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_delayed_payment_base_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_channel_features(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_delayed_payment_base_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_fee_msat(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_htlc_base_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_htlc_base_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_fee_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_htlc_base_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_fee_msat(&this_ptr_conv, val);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
 }
 
-int32_t  CS_LDK_RouteHop_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_commitment_seed(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_commitment_seed(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_commitment_seed(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
 }
 
-jboolean  CS_LDK_RouteHop_get_maybe_announced_channel(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       jboolean ret_conv = RouteHop_get_maybe_announced_channel(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_RouteHop_set_maybe_announced_channel(int64_t this_ptr, jboolean val) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteHop_set_maybe_announced_channel(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_RouteHop_new(int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg, jboolean maybe_announced_channel_arg) {
-       LDKPublicKey pubkey_arg_ref;
-       CHECK(pubkey_arg->arr_len == 33);
-       memcpy(pubkey_arg_ref.compressed_form, pubkey_arg->elems, 33); FREE(pubkey_arg);
-       LDKNodeFeatures node_features_arg_conv;
-       node_features_arg_conv.inner = untag_ptr(node_features_arg);
-       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
-       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
-       LDKChannelFeatures channel_features_arg_conv;
-       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
-       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
-       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
-       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
-       LDKRouteHop ret_var = RouteHop_clone(arg);
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteHop_clone_ptr(int64_t arg) {
-       LDKRouteHop arg_conv;
+int64_t  CS_LDK_InMemorySigner_clone_ptr(int64_t arg) {
+       LDKInMemorySigner arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteHop_clone(int64_t orig) {
-       LDKRouteHop orig_conv;
+int64_t  CS_LDK_InMemorySigner_clone(int64_t orig) {
+       LDKInMemorySigner orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
+       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHop_hash(int64_t o) {
-       LDKRouteHop o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_RouteHop_eq(int64_t a, int64_t b) {
-       LDKRouteHop a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRouteHop b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_RouteHop_write(int64_t obj) {
-       LDKRouteHop obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_RouteHop_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
-       *ret_conv = RouteHop_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_BlindedTail_free(int64_t this_obj) {
-       LDKBlindedTail this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedTail_free(this_obj_conv);
-}
-
-int64_tArray  CS_LDK_BlindedTail_get_hops(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t m = 0; m < ret_var.datalen; m++) {
-               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
-               int64_t ret_conv_12_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
-               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
-               ret_arr_ptr[m] = ret_conv_12_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-void  CS_LDK_BlindedTail_set_hops(int64_t this_ptr, int64_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               LDKBlindedHop val_conv_12_conv;
-               val_conv_12_conv.inner = untag_ptr(val_conv_12);
-               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
-               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
-               val_constr.data[m] = val_conv_12_conv;
-       }
-       FREE(val);
-       BlindedTail_set_hops(&this_ptr_conv, val_constr);
-}
-
-int8_tArray  CS_LDK_BlindedTail_get_blinding_point(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_BlindedTail_set_blinding_point(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_InMemorySigner_new(int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
+       LDKSecretKey funding_key_ref;
+       CHECK(funding_key->arr_len == 32);
+       memcpy(funding_key_ref.bytes, funding_key->elems, 32); FREE(funding_key);
+       LDKSecretKey revocation_base_key_ref;
+       CHECK(revocation_base_key->arr_len == 32);
+       memcpy(revocation_base_key_ref.bytes, revocation_base_key->elems, 32); FREE(revocation_base_key);
+       LDKSecretKey payment_key_ref;
+       CHECK(payment_key->arr_len == 32);
+       memcpy(payment_key_ref.bytes, payment_key->elems, 32); FREE(payment_key);
+       LDKSecretKey delayed_payment_base_key_ref;
+       CHECK(delayed_payment_base_key->arr_len == 32);
+       memcpy(delayed_payment_base_key_ref.bytes, delayed_payment_base_key->elems, 32); FREE(delayed_payment_base_key);
+       LDKSecretKey htlc_base_key_ref;
+       CHECK(htlc_base_key->arr_len == 32);
+       memcpy(htlc_base_key_ref.bytes, htlc_base_key->elems, 32); FREE(htlc_base_key);
+       LDKThirtyTwoBytes commitment_seed_ref;
+       CHECK(commitment_seed->arr_len == 32);
+       memcpy(commitment_seed_ref.data, commitment_seed->elems, 32); FREE(commitment_seed);
+       LDKThirtyTwoBytes channel_keys_id_ref;
+       CHECK(channel_keys_id->arr_len == 32);
+       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
+       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
+       CHECK(rand_bytes_unique_start->arr_len == 32);
+       memcpy(rand_bytes_unique_start_ref.data, rand_bytes_unique_start->elems, 32); FREE(rand_bytes_unique_start);
+       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_BlindedTail_get_excess_final_cltv_expiry_delta(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_counterparty_pubkeys(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedTail_set_excess_final_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
+int64_t  CS_LDK_InMemorySigner_counterparty_selected_contest_delay(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedTail_get_final_value_msat(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_holder_selected_contest_delay(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedTail_set_final_value_msat(int64_t this_ptr, int64_t val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+int64_t  CS_LDK_InMemorySigner_is_outbound(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = InMemorySigner_is_outbound(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedTail_new(int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
-       LDKCVec_BlindedHopZ hops_arg_constr;
-       hops_arg_constr.datalen = hops_arg->arr_len;
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = hops_arg->elems;
-       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
-               int64_t hops_arg_conv_12 = hops_arg_vals[m];
-               LDKBlindedHop hops_arg_conv_12_conv;
-               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
-               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
-               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
-               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
-       }
-       FREE(hops_arg);
-       LDKPublicKey blinding_point_arg_ref;
-       CHECK(blinding_point_arg->arr_len == 33);
-       memcpy(blinding_point_arg_ref.compressed_form, blinding_point_arg->elems, 33); FREE(blinding_point_arg);
-       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
+int64_t  CS_LDK_InMemorySigner_funding_outpoint(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
-       LDKBlindedTail ret_var = BlindedTail_clone(arg);
+int64_t  CS_LDK_InMemorySigner_get_channel_parameters(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedTail_clone_ptr(int64_t arg) {
-       LDKBlindedTail arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_BlindedTail_clone(int64_t orig) {
-       LDKBlindedTail orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
+int64_t  CS_LDK_InMemorySigner_channel_type_features(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedTail_hash(int64_t o) {
-       LDKBlindedTail o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_sign_counterparty_payment_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = spend_tx->arr_len;
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
+       spend_tx_ref.data_is_owned = true;
+       LDKStaticPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
+       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_BlindedTail_eq(int64_t a, int64_t b) {
-       LDKBlindedTail a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedTail b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_sign_dynamic_p2wsh_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = spend_tx->arr_len;
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
+       spend_tx_ref.data_is_owned = true;
+       LDKDelayedPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
+       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_BlindedTail_write(int64_t obj) {
-       LDKBlindedTail obj_conv;
+int64_t  CS_LDK_InMemorySigner_as_EntropySource(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_InMemorySigner_as_ChannelSigner(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
+       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_InMemorySigner_as_EcdsaChannelSigner(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_InMemorySigner_write(int64_t obj) {
+       LDKInMemorySigner obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_BlindedTail_read(int8_tArray ser) {
+int64_t  CS_LDK_InMemorySigner_read(int8_tArray ser, int64_t arg) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
-       *ret_conv = BlindedTail_read(ser_ref);
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
+       if (arg_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_Path_free(int64_t this_obj) {
-       LDKPath this_obj_conv;
+void  CS_LDK_KeysManager_free(int64_t this_obj) {
+       LDKKeysManager this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Path_free(this_obj_conv);
+       KeysManager_free(this_obj_conv);
 }
 
-int64_tArray  CS_LDK_Path_get_hops(int64_t this_ptr) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ ret_var = Path_get_hops(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t k = 0; k < ret_var.datalen; k++) {
-               LDKRouteHop ret_conv_10_var = ret_var.data[k];
-               int64_t ret_conv_10_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
-               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
-               ret_arr_ptr[k] = ret_conv_10_ref;
-       }
-       
-       FREE(ret_var.data);
+int64_t  CS_LDK_KeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
+       uint8_t seed_arr[32];
+       CHECK(seed->arr_len == 32);
+       memcpy(seed_arr, seed->elems, 32); FREE(seed);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int8_tArray  CS_LDK_KeysManager_get_node_secret_key(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, KeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
        return ret_arr;
 }
 
-void  CS_LDK_Path_set_hops(int64_t this_ptr, int64_tArray val) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t k = 0; k < val_constr.datalen; k++) {
-               int64_t val_conv_10 = val_vals[k];
-               LDKRouteHop val_conv_10_conv;
-               val_conv_10_conv.inner = untag_ptr(val_conv_10);
-               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
-               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
-               val_constr.data[k] = val_conv_10_conv;
-       }
-       FREE(val);
-       Path_set_hops(&this_ptr_conv, val_constr);
-}
-
-int64_t  CS_LDK_Path_get_blinded_tail(int64_t this_ptr) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+int64_t  CS_LDK_KeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       uint8_t params_arr[32];
+       CHECK(params->arr_len == 32);
+       memcpy(params_arr, params->elems, 32); FREE(params);
+       uint8_t (*params_ref)[32] = &params_arr;
+       LDKInMemorySigner ret_var = KeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Path_set_blinded_tail(int64_t this_ptr, int64_t val) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedTail val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedTail_clone(&val_conv);
-       Path_set_blinded_tail(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_Path_new(int64_tArray hops_arg, int64_t blinded_tail_arg) {
-       LDKCVec_RouteHopZ hops_arg_constr;
-       hops_arg_constr.datalen = hops_arg->arr_len;
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+int64_t  CS_LDK_KeysManager_sign_spendable_outputs_psbt(int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = descriptors->arr_len;
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
        else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = hops_arg->elems;
-       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
-               int64_t hops_arg_conv_10 = hops_arg_vals[k];
-               LDKRouteHop hops_arg_conv_10_conv;
-               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
-               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
-               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
-               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = descriptors->elems;
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
        }
-       FREE(hops_arg);
-       LDKBlindedTail blinded_tail_arg_conv;
-       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
-       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
-       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
-       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       FREE(descriptors);
+       LDKCVec_u8Z psbt_ref;
+       psbt_ref.datalen = psbt->arr_len;
+       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(psbt_ref.data, psbt->elems, psbt_ref.datalen); FREE(psbt);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
-       LDKPath ret_var = Path_clone(arg);
+int64_t  CS_LDK_KeysManager_as_EntropySource(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_KeysManager_as_NodeSigner(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_KeysManager_as_OutputSpender(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
+       *ret_ret = KeysManager_as_OutputSpender(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_KeysManager_as_SignerProvider(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_PhantomKeysManager_free(int64_t this_obj) {
+       LDKPhantomKeysManager this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PhantomKeysManager_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_EntropySource(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_NodeSigner(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_OutputSpender(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
+       *ret_ret = PhantomKeysManager_as_OutputSpender(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_SignerProvider(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
+       uint8_t seed_arr[32];
+       CHECK(seed->arr_len == 32);
+       memcpy(seed_arr, seed->elems, 32); FREE(seed);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       uint8_t cross_node_seed_arr[32];
+       CHECK(cross_node_seed->arr_len == 32);
+       memcpy(cross_node_seed_arr, cross_node_seed->elems, 32); FREE(cross_node_seed);
+       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
+       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Path_clone_ptr(int64_t arg) {
-       LDKPath arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Path_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Path_clone(int64_t orig) {
-       LDKPath orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKPath ret_var = Path_clone(&orig_conv);
+int64_t  CS_LDK_PhantomKeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       uint8_t params_arr[32];
+       CHECK(params->arr_len == 32);
+       memcpy(params_arr, params->elems, 32); FREE(params);
+       uint8_t (*params_ref)[32] = &params_arr;
+       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Path_hash(int64_t o) {
-       LDKPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Path_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Path_eq(int64_t a, int64_t b) {
-       LDKPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKPath b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Path_fee_msat(int64_t this_arg) {
-       LDKPath this_arg_conv;
+int8_tArray  CS_LDK_PhantomKeysManager_get_node_secret_key(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Path_final_value_msat(int64_t this_arg) {
-       LDKPath this_arg_conv;
+int8_tArray  CS_LDK_PhantomKeysManager_get_phantom_node_secret_key(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes, 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Path_final_cltv_expiry_delta(int64_t this_arg) {
-       LDKPath this_arg_conv;
+void  CS_LDK_RandomBytes_free(int64_t this_obj) {
+       LDKRandomBytes this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RandomBytes_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_RandomBytes_new(int8_tArray seed) {
+       LDKThirtyTwoBytes seed_ref;
+       CHECK(seed->arr_len == 32);
+       memcpy(seed_ref.data, seed->elems, 32); FREE(seed);
+       LDKRandomBytes ret_var = RandomBytes_new(seed_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_RandomBytes_as_EntropySource(int64_t this_arg) {
+       LDKRandomBytes this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = RandomBytes_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+static inline uint64_t EcdsaChannelSigner_clone_ptr(LDKEcdsaChannelSigner *NONNULL_PTR arg) {
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = EcdsaChannelSigner_clone(arg);
+       return tag_ptr(ret_ret, true);
+}
+int64_t  CS_LDK_EcdsaChannelSigner_clone_ptr(int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKEcdsaChannelSigner* arg_conv = (LDKEcdsaChannelSigner*)arg_ptr;
+       int64_t ret_conv = EcdsaChannelSigner_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_EcdsaChannelSigner_clone(int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKEcdsaChannelSigner* orig_conv = (LDKEcdsaChannelSigner*)orig_ptr;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = EcdsaChannelSigner_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_EcdsaChannelSigner_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EcdsaChannelSigner_free(this_ptr_conv);
+}
+
+void  CS_LDK_AsyncPaymentsMessageHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKAsyncPaymentsMessageHandler this_ptr_conv = *(LDKAsyncPaymentsMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       AsyncPaymentsMessageHandler_free(this_ptr_conv);
+}
+
+void  CS_LDK_AsyncPaymentsMessage_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKAsyncPaymentsMessage this_ptr_conv = *(LDKAsyncPaymentsMessage*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       AsyncPaymentsMessage_free(this_ptr_conv);
+}
+
+static inline uint64_t AsyncPaymentsMessage_clone_ptr(LDKAsyncPaymentsMessage *NONNULL_PTR arg) {
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_AsyncPaymentsMessage_clone_ptr(int64_t arg) {
+       LDKAsyncPaymentsMessage* arg_conv = (LDKAsyncPaymentsMessage*)untag_ptr(arg);
+       int64_t ret_conv = AsyncPaymentsMessage_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_Route_free(int64_t this_obj) {
-       LDKRoute this_obj_conv;
+int64_t  CS_LDK_AsyncPaymentsMessage_clone(int64_t orig) {
+       LDKAsyncPaymentsMessage* orig_conv = (LDKAsyncPaymentsMessage*)untag_ptr(orig);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_AsyncPaymentsMessage_held_htlc_available(int64_t a) {
+       LDKHeldHtlcAvailable a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = HeldHtlcAvailable_clone(&a_conv);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_held_htlc_available(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_AsyncPaymentsMessage_release_held_htlc(int64_t a) {
+       LDKReleaseHeldHtlc a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = ReleaseHeldHtlc_clone(&a_conv);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_release_held_htlc(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_HeldHtlcAvailable_free(int64_t this_obj) {
+       LDKHeldHtlcAvailable this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Route_free(this_obj_conv);
+       HeldHtlcAvailable_free(this_obj_conv);
 }
 
-int64_tArray  CS_LDK_Route_get_paths(int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
+int8_tArray  CS_LDK_HeldHtlcAvailable_get_payment_release_secret(int64_t this_ptr) {
+       LDKHeldHtlcAvailable this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ ret_var = Route_get_paths(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               LDKPath ret_conv_6_var = ret_var.data[g];
-               int64_t ret_conv_6_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
-               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
-               ret_arr_ptr[g] = ret_conv_6_ref;
-       }
-       
-       FREE(ret_var.data);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *HeldHtlcAvailable_get_payment_release_secret(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_Route_set_paths(int64_t this_ptr, int64_tArray val) {
-       LDKRoute this_ptr_conv;
+void  CS_LDK_HeldHtlcAvailable_set_payment_release_secret(int64_t this_ptr, int8_tArray val) {
+       LDKHeldHtlcAvailable this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               LDKPath val_conv_6_conv;
-               val_conv_6_conv.inner = untag_ptr(val_conv_6);
-               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
-               val_conv_6_conv = Path_clone(&val_conv_6_conv);
-               val_constr.data[g] = val_conv_6_conv;
-       }
-       FREE(val);
-       Route_set_paths(&this_ptr_conv, val_constr);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       HeldHtlcAvailable_set_payment_release_secret(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_Route_get_route_params(int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRouteParameters ret_var = Route_get_route_params(&this_ptr_conv);
+int64_t  CS_LDK_HeldHtlcAvailable_new(int8_tArray payment_release_secret_arg) {
+       LDKThirtyTwoBytes payment_release_secret_arg_ref;
+       CHECK(payment_release_secret_arg->arr_len == 32);
+       memcpy(payment_release_secret_arg_ref.data, payment_release_secret_arg->elems, 32); FREE(payment_release_secret_arg);
+       LDKHeldHtlcAvailable ret_var = HeldHtlcAvailable_new(payment_release_secret_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Route_set_route_params(int64_t this_ptr, int64_t val) {
-       LDKRoute this_ptr_conv;
+static inline uint64_t HeldHtlcAvailable_clone_ptr(LDKHeldHtlcAvailable *NONNULL_PTR arg) {
+       LDKHeldHtlcAvailable ret_var = HeldHtlcAvailable_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_HeldHtlcAvailable_clone_ptr(int64_t arg) {
+       LDKHeldHtlcAvailable arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = HeldHtlcAvailable_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_HeldHtlcAvailable_clone(int64_t orig) {
+       LDKHeldHtlcAvailable orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKHeldHtlcAvailable ret_var = HeldHtlcAvailable_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ReleaseHeldHtlc_free(int64_t this_obj) {
+       LDKReleaseHeldHtlc this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReleaseHeldHtlc_free(this_obj_conv);
+}
+
+int8_tArray  CS_LDK_ReleaseHeldHtlc_get_payment_release_secret(int64_t this_ptr) {
+       LDKReleaseHeldHtlc this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRouteParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RouteParameters_clone(&val_conv);
-       Route_set_route_params(&this_ptr_conv, val_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ReleaseHeldHtlc_get_payment_release_secret(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Route_new(int64_tArray paths_arg, int64_t route_params_arg) {
-       LDKCVec_PathZ paths_arg_constr;
-       paths_arg_constr.datalen = paths_arg->arr_len;
-       if (paths_arg_constr.datalen > 0)
-               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               paths_arg_constr.data = NULL;
-       int64_t* paths_arg_vals = paths_arg->elems;
-       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
-               int64_t paths_arg_conv_6 = paths_arg_vals[g];
-               LDKPath paths_arg_conv_6_conv;
-               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
-               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
-               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
-               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
-       }
-       FREE(paths_arg);
-       LDKRouteParameters route_params_arg_conv;
-       route_params_arg_conv.inner = untag_ptr(route_params_arg);
-       route_params_arg_conv.is_owned = ptr_is_owned(route_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_arg_conv);
-       route_params_arg_conv = RouteParameters_clone(&route_params_arg_conv);
-       LDKRoute ret_var = Route_new(paths_arg_constr, route_params_arg_conv);
+void  CS_LDK_ReleaseHeldHtlc_set_payment_release_secret(int64_t this_ptr, int8_tArray val) {
+       LDKReleaseHeldHtlc this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ReleaseHeldHtlc_set_payment_release_secret(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_ReleaseHeldHtlc_new(int8_tArray payment_release_secret_arg) {
+       LDKThirtyTwoBytes payment_release_secret_arg_ref;
+       CHECK(payment_release_secret_arg->arr_len == 32);
+       memcpy(payment_release_secret_arg_ref.data, payment_release_secret_arg->elems, 32); FREE(payment_release_secret_arg);
+       LDKReleaseHeldHtlc ret_var = ReleaseHeldHtlc_new(payment_release_secret_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
-       LDKRoute ret_var = Route_clone(arg);
+static inline uint64_t ReleaseHeldHtlc_clone_ptr(LDKReleaseHeldHtlc *NONNULL_PTR arg) {
+       LDKReleaseHeldHtlc ret_var = ReleaseHeldHtlc_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Route_clone_ptr(int64_t arg) {
-       LDKRoute arg_conv;
+int64_t  CS_LDK_ReleaseHeldHtlc_clone_ptr(int64_t arg) {
+       LDKReleaseHeldHtlc arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Route_clone_ptr(&arg_conv);
+       int64_t ret_conv = ReleaseHeldHtlc_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Route_clone(int64_t orig) {
-       LDKRoute orig_conv;
+int64_t  CS_LDK_ReleaseHeldHtlc_clone(int64_t orig) {
+       LDKReleaseHeldHtlc orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRoute ret_var = Route_clone(&orig_conv);
+       LDKReleaseHeldHtlc ret_var = ReleaseHeldHtlc_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Route_hash(int64_t o) {
-       LDKRoute o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Route_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ReleaseHeldHtlc_as_OnionMessageContents(int64_t this_arg) {
+       LDKReleaseHeldHtlc this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = ReleaseHeldHtlc_as_OnionMessageContents(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-jboolean  CS_LDK_Route_eq(int64_t a, int64_t b) {
-       LDKRoute a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoute b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Route_get_total_fees(int64_t this_arg) {
-       LDKRoute this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Route_get_total_amount(int64_t this_arg) {
-       LDKRoute this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
-       return ret_conv;
-}
-
-jstring  CS_LDK_Route_to_str(int64_t o) {
-       LDKRoute o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = Route_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_Route_write(int64_t obj) {
-       LDKRoute obj_conv;
+int8_tArray  CS_LDK_HeldHtlcAvailable_write(int64_t obj) {
+       LDKHeldHtlcAvailable obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Route_write(&obj_conv);
+       LDKCVec_u8Z ret_var = HeldHtlcAvailable_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Route_read(int8_tArray ser) {
+int64_t  CS_LDK_HeldHtlcAvailable_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
-       *ret_conv = Route_read(ser_ref);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = HeldHtlcAvailable_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteParameters_free(int64_t this_obj) {
-       LDKRouteParameters this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteParameters_free(this_obj_conv);
+int8_tArray  CS_LDK_ReleaseHeldHtlc_write(int64_t obj) {
+       LDKReleaseHeldHtlc obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ReleaseHeldHtlc_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_RouteParameters_get_payment_params(int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_ReleaseHeldHtlc_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = ReleaseHeldHtlc_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteParameters_set_payment_params(int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentParameters_clone(&val_conv);
-       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_AsyncPaymentsMessage_is_known_type(int64_t tlv_type) {
+       jboolean ret_conv = AsyncPaymentsMessage_is_known_type(tlv_type);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_RouteParameters_get_final_value_msat(int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_AsyncPaymentsMessage_as_OnionMessageContents(int64_t this_arg) {
+       LDKAsyncPaymentsMessage* this_arg_conv = (LDKAsyncPaymentsMessage*)untag_ptr(this_arg);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = AsyncPaymentsMessage_as_OnionMessageContents(this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_RouteParameters_set_final_value_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
+int8_tArray  CS_LDK_AsyncPaymentsMessage_write(int64_t obj) {
+       LDKAsyncPaymentsMessage* obj_conv = (LDKAsyncPaymentsMessage*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = AsyncPaymentsMessage_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_RouteParameters_get_max_total_routing_fee_msat(int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteParameters_get_max_total_routing_fee_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_AsyncPaymentsMessage_read(int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = AsyncPaymentsMessage_read(ser_ref, arg);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteParameters_set_max_total_routing_fee_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteParameters_set_max_total_routing_fee_msat(&this_ptr_conv, val_conv);
+void  CS_LDK_OnionMessenger_free(int64_t this_obj) {
+       LDKOnionMessenger this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessenger_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_RouteParameters_new(int64_t payment_params_arg, int64_t final_value_msat_arg, int64_t max_total_routing_fee_msat_arg) {
-       LDKPaymentParameters payment_params_arg_conv;
-       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
-       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
-       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
-       void* max_total_routing_fee_msat_arg_ptr = untag_ptr(max_total_routing_fee_msat_arg);
-       CHECK_ACCESS(max_total_routing_fee_msat_arg_ptr);
-       LDKCOption_u64Z max_total_routing_fee_msat_arg_conv = *(LDKCOption_u64Z*)(max_total_routing_fee_msat_arg_ptr);
-       max_total_routing_fee_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(max_total_routing_fee_msat_arg));
-       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg, max_total_routing_fee_msat_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_Responder_free(int64_t this_obj) {
+       LDKResponder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Responder_free(this_obj_conv);
 }
 
-static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
-       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+static inline uint64_t Responder_clone_ptr(LDKResponder *NONNULL_PTR arg) {
+       LDKResponder ret_var = Responder_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteParameters_clone_ptr(int64_t arg) {
-       LDKRouteParameters arg_conv;
+int64_t  CS_LDK_Responder_clone_ptr(int64_t arg) {
+       LDKResponder arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = Responder_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteParameters_clone(int64_t orig) {
-       LDKRouteParameters orig_conv;
+int64_t  CS_LDK_Responder_clone(int64_t orig) {
+       LDKResponder orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
+       LDKResponder ret_var = Responder_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteParameters_hash(int64_t o) {
-       LDKRouteParameters o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_RouteParameters_eq(int64_t a, int64_t b) {
-       LDKRouteParameters a_conv;
+jboolean  CS_LDK_Responder_eq(int64_t a, int64_t b) {
+       LDKResponder a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteParameters b_conv;
+       LDKResponder b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Responder_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteParameters_from_payment_params_and_value(int64_t payment_params, int64_t final_value_msat) {
-       LDKPaymentParameters payment_params_conv;
-       payment_params_conv.inner = untag_ptr(payment_params);
-       payment_params_conv.is_owned = ptr_is_owned(payment_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_conv);
-       payment_params_conv = PaymentParameters_clone(&payment_params_conv);
-       LDKRouteParameters ret_var = RouteParameters_from_payment_params_and_value(payment_params_conv, final_value_msat);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_RouteParameters_write(int64_t obj) {
-       LDKRouteParameters obj_conv;
+int8_tArray  CS_LDK_Responder_write(int64_t obj) {
+       LDKResponder obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Responder_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RouteParameters_read(int8_tArray ser) {
+int64_t  CS_LDK_Responder_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
-       *ret_conv = RouteParameters_read(ser_ref);
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = Responder_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_PaymentParameters_free(int64_t this_obj) {
-       LDKPaymentParameters this_obj_conv;
+int64_t  CS_LDK_Responder_respond(int64_t this_arg) {
+       LDKResponder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = Responder_clone(&this_arg_conv);
+       LDKResponseInstruction ret_var = Responder_respond(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Responder_respond_with_reply_path(int64_t this_arg, int64_t context) {
+       LDKResponder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = Responder_clone(&this_arg_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       LDKResponseInstruction ret_var = Responder_respond_with_reply_path(this_arg_conv, context_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ResponseInstruction_free(int64_t this_obj) {
+       LDKResponseInstruction this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentParameters_free(this_obj_conv);
+       ResponseInstruction_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_PaymentParameters_get_payee(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
+static inline uint64_t ResponseInstruction_clone_ptr(LDKResponseInstruction *NONNULL_PTR arg) {
+       LDKResponseInstruction ret_var = ResponseInstruction_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ResponseInstruction_clone_ptr(int64_t arg) {
+       LDKResponseInstruction arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ResponseInstruction_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ResponseInstruction_clone(int64_t orig) {
+       LDKResponseInstruction orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKResponseInstruction ret_var = ResponseInstruction_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_MessageSendInstructions_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageSendInstructions this_ptr_conv = *(LDKMessageSendInstructions*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageSendInstructions_free(this_ptr_conv);
+}
+
+static inline uint64_t MessageSendInstructions_clone_ptr(LDKMessageSendInstructions *NONNULL_PTR arg) {
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_MessageSendInstructions_clone_ptr(int64_t arg) {
+       LDKMessageSendInstructions* arg_conv = (LDKMessageSendInstructions*)untag_ptr(arg);
+       int64_t ret_conv = MessageSendInstructions_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_PaymentParameters_set_payee(int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
-       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
-       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_MessageSendInstructions_clone(int64_t orig) {
+       LDKMessageSendInstructions* orig_conv = (LDKMessageSendInstructions*)untag_ptr(orig);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_get_expiry_time(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
+int64_t  CS_LDK_MessageSendInstructions_with_specified_reply_path(int64_t destination, int64_t reply_path) {
+       void* destination_ptr = untag_ptr(destination);
+       CHECK_ACCESS(destination_ptr);
+       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
+       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
+       LDKBlindedMessagePath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedMessagePath_clone(&reply_path_conv);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_with_specified_reply_path(destination_conv, reply_path_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_expiry_time(int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_MessageSendInstructions_with_reply_path(int64_t destination, int64_t context) {
+       void* destination_ptr = untag_ptr(destination);
+       CHECK_ACCESS(destination_ptr);
+       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
+       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_with_reply_path(destination_conv, context_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_PaymentParameters_get_max_total_cltv_expiry_delta(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_MessageSendInstructions_without_reply_path(int64_t destination) {
+       void* destination_ptr = untag_ptr(destination);
+       CHECK_ACCESS(destination_ptr);
+       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
+       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_without_reply_path(destination_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_max_total_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
+int64_t  CS_LDK_MessageSendInstructions_for_reply(int64_t instructions) {
+       LDKResponseInstruction instructions_conv;
+       instructions_conv.inner = untag_ptr(instructions);
+       instructions_conv.is_owned = ptr_is_owned(instructions);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(instructions_conv);
+       instructions_conv = ResponseInstruction_clone(&instructions_conv);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_for_reply(instructions_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_t  CS_LDK_PaymentParameters_get_max_path_count(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
-       return ret_conv;
+void  CS_LDK_MessageRouter_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageRouter_free(this_ptr_conv);
 }
 
-void  CS_LDK_PaymentParameters_set_max_path_count(int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
+void  CS_LDK_DefaultMessageRouter_free(int64_t this_obj) {
+       LDKDefaultMessageRouter this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DefaultMessageRouter_free(this_obj_conv);
 }
 
-int8_t  CS_LDK_PaymentParameters_get_max_channel_saturation_power_of_half(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_DefaultMessageRouter_new(int64_t network_graph, int64_t entropy_source) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new(&network_graph_conv, entropy_source_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_max_channel_saturation_power_of_half(int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
+int64_t  CS_LDK_DefaultMessageRouter_as_MessageRouter(int64_t this_arg) {
+       LDKDefaultMessageRouter this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
+       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_channels(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+void  CS_LDK_OnionMessagePath_free(int64_t this_obj) {
+       LDKOnionMessagePath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessagePath_free(this_obj_conv);
+}
+
+ptrArray  CS_LDK_OnionMessagePath_get_intermediate_nodes(int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
+       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&this_ptr_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(33, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].compressed_form, 33);
+               ret_arr_ptr[i] = ret_conv_8_arr;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-void  CS_LDK_PaymentParameters_set_previously_failed_channels(int64_t this_ptr, int64_tArray val) {
-       LDKPaymentParameters this_ptr_conv;
+void  CS_LDK_OnionMessagePath_set_intermediate_nodes(int64_t this_ptr, ptrArray val) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
+       LDKCVec_PublicKeyZ val_constr;
        val_constr.datalen = val->arr_len;
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
        else
                val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
+       int8_tArray* val_vals = (void*) val->elems;
+       for (size_t i = 0; i < val_constr.datalen; i++) {
+               int8_tArray val_conv_8 = val_vals[i];
+               LDKPublicKey val_conv_8_ref;
+               CHECK(val_conv_8->arr_len == 33);
+               memcpy(val_conv_8_ref.compressed_form, val_conv_8->elems, 33); FREE(val_conv_8);
+               val_constr.data[i] = val_conv_8_ref;
        }
        FREE(val);
-       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
+       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
 }
 
-int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_blinded_path_idxs(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+int64_t  CS_LDK_OnionMessagePath_get_destination(int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_blinded_path_idxs(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_previously_failed_blinded_path_idxs(int64_t this_ptr, int64_tArray val) {
-       LDKPaymentParameters this_ptr_conv;
+void  CS_LDK_OnionMessagePath_set_destination(int64_t this_ptr, int64_t val) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       FREE(val);
-       PaymentParameters_set_previously_failed_blinded_path_idxs(&this_ptr_conv, val_constr);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
+       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
+       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_PaymentParameters_new(int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg, int64_tArray previously_failed_blinded_path_idxs_arg) {
-       void* payee_arg_ptr = untag_ptr(payee_arg);
-       CHECK_ACCESS(payee_arg_ptr);
-       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
-       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
-       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
-       CHECK_ACCESS(expiry_time_arg_ptr);
-       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
-       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
-       LDKCVec_u64Z previously_failed_channels_arg_constr;
-       previously_failed_channels_arg_constr.datalen = previously_failed_channels_arg->arr_len;
-       if (previously_failed_channels_arg_constr.datalen > 0)
-               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               previously_failed_channels_arg_constr.data = NULL;
-       int64_t* previously_failed_channels_arg_vals = previously_failed_channels_arg->elems;
-       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
-               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
-               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
-       }
-       FREE(previously_failed_channels_arg);
-       LDKCVec_u64Z previously_failed_blinded_path_idxs_arg_constr;
-       previously_failed_blinded_path_idxs_arg_constr.datalen = previously_failed_blinded_path_idxs_arg->arr_len;
-       if (previously_failed_blinded_path_idxs_arg_constr.datalen > 0)
-               previously_failed_blinded_path_idxs_arg_constr.data = MALLOC(previously_failed_blinded_path_idxs_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               previously_failed_blinded_path_idxs_arg_constr.data = NULL;
-       int64_t* previously_failed_blinded_path_idxs_arg_vals = previously_failed_blinded_path_idxs_arg->elems;
-       for (size_t g = 0; g < previously_failed_blinded_path_idxs_arg_constr.datalen; g++) {
-               int64_t previously_failed_blinded_path_idxs_arg_conv_6 = previously_failed_blinded_path_idxs_arg_vals[g];
-               previously_failed_blinded_path_idxs_arg_constr.data[g] = previously_failed_blinded_path_idxs_arg_conv_6;
+int64_t  CS_LDK_OnionMessagePath_get_first_node_addresses(int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = OnionMessagePath_get_first_node_addresses(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_OnionMessagePath_set_first_node_addresses(int64_t this_ptr, int64_t val) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_SocketAddressZZ val_conv = *(LDKCOption_CVec_SocketAddressZZ*)(val_ptr);
+       val_conv = COption_CVec_SocketAddressZZ_clone((LDKCOption_CVec_SocketAddressZZ*)untag_ptr(val));
+       OnionMessagePath_set_first_node_addresses(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_OnionMessagePath_new(ptrArray intermediate_nodes_arg, int64_t destination_arg, int64_t first_node_addresses_arg) {
+       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
+       intermediate_nodes_arg_constr.datalen = intermediate_nodes_arg->arr_len;
+       if (intermediate_nodes_arg_constr.datalen > 0)
+               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               intermediate_nodes_arg_constr.data = NULL;
+       int8_tArray* intermediate_nodes_arg_vals = (void*) intermediate_nodes_arg->elems;
+       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
+               int8_tArray intermediate_nodes_arg_conv_8 = intermediate_nodes_arg_vals[i];
+               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
+               CHECK(intermediate_nodes_arg_conv_8->arr_len == 33);
+               memcpy(intermediate_nodes_arg_conv_8_ref.compressed_form, intermediate_nodes_arg_conv_8->elems, 33); FREE(intermediate_nodes_arg_conv_8);
+               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
        }
-       FREE(previously_failed_blinded_path_idxs_arg);
-       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr, previously_failed_blinded_path_idxs_arg_constr);
+       FREE(intermediate_nodes_arg);
+       void* destination_arg_ptr = untag_ptr(destination_arg);
+       CHECK_ACCESS(destination_arg_ptr);
+       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
+       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
+       void* first_node_addresses_arg_ptr = untag_ptr(first_node_addresses_arg);
+       CHECK_ACCESS(first_node_addresses_arg_ptr);
+       LDKCOption_CVec_SocketAddressZZ first_node_addresses_arg_conv = *(LDKCOption_CVec_SocketAddressZZ*)(first_node_addresses_arg_ptr);
+       first_node_addresses_arg_conv = COption_CVec_SocketAddressZZ_clone((LDKCOption_CVec_SocketAddressZZ*)untag_ptr(first_node_addresses_arg));
+       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv, first_node_addresses_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
-       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
+static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PaymentParameters_clone_ptr(int64_t arg) {
-       LDKPaymentParameters arg_conv;
+int64_t  CS_LDK_OnionMessagePath_clone_ptr(int64_t arg) {
+       LDKOnionMessagePath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentParameters_clone(int64_t orig) {
-       LDKPaymentParameters orig_conv;
+int64_t  CS_LDK_OnionMessagePath_clone(int64_t orig) {
+       LDKOnionMessagePath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_hash(int64_t o) {
-       LDKPaymentParameters o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_hash(&o_conv);
+int8_tArray  CS_LDK_OnionMessagePath_first_node(int64_t this_arg) {
+       LDKOnionMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, OnionMessagePath_first_node(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_Destination_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Destination_free(this_ptr_conv);
+}
+
+static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Destination_clone_ptr(int64_t arg) {
+       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
+       int64_t ret_conv = Destination_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_PaymentParameters_eq(int64_t a, int64_t b) {
-       LDKPaymentParameters a_conv;
+int64_t  CS_LDK_Destination_clone(int64_t orig) {
+       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Destination_node(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_node(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Destination_blinded_path(int64_t a) {
+       LDKBlindedMessagePath a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKPaymentParameters b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       a_conv = BlindedMessagePath_clone(&a_conv);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_blinded_path(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Destination_hash(int64_t o) {
+       LDKDestination* o_conv = (LDKDestination*)untag_ptr(o);
+       int64_t ret_conv = Destination_hash(o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_PaymentParameters_write(int64_t obj) {
-       LDKPaymentParameters obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_Destination_eq(int64_t a, int64_t b) {
+       LDKDestination* a_conv = (LDKDestination*)untag_ptr(a);
+       LDKDestination* b_conv = (LDKDestination*)untag_ptr(b);
+       jboolean ret_conv = Destination_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentParameters_read(int8_tArray ser, int32_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
-       *ret_conv = PaymentParameters_read(ser_ref, arg);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_Destination_resolve(int64_t this_arg, int64_t network_graph) {
+       LDKDestination* this_arg_conv = (LDKDestination*)untag_ptr(this_arg);
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       Destination_resolve(this_arg_conv, &network_graph_conv);
 }
 
-int64_t  CS_LDK_PaymentParameters_from_node_id(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK(payee_pubkey->arr_len == 33);
-       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
-       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+void  CS_LDK_SendSuccess_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSendSuccess this_ptr_conv = *(LDKSendSuccess*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SendSuccess_free(this_ptr_conv);
+}
+
+static inline uint64_t SendSuccess_clone_ptr(LDKSendSuccess *NONNULL_PTR arg) {
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_SendSuccess_clone_ptr(int64_t arg) {
+       LDKSendSuccess* arg_conv = (LDKSendSuccess*)untag_ptr(arg);
+       int64_t ret_conv = SendSuccess_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_PaymentParameters_for_keysend(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK(payee_pubkey->arr_len == 33);
-       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
-       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendSuccess_clone(int64_t orig) {
+       LDKSendSuccess* orig_conv = (LDKSendSuccess*)untag_ptr(orig);
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_from_bolt12_invoice(int64_t invoice) {
-       LDKBolt12Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendSuccess_buffered() {
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_buffered();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_blinded(int64_tArray blinded_route_hints) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ blinded_route_hints_constr;
-       blinded_route_hints_constr.datalen = blinded_route_hints->arr_len;
-       if (blinded_route_hints_constr.datalen > 0)
-               blinded_route_hints_constr.data = MALLOC(blinded_route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               blinded_route_hints_constr.data = NULL;
-       int64_t* blinded_route_hints_vals = blinded_route_hints->elems;
-       for (size_t l = 0; l < blinded_route_hints_constr.datalen; l++) {
-               int64_t blinded_route_hints_conv_37 = blinded_route_hints_vals[l];
-               void* blinded_route_hints_conv_37_ptr = untag_ptr(blinded_route_hints_conv_37);
-               CHECK_ACCESS(blinded_route_hints_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ blinded_route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(blinded_route_hints_conv_37_ptr);
-               blinded_route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(blinded_route_hints_conv_37));
-               blinded_route_hints_constr.data[l] = blinded_route_hints_conv_37_conv;
-       }
-       FREE(blinded_route_hints);
-       LDKPaymentParameters ret_var = PaymentParameters_blinded(blinded_route_hints_constr);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendSuccess_buffered_awaiting_connection(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_buffered_awaiting_connection(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_Payee_free(int64_t this_ptr) {
+int64_t  CS_LDK_SendSuccess_hash(int64_t o) {
+       LDKSendSuccess* o_conv = (LDKSendSuccess*)untag_ptr(o);
+       int64_t ret_conv = SendSuccess_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_SendSuccess_eq(int64_t a, int64_t b) {
+       LDKSendSuccess* a_conv = (LDKSendSuccess*)untag_ptr(a);
+       LDKSendSuccess* b_conv = (LDKSendSuccess*)untag_ptr(b);
+       jboolean ret_conv = SendSuccess_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_SendError_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
+       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       Payee_free(this_ptr_conv);
+       SendError_free(this_ptr_conv);
 }
 
-static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(arg);
+static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_Payee_clone_ptr(int64_t arg) {
-       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
-       int64_t ret_conv = Payee_clone_ptr(arg_conv);
+int64_t  CS_LDK_SendError_clone_ptr(int64_t arg) {
+       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
+       int64_t ret_conv = SendError_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Payee_clone(int64_t orig) {
-       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(orig_conv);
+int64_t  CS_LDK_SendError_clone(int64_t orig) {
+       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Payee_blinded(int64_tArray route_hints, int64_t features) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_constr;
-       route_hints_constr.datalen = route_hints->arr_len;
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = route_hints->elems;
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_37 = route_hints_vals[l];
-               void* route_hints_conv_37_ptr = untag_ptr(route_hints_conv_37);
-               CHECK_ACCESS(route_hints_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(route_hints_conv_37_ptr);
-               route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(route_hints_conv_37));
-               route_hints_constr.data[l] = route_hints_conv_37_conv;
-       }
-       FREE(route_hints);
-       LDKBolt12InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
+int64_t  CS_LDK_SendError_secp256k1(int32_t a) {
+       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_secp256k1(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Payee_clear(int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKCVec_RouteHintZ route_hints_constr;
-       route_hints_constr.datalen = route_hints->arr_len;
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = route_hints->elems;
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_11 = route_hints_vals[l];
-               LDKRouteHint route_hints_conv_11_conv;
-               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
-               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
-               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
-               route_hints_constr.data[l] = route_hints_conv_11_conv;
-       }
-       FREE(route_hints);
-       LDKBolt11InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
+int64_t  CS_LDK_SendError_too_big_packet() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_big_packet();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Payee_hash(int64_t o) {
-       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
-       int64_t ret_conv = Payee_hash(o_conv);
-       return ret_conv;
+int64_t  CS_LDK_SendError_too_few_blinded_hops() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_few_blinded_hops();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Payee_eq(int64_t a, int64_t b) {
-       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
-       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
-       jboolean ret_conv = Payee_eq(a_conv, b_conv);
-       return ret_conv;
+int64_t  CS_LDK_SendError_invalid_first_hop(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_first_hop(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_RouteHint_free(int64_t this_obj) {
-       LDKRouteHint this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHint_free(this_obj_conv);
+int64_t  CS_LDK_SendError_path_not_found() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_path_not_found();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_tArray  CS_LDK_RouteHint_get_a(int64_t this_ptr) {
-       LDKRouteHint this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t o = 0; o < ret_var.datalen; o++) {
-               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
-               int64_t ret_conv_14_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
-               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
-               ret_arr_ptr[o] = ret_conv_14_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+int64_t  CS_LDK_SendError_invalid_message() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_message();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_RouteHint_set_a(int64_t this_ptr, int64_tArray val) {
-       LDKRouteHint this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t o = 0; o < val_constr.datalen; o++) {
-               int64_t val_conv_14 = val_vals[o];
-               LDKRouteHintHop val_conv_14_conv;
-               val_conv_14_conv.inner = untag_ptr(val_conv_14);
-               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
-               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
-               val_constr.data[o] = val_conv_14_conv;
-       }
-       FREE(val);
-       RouteHint_set_a(&this_ptr_conv, val_constr);
+int64_t  CS_LDK_SendError_buffer_full() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_buffer_full();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHint_new(int64_tArray a_arg) {
-       LDKCVec_RouteHintHopZ a_arg_constr;
-       a_arg_constr.datalen = a_arg->arr_len;
-       if (a_arg_constr.datalen > 0)
-               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               a_arg_constr.data = NULL;
-       int64_t* a_arg_vals = a_arg->elems;
-       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
-               int64_t a_arg_conv_14 = a_arg_vals[o];
-               LDKRouteHintHop a_arg_conv_14_conv;
-               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
-               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
-               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
-               a_arg_constr.data[o] = a_arg_conv_14_conv;
-       }
-       FREE(a_arg);
-       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendError_get_node_id_failed() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_get_node_id_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
-       LDKRouteHint ret_var = RouteHint_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendError_unresolved_introduction_node() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_unresolved_introduction_node();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteHint_clone_ptr(int64_t arg) {
-       LDKRouteHint arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_RouteHint_clone(int64_t orig) {
-       LDKRouteHint orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendError_blinded_path_advance_failed() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_blinded_path_advance_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHint_hash(int64_t o) {
-       LDKRouteHint o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_hash(&o_conv);
+int64_t  CS_LDK_SendError_hash(int64_t o) {
+       LDKSendError* o_conv = (LDKSendError*)untag_ptr(o);
+       int64_t ret_conv = SendError_hash(o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_RouteHint_eq(int64_t a, int64_t b) {
-       LDKRouteHint a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRouteHint b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
+jboolean  CS_LDK_SendError_eq(int64_t a, int64_t b) {
+       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
+       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
+       jboolean ret_conv = SendError_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_RouteHint_write(int64_t obj) {
-       LDKRouteHint obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+void  CS_LDK_CustomOnionMessageHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomOnionMessageHandler_free(this_ptr_conv);
+}
+
+void  CS_LDK_PeeledOnion_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPeeledOnion this_ptr_conv = *(LDKPeeledOnion*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PeeledOnion_free(this_ptr_conv);
+}
+
+static inline uint64_t PeeledOnion_clone_ptr(LDKPeeledOnion *NONNULL_PTR arg) {
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_PeeledOnion_clone_ptr(int64_t arg) {
+       LDKPeeledOnion* arg_conv = (LDKPeeledOnion*)untag_ptr(arg);
+       int64_t ret_conv = PeeledOnion_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_PeeledOnion_clone(int64_t orig) {
+       LDKPeeledOnion* orig_conv = (LDKPeeledOnion*)untag_ptr(orig);
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PeeledOnion_forward(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKNextMessageHop a_conv = *(LDKNextMessageHop*)(a_ptr);
+       a_conv = NextMessageHop_clone((LDKNextMessageHop*)untag_ptr(a));
+       LDKOnionMessage b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = OnionMessage_clone(&b_conv);
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_forward(a_conv, b_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PeeledOnion_receive(int64_t a, int64_t b, int64_t c) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKParsedOnionMessageContents a_conv = *(LDKParsedOnionMessageContents*)(a_ptr);
+       a_conv = ParsedOnionMessageContents_clone((LDKParsedOnionMessageContents*)untag_ptr(a));
+       void* b_ptr = untag_ptr(b);
+       CHECK_ACCESS(b_ptr);
+       LDKCOption_MessageContextZ b_conv = *(LDKCOption_MessageContextZ*)(b_ptr);
+       b_conv = COption_MessageContextZ_clone((LDKCOption_MessageContextZ*)untag_ptr(b));
+       LDKBlindedMessagePath c_conv;
+       c_conv.inner = untag_ptr(c);
+       c_conv.is_owned = ptr_is_owned(c);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
+       c_conv = BlindedMessagePath_clone(&c_conv);
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_receive(a_conv, b_conv, c_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_create_onion_message_resolving_destination(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t network_graph, int64_t path, int64_t contents, int64_t reply_path) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* contents_ptr = untag_ptr(contents);
+       CHECK_ACCESS(contents_ptr);
+       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
+       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
+       }
+       LDKBlindedMessagePath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedMessagePath_clone(&reply_path_conv);
+       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
+       *ret_conv = create_onion_message_resolving_destination(entropy_source_conv, node_signer_conv, node_id_lookup_conv, &network_graph_conv, path_conv, contents_conv, reply_path_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_create_onion_message(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t path, int64_t contents, int64_t reply_path) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* contents_ptr = untag_ptr(contents);
+       CHECK_ACCESS(contents_ptr);
+       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
+       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
+       }
+       LDKBlindedMessagePath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedMessagePath_clone(&reply_path_conv);
+       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
+       *ret_conv = create_onion_message(entropy_source_conv, node_signer_conv, node_id_lookup_conv, path_conv, contents_conv, reply_path_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_peel_onion_message(int64_t msg, int64_t node_signer, int64_t logger, int64_t custom_handler) {
+       LDKOnionMessage msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKCResult_PeeledOnionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PeeledOnionNoneZ), "LDKCResult_PeeledOnionNoneZ");
+       *ret_conv = peel_onion_message(&msg_conv, node_signer_conv, logger_conv, custom_handler_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_new(int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t node_id_lookup, int64_t message_router, int64_t offers_handler, int64_t async_payments_handler, int64_t custom_handler) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       CHECK_ACCESS(node_id_lookup_ptr);
+       LDKNodeIdLookUp node_id_lookup_conv = *(LDKNodeIdLookUp*)(node_id_lookup_ptr);
+       if (node_id_lookup_conv.free == LDKNodeIdLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeIdLookUp_JCalls_cloned(&node_id_lookup_conv);
+       }
+       void* message_router_ptr = untag_ptr(message_router);
+       CHECK_ACCESS(message_router_ptr);
+       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
+       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKMessageRouter_JCalls_cloned(&message_router_conv);
+       }
+       void* offers_handler_ptr = untag_ptr(offers_handler);
+       CHECK_ACCESS(offers_handler_ptr);
+       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
+       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
+       }
+       void* async_payments_handler_ptr = untag_ptr(async_payments_handler);
+       CHECK_ACCESS(async_payments_handler_ptr);
+       LDKAsyncPaymentsMessageHandler async_payments_handler_conv = *(LDKAsyncPaymentsMessageHandler*)(async_payments_handler_ptr);
+       if (async_payments_handler_conv.free == LDKAsyncPaymentsMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKAsyncPaymentsMessageHandler_JCalls_cloned(&async_payments_handler_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, node_id_lookup_conv, message_router_conv, offers_handler_conv, async_payments_handler_conv, custom_handler_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OnionMessenger_new_with_offline_peer_interception(int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t node_id_lookup, int64_t message_router, int64_t offers_handler, int64_t async_payments_handler, int64_t custom_handler) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       CHECK_ACCESS(node_id_lookup_ptr);
+       LDKNodeIdLookUp node_id_lookup_conv = *(LDKNodeIdLookUp*)(node_id_lookup_ptr);
+       if (node_id_lookup_conv.free == LDKNodeIdLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeIdLookUp_JCalls_cloned(&node_id_lookup_conv);
+       }
+       void* message_router_ptr = untag_ptr(message_router);
+       CHECK_ACCESS(message_router_ptr);
+       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
+       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKMessageRouter_JCalls_cloned(&message_router_conv);
+       }
+       void* offers_handler_ptr = untag_ptr(offers_handler);
+       CHECK_ACCESS(offers_handler_ptr);
+       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
+       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
+       }
+       void* async_payments_handler_ptr = untag_ptr(async_payments_handler);
+       CHECK_ACCESS(async_payments_handler_ptr);
+       LDKAsyncPaymentsMessageHandler async_payments_handler_conv = *(LDKAsyncPaymentsMessageHandler*)(async_payments_handler_ptr);
+       if (async_payments_handler_conv.free == LDKAsyncPaymentsMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKAsyncPaymentsMessageHandler_JCalls_cloned(&async_payments_handler_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKOnionMessenger ret_var = OnionMessenger_new_with_offline_peer_interception(entropy_source_conv, node_signer_conv, logger_conv, node_id_lookup_conv, message_router_conv, offers_handler_conv, async_payments_handler_conv, custom_handler_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OnionMessenger_send_onion_message(int64_t this_arg, int64_t contents, int64_t instructions) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* contents_ptr = untag_ptr(contents);
+       CHECK_ACCESS(contents_ptr);
+       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
+       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
+       }
+       void* instructions_ptr = untag_ptr(instructions);
+       CHECK_ACCESS(instructions_ptr);
+       LDKMessageSendInstructions instructions_conv = *(LDKMessageSendInstructions*)(instructions_ptr);
+       instructions_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(instructions));
+       LDKCResult_SendSuccessSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SendSuccessSendErrorZ), "LDKCResult_SendSuccessSendErrorZ");
+       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, contents_conv, instructions_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_forward_onion_message(int64_t this_arg, int64_t message, int8_tArray peer_node_id) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessage message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = OnionMessage_clone(&message_conv);
+       LDKPublicKey peer_node_id_ref;
+       CHECK(peer_node_id->arr_len == 33);
+       memcpy(peer_node_id_ref.compressed_form, peer_node_id->elems, 33); FREE(peer_node_id);
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = OnionMessenger_forward_onion_message(&this_arg_conv, message_conv, peer_node_id_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_handle_onion_message_response(int64_t this_arg, int64_t response, int64_t instructions) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* response_ptr = untag_ptr(response);
+       CHECK_ACCESS(response_ptr);
+       LDKOnionMessageContents response_conv = *(LDKOnionMessageContents*)(response_ptr);
+       if (response_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&response_conv);
+       }
+       LDKResponseInstruction instructions_conv;
+       instructions_conv.inner = untag_ptr(instructions);
+       instructions_conv.is_owned = ptr_is_owned(instructions);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(instructions_conv);
+       instructions_conv = ResponseInstruction_clone(&instructions_conv);
+       LDKCResult_SendSuccessSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SendSuccessSendErrorZ), "LDKCResult_SendSuccessSendErrorZ");
+       *ret_conv = OnionMessenger_handle_onion_message_response(&this_arg_conv, response_conv, instructions_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_get_update_future(int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKFuture ret_var = OnionMessenger_get_update_future(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OnionMessenger_as_EventsProvider(int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
+       *ret_ret = OnionMessenger_as_EventsProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_as_OnionMessageHandler(int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
+       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_OffersMessageHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessageHandler_free(this_ptr_conv);
+}
+
+void  CS_LDK_OffersMessage_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessage_free(this_ptr_conv);
+}
+
+static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_OffersMessage_clone_ptr(int64_t arg) {
+       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
+       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OffersMessage_clone(int64_t orig) {
+       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersMessage_invoice_request(int64_t a) {
+       LDKInvoiceRequest a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceRequest_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_request(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersMessage_invoice(int64_t a) {
+       LDKBolt12Invoice a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12Invoice_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersMessage_invoice_error(int64_t a) {
+       LDKInvoiceError a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceError_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_error(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_OffersMessage_is_known_type(int64_t tlv_type) {
+       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OffersMessage_as_OnionMessageContents(int64_t this_arg) {
+       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = OffersMessage_as_OnionMessageContents(this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_OffersMessage_write(int64_t obj) {
+       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = OffersMessage_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RouteHint_read(int8_tArray ser) {
+int64_t  CS_LDK_OffersMessage_read(int8_tArray ser, int64_t arg_a, int64_t arg_b) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
-       *ret_conv = RouteHint_read(ser_ref);
+       void* arg_b_ptr = untag_ptr(arg_b);
+       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
+       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
+       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
+       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteHintHop_free(int64_t this_obj) {
-       LDKRouteHintHop this_obj_conv;
+void  CS_LDK_Packet_free(int64_t this_obj) {
+       LDKPacket this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHintHop_free(this_obj_conv);
+       Packet_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_RouteHintHop_get_src_node_id(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_t  CS_LDK_Packet_get_version(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       int8_t ret_conv = Packet_get_version(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_RouteHintHop_set_src_node_id(int64_t this_ptr, int8_tArray val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_version(int64_t this_ptr, int8_t val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
+       Packet_set_version(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_RouteHintHop_get_short_channel_id(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_tArray  CS_LDK_Packet_get_public_key(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Packet_get_public_key(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHintHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_public_key(int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       Packet_set_public_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHintHop_get_fees(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_tArray  CS_LDK_Packet_get_hop_data(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_u8Z ret_var = Packet_get_hop_data(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHintHop_set_fees(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_hop_data(int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
-}
-
-int16_t  CS_LDK_RouteHintHop_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_RouteHintHop_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_RouteHintHop_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_RouteHintHop_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = val->arr_len;
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
+       Packet_set_hop_data(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHintHop_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_tArray  CS_LDK_Packet_get_hmac(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *Packet_get_hmac(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHintHop_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_hmac(int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       Packet_set_hmac(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHintHop_new(int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
-       LDKPublicKey src_node_id_arg_ref;
-       CHECK(src_node_id_arg->arr_len == 33);
-       memcpy(src_node_id_arg_ref.compressed_form, src_node_id_arg->elems, 33); FREE(src_node_id_arg);
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
-       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
-       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
-       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
-       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
-       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
-       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
+int64_t  CS_LDK_Packet_new(int8_t version_arg, int8_tArray public_key_arg, int8_tArray hop_data_arg, int8_tArray hmac_arg) {
+       LDKPublicKey public_key_arg_ref;
+       CHECK(public_key_arg->arr_len == 33);
+       memcpy(public_key_arg_ref.compressed_form, public_key_arg->elems, 33); FREE(public_key_arg);
+       LDKCVec_u8Z hop_data_arg_ref;
+       hop_data_arg_ref.datalen = hop_data_arg->arr_len;
+       hop_data_arg_ref.data = MALLOC(hop_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(hop_data_arg_ref.data, hop_data_arg->elems, hop_data_arg_ref.datalen); FREE(hop_data_arg);
+       LDKThirtyTwoBytes hmac_arg_ref;
+       CHECK(hmac_arg->arr_len == 32);
+       memcpy(hmac_arg_ref.data, hmac_arg->elems, 32); FREE(hmac_arg);
+       LDKPacket ret_var = Packet_new(version_arg, public_key_arg_ref, hop_data_arg_ref, hmac_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
-       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+static inline uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg) {
+       LDKPacket ret_var = Packet_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteHintHop_clone_ptr(int64_t arg) {
-       LDKRouteHintHop arg_conv;
+int64_t  CS_LDK_Packet_clone_ptr(int64_t arg) {
+       LDKPacket arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = Packet_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteHintHop_clone(int64_t orig) {
-       LDKRouteHintHop orig_conv;
+int64_t  CS_LDK_Packet_clone(int64_t orig) {
+       LDKPacket orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
+       LDKPacket ret_var = Packet_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHintHop_hash(int64_t o) {
-       LDKRouteHintHop o_conv;
+int64_t  CS_LDK_Packet_hash(int64_t o) {
+       LDKPacket o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_hash(&o_conv);
+       int64_t ret_conv = Packet_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_RouteHintHop_eq(int64_t a, int64_t b) {
-       LDKRouteHintHop a_conv;
+jboolean  CS_LDK_Packet_eq(int64_t a, int64_t b) {
+       LDKPacket a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHintHop b_conv;
+       LDKPacket b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Packet_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_RouteHintHop_write(int64_t obj) {
-       LDKRouteHintHop obj_conv;
+int8_tArray  CS_LDK_Packet_write(int64_t obj) {
+       LDKPacket obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Packet_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RouteHintHop_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
-       *ret_conv = RouteHintHop_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ParsedOnionMessageContents_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKParsedOnionMessageContents this_ptr_conv = *(LDKParsedOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ParsedOnionMessageContents_free(this_ptr_conv);
 }
 
-void  CS_LDK_FirstHopCandidate_free(int64_t this_obj) {
-       LDKFirstHopCandidate this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FirstHopCandidate_free(this_obj_conv);
+static inline uint64_t ParsedOnionMessageContents_clone_ptr(LDKParsedOnionMessageContents *NONNULL_PTR arg) {
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_ParsedOnionMessageContents_clone_ptr(int64_t arg) {
+       LDKParsedOnionMessageContents* arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(arg);
+       int64_t ret_conv = ParsedOnionMessageContents_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t FirstHopCandidate_clone_ptr(LDKFirstHopCandidate *NONNULL_PTR arg) {
-       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_ParsedOnionMessageContents_clone(int64_t orig) {
+       LDKParsedOnionMessageContents* orig_conv = (LDKParsedOnionMessageContents*)untag_ptr(orig);
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_FirstHopCandidate_clone_ptr(int64_t arg) {
-       LDKFirstHopCandidate arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = FirstHopCandidate_clone_ptr(&arg_conv);
+
+int64_t  CS_LDK_ParsedOnionMessageContents_offers(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
+       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_offers(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ParsedOnionMessageContents_custom(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
+       if (a_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&a_conv);
+       }
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_custom(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ParsedOnionMessageContents_as_OnionMessageContents(int64_t this_arg) {
+       LDKParsedOnionMessageContents* this_arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(this_arg);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = ParsedOnionMessageContents_as_OnionMessageContents(this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_ParsedOnionMessageContents_write(int64_t obj) {
+       LDKParsedOnionMessageContents* obj_conv = (LDKParsedOnionMessageContents*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = ParsedOnionMessageContents_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = OnionMessageContents_clone(arg);
+       return tag_ptr(ret_ret, true);
+}
+int64_t  CS_LDK_OnionMessageContents_clone_ptr(int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)arg_ptr;
+       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_FirstHopCandidate_clone(int64_t orig) {
-       LDKFirstHopCandidate orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(&orig_conv);
+int64_t  CS_LDK_OnionMessageContents_clone(int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)orig_ptr;
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = OnionMessageContents_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_OnionMessageContents_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OnionMessageContents_free(this_ptr_conv);
+}
+
+void  CS_LDK_IntroductionNode_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKIntroductionNode this_ptr_conv = *(LDKIntroductionNode*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       IntroductionNode_free(this_ptr_conv);
+}
+
+static inline uint64_t IntroductionNode_clone_ptr(LDKIntroductionNode *NONNULL_PTR arg) {
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_IntroductionNode_clone_ptr(int64_t arg) {
+       LDKIntroductionNode* arg_conv = (LDKIntroductionNode*)untag_ptr(arg);
+       int64_t ret_conv = IntroductionNode_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_IntroductionNode_clone(int64_t orig) {
+       LDKIntroductionNode* orig_conv = (LDKIntroductionNode*)untag_ptr(orig);
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_IntroductionNode_node_id(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_node_id(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_IntroductionNode_directed_short_channel_id(int32_t a, int64_t b) {
+       LDKDirection a_conv = LDKDirection_from_cs(a);
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_directed_short_channel_id(a_conv, b);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_IntroductionNode_hash(int64_t o) {
+       LDKIntroductionNode* o_conv = (LDKIntroductionNode*)untag_ptr(o);
+       int64_t ret_conv = IntroductionNode_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_IntroductionNode_eq(int64_t a, int64_t b) {
+       LDKIntroductionNode* a_conv = (LDKIntroductionNode*)untag_ptr(a);
+       LDKIntroductionNode* b_conv = (LDKIntroductionNode*)untag_ptr(b);
+       jboolean ret_conv = IntroductionNode_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int32_t  CS_LDK_Direction_clone(int64_t orig) {
+       LDKDirection* orig_conv = (LDKDirection*)untag_ptr(orig);
+       int32_t ret_conv = LDKDirection_to_cs(Direction_clone(orig_conv));
+       return ret_conv;
+}
+
+int32_t  CS_LDK_Direction_node_one() {
+       int32_t ret_conv = LDKDirection_to_cs(Direction_node_one());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_Direction_node_two() {
+       int32_t ret_conv = LDKDirection_to_cs(Direction_node_two());
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Direction_hash(int64_t o) {
+       LDKDirection* o_conv = (LDKDirection*)untag_ptr(o);
+       int64_t ret_conv = Direction_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Direction_eq(int64_t a, int64_t b) {
+       LDKDirection* a_conv = (LDKDirection*)untag_ptr(a);
+       LDKDirection* b_conv = (LDKDirection*)untag_ptr(b);
+       jboolean ret_conv = Direction_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeIdLookUp_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeIdLookUp this_ptr_conv = *(LDKNodeIdLookUp*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeIdLookUp_free(this_ptr_conv);
+}
+
+void  CS_LDK_EmptyNodeIdLookUp_free(int64_t this_obj) {
+       LDKEmptyNodeIdLookUp this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       EmptyNodeIdLookUp_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_EmptyNodeIdLookUp_new() {
+       LDKEmptyNodeIdLookUp ret_var = EmptyNodeIdLookUp_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PublicHopCandidate_free(int64_t this_obj) {
-       LDKPublicHopCandidate this_obj_conv;
+int64_t  CS_LDK_EmptyNodeIdLookUp_as_NodeIdLookUp(int64_t this_arg) {
+       LDKEmptyNodeIdLookUp this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeIdLookUp* ret_ret = MALLOC(sizeof(LDKNodeIdLookUp), "LDKNodeIdLookUp");
+       *ret_ret = EmptyNodeIdLookUp_as_NodeIdLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_BlindedHop_free(int64_t this_obj) {
+       LDKBlindedHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PublicHopCandidate_free(this_obj_conv);
+       BlindedHop_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_PublicHopCandidate_get_short_channel_id(int64_t this_ptr) {
-       LDKPublicHopCandidate this_ptr_conv;
+int8_tArray  CS_LDK_BlindedHop_get_blinded_node_id(int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = PublicHopCandidate_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedHop_get_blinded_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_PublicHopCandidate_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKPublicHopCandidate this_ptr_conv;
+void  CS_LDK_BlindedHop_set_blinded_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PublicHopCandidate_set_short_channel_id(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       BlindedHop_set_blinded_node_id(&this_ptr_conv, val_ref);
 }
 
-static inline uint64_t PublicHopCandidate_clone_ptr(LDKPublicHopCandidate *NONNULL_PTR arg) {
-       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_BlindedHop_get_encrypted_payload(int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_get_encrypted_payload(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
-int64_t  CS_LDK_PublicHopCandidate_clone_ptr(int64_t arg) {
-       LDKPublicHopCandidate arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = PublicHopCandidate_clone_ptr(&arg_conv);
-       return ret_conv;
+
+void  CS_LDK_BlindedHop_set_encrypted_payload(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = val->arr_len;
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
+       BlindedHop_set_encrypted_payload(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_PublicHopCandidate_clone(int64_t orig) {
-       LDKPublicHopCandidate orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(&orig_conv);
+int64_t  CS_LDK_BlindedHop_new(int8_tArray blinded_node_id_arg, int8_tArray encrypted_payload_arg) {
+       LDKPublicKey blinded_node_id_arg_ref;
+       CHECK(blinded_node_id_arg->arr_len == 33);
+       memcpy(blinded_node_id_arg_ref.compressed_form, blinded_node_id_arg->elems, 33); FREE(blinded_node_id_arg);
+       LDKCVec_u8Z encrypted_payload_arg_ref;
+       encrypted_payload_arg_ref.datalen = encrypted_payload_arg->arr_len;
+       encrypted_payload_arg_ref.data = MALLOC(encrypted_payload_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(encrypted_payload_arg_ref.data, encrypted_payload_arg->elems, encrypted_payload_arg_ref.datalen); FREE(encrypted_payload_arg);
+       LDKBlindedHop ret_var = BlindedHop_new(blinded_node_id_arg_ref, encrypted_payload_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PrivateHopCandidate_free(int64_t this_obj) {
-       LDKPrivateHopCandidate this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PrivateHopCandidate_free(this_obj_conv);
-}
-
-static inline uint64_t PrivateHopCandidate_clone_ptr(LDKPrivateHopCandidate *NONNULL_PTR arg) {
-       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(arg);
+static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
+       LDKBlindedHop ret_var = BlindedHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PrivateHopCandidate_clone_ptr(int64_t arg) {
-       LDKPrivateHopCandidate arg_conv;
+int64_t  CS_LDK_BlindedHop_clone_ptr(int64_t arg) {
+       LDKBlindedHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PrivateHopCandidate_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PrivateHopCandidate_clone(int64_t orig) {
-       LDKPrivateHopCandidate orig_conv;
+int64_t  CS_LDK_BlindedHop_clone(int64_t orig) {
+       LDKBlindedHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(&orig_conv);
+       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_BlindedPathCandidate_free(int64_t this_obj) {
-       LDKBlindedPathCandidate this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPathCandidate_free(this_obj_conv);
+int64_t  CS_LDK_BlindedHop_hash(int64_t o) {
+       LDKBlindedHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedHop_hash(&o_conv);
+       return ret_conv;
 }
 
-static inline uint64_t BlindedPathCandidate_clone_ptr(LDKBlindedPathCandidate *NONNULL_PTR arg) {
-       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_BlindedPathCandidate_clone_ptr(int64_t arg) {
-       LDKBlindedPathCandidate arg_conv;
+jboolean  CS_LDK_BlindedHop_eq(int64_t a, int64_t b) {
+       LDKBlindedHop a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedHop b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_BlindedHop_write(int64_t obj) {
+       LDKBlindedHop obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedHop_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
+       *ret_conv = BlindedHop_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_BlindedPayInfo_free(int64_t this_obj) {
+       LDKBlindedPayInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedPayInfo_free(this_obj_conv);
+}
+
+int32_t  CS_LDK_BlindedPayInfo_get_fee_base_msat(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_fee_base_msat(int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
+}
+
+int32_t  CS_LDK_BlindedPayInfo_get_fee_proportional_millionths(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_BlindedPayInfo_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_get_features(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_BlindedPayInfo_set_features(int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_new(int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_BlindedPayInfo_clone_ptr(int64_t arg) {
+       LDKBlindedPayInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPathCandidate_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPathCandidate_clone(int64_t orig) {
-       LDKBlindedPathCandidate orig_conv;
+int64_t  CS_LDK_BlindedPayInfo_clone(int64_t orig) {
+       LDKBlindedPayInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(&orig_conv);
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_OneHopBlindedPathCandidate_free(int64_t this_obj) {
-       LDKOneHopBlindedPathCandidate this_obj_conv;
+int64_t  CS_LDK_BlindedPayInfo_hash(int64_t o) {
+       LDKBlindedPayInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_BlindedPayInfo_eq(int64_t a, int64_t b) {
+       LDKBlindedPayInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedPayInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_BlindedPayInfo_write(int64_t obj) {
+       LDKBlindedPayInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedPayInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = BlindedPayInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_BlindedPaymentPath_free(int64_t this_obj) {
+       LDKBlindedPaymentPath this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OneHopBlindedPathCandidate_free(this_obj_conv);
+       BlindedPaymentPath_free(this_obj_conv);
 }
 
-static inline uint64_t OneHopBlindedPathCandidate_clone_ptr(LDKOneHopBlindedPathCandidate *NONNULL_PTR arg) {
-       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(arg);
+int64_t  CS_LDK_BlindedPaymentPath_get_payinfo(int64_t this_ptr) {
+       LDKBlindedPaymentPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedPayInfo ret_var = BlindedPaymentPath_get_payinfo(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_OneHopBlindedPathCandidate_clone_ptr(int64_t arg) {
-       LDKOneHopBlindedPathCandidate arg_conv;
+
+void  CS_LDK_BlindedPaymentPath_set_payinfo(int64_t this_ptr, int64_t val) {
+       LDKBlindedPaymentPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedPayInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedPayInfo_clone(&val_conv);
+       BlindedPaymentPath_set_payinfo(&this_ptr_conv, val_conv);
+}
+
+static inline uint64_t BlindedPaymentPath_clone_ptr(LDKBlindedPaymentPath *NONNULL_PTR arg) {
+       LDKBlindedPaymentPath ret_var = BlindedPaymentPath_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_BlindedPaymentPath_clone_ptr(int64_t arg) {
+       LDKBlindedPaymentPath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = OneHopBlindedPathCandidate_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedPaymentPath_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OneHopBlindedPathCandidate_clone(int64_t orig) {
-       LDKOneHopBlindedPathCandidate orig_conv;
+int64_t  CS_LDK_BlindedPaymentPath_clone(int64_t orig) {
+       LDKBlindedPaymentPath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(&orig_conv);
+       LDKBlindedPaymentPath ret_var = BlindedPaymentPath_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_CandidateRouteHop_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCandidateRouteHop this_ptr_conv = *(LDKCandidateRouteHop*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CandidateRouteHop_free(this_ptr_conv);
-}
-
-static inline uint64_t CandidateRouteHop_clone_ptr(LDKCandidateRouteHop *NONNULL_PTR arg) {
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_CandidateRouteHop_clone_ptr(int64_t arg) {
-       LDKCandidateRouteHop* arg_conv = (LDKCandidateRouteHop*)untag_ptr(arg);
-       int64_t ret_conv = CandidateRouteHop_clone_ptr(arg_conv);
+int64_t  CS_LDK_BlindedPaymentPath_hash(int64_t o) {
+       LDKBlindedPaymentPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPaymentPath_hash(&o_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_clone(int64_t orig) {
-       LDKCandidateRouteHop* orig_conv = (LDKCandidateRouteHop*)untag_ptr(orig);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_CandidateRouteHop_first_hop(int64_t a) {
-       LDKFirstHopCandidate a_conv;
+jboolean  CS_LDK_BlindedPaymentPath_eq(int64_t a, int64_t b) {
+       LDKBlindedPaymentPath a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = FirstHopCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_first_hop(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       a_conv.is_owned = false;
+       LDKBlindedPaymentPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPaymentPath_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_public_hop(int64_t a) {
-       LDKPublicHopCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = PublicHopCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_public_hop(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedPaymentPath_one_hop(int8_tArray payee_node_id, int64_t payee_tlvs, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
+       LDKPublicKey payee_node_id_ref;
+       CHECK(payee_node_id->arr_len == 33);
+       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
+       LDKReceiveTlvs payee_tlvs_conv;
+       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
+       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
+       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = BlindedPaymentPath_one_hop(payee_node_id_ref, payee_tlvs_conv, min_final_cltv_expiry_delta, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_private_hop(int64_t a) {
-       LDKPrivateHopCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = PrivateHopCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_private_hop(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedPaymentPath_new(int64_tArray intermediate_nodes, int8_tArray payee_node_id, int64_t payee_tlvs, int64_t htlc_maximum_msat, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
+       LDKCVec_PaymentForwardNodeZ intermediate_nodes_constr;
+       intermediate_nodes_constr.datalen = intermediate_nodes->arr_len;
+       if (intermediate_nodes_constr.datalen > 0)
+               intermediate_nodes_constr.data = MALLOC(intermediate_nodes_constr.datalen * sizeof(LDKPaymentForwardNode), "LDKCVec_PaymentForwardNodeZ Elements");
+       else
+               intermediate_nodes_constr.data = NULL;
+       int64_t* intermediate_nodes_vals = intermediate_nodes->elems;
+       for (size_t u = 0; u < intermediate_nodes_constr.datalen; u++) {
+               int64_t intermediate_nodes_conv_20 = intermediate_nodes_vals[u];
+               LDKPaymentForwardNode intermediate_nodes_conv_20_conv;
+               intermediate_nodes_conv_20_conv.inner = untag_ptr(intermediate_nodes_conv_20);
+               intermediate_nodes_conv_20_conv.is_owned = ptr_is_owned(intermediate_nodes_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(intermediate_nodes_conv_20_conv);
+               intermediate_nodes_conv_20_conv = PaymentForwardNode_clone(&intermediate_nodes_conv_20_conv);
+               intermediate_nodes_constr.data[u] = intermediate_nodes_conv_20_conv;
+       }
+       FREE(intermediate_nodes);
+       LDKPublicKey payee_node_id_ref;
+       CHECK(payee_node_id->arr_len == 33);
+       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
+       LDKReceiveTlvs payee_tlvs_conv;
+       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
+       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
+       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = BlindedPaymentPath_new(intermediate_nodes_constr, payee_node_id_ref, payee_tlvs_conv, htlc_maximum_msat, min_final_cltv_expiry_delta, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_blinded(int64_t a) {
-       LDKBlindedPathCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPathCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_blinded(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_BlindedPaymentPath_public_introduction_node_id(int64_t this_arg, int64_t network_graph) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKNodeId ret_var = BlindedPaymentPath_public_introduction_node_id(&this_arg_conv, &network_graph_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_one_hop_blinded(int64_t a) {
-       LDKOneHopBlindedPathCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = OneHopBlindedPathCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_one_hop_blinded(a_conv);
+int64_t  CS_LDK_BlindedPaymentPath_introduction_node(int64_t this_arg) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = BlindedPaymentPath_introduction_node(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_globally_unique_short_channel_id(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = CandidateRouteHop_globally_unique_short_channel_id(this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_BlindedPaymentPath_blinding_point(int64_t this_arg) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedPaymentPath_blinding_point(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_CandidateRouteHop_cltv_expiry_delta(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       int32_t ret_conv = CandidateRouteHop_cltv_expiry_delta(this_arg_conv);
-       return ret_conv;
+int64_tArray  CS_LDK_BlindedPaymentPath_blinded_hops(int64_t this_arg) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedPaymentPath_blinded_hops(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_htlc_minimum_msat(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       int64_t ret_conv = CandidateRouteHop_htlc_minimum_msat(this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_BlindedPaymentPath_advance_path_by_one(int64_t this_arg, int64_t node_signer, int64_t node_id_lookup) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedPaymentPath_advance_path_by_one(&this_arg_conv, node_signer_conv, node_id_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_fees(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKRoutingFees ret_var = CandidateRouteHop_fees(this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentForwardNode_free(int64_t this_obj) {
+       LDKPaymentForwardNode this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentForwardNode_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_source(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKNodeId ret_var = CandidateRouteHop_source(this_arg_conv);
+int64_t  CS_LDK_PaymentForwardNode_get_tlvs(int64_t this_ptr) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKForwardTlvs ret_var = PaymentForwardNode_get_tlvs(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_target(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKNodeId ret_var = CandidateRouteHop_target(this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentForwardNode_set_tlvs(int64_t this_ptr, int64_t val) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKForwardTlvs val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ForwardTlvs_clone(&val_conv);
+       PaymentForwardNode_set_tlvs(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_find_route(int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK(our_node_pubkey->arr_len == 33);
-       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKCVec_ChannelDetailsZ first_hops_constr;
-       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
-       if (first_hops != NULL) {
-               first_hops_constr.datalen = first_hops->arr_len;
-               if (first_hops_constr.datalen > 0)
-                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
-               else
-                       first_hops_constr.data = NULL;
-               int64_t* first_hops_vals = first_hops->elems;
-               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
-                       int64_t first_hops_conv_16 = first_hops_vals[q];
-                       LDKChannelDetails first_hops_conv_16_conv;
-                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
-                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
-                       first_hops_conv_16_conv.is_owned = false;
-                       first_hops_constr.data[q] = first_hops_conv_16_conv;
-               }
-               FREE(first_hops);
-               first_hops_ptr = &first_hops_constr;
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* scorer_ptr = untag_ptr(scorer);
-       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
-       LDKScoreLookUp* scorer_conv = (LDKScoreLookUp*)scorer_ptr;
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv.is_owned = false;
-       uint8_t random_seed_bytes_arr[32];
-       CHECK(random_seed_bytes->arr_len == 32);
-       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
-       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_PaymentForwardNode_get_node_id(int64_t this_ptr) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, PaymentForwardNode_get_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_build_route_from_hops(int8_tArray our_node_pubkey, ptrArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK(our_node_pubkey->arr_len == 33);
-       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
-       LDKCVec_PublicKeyZ hops_constr;
-       hops_constr.datalen = hops->arr_len;
-       if (hops_constr.datalen > 0)
-               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               hops_constr.data = NULL;
-       int8_tArray* hops_vals = (void*) hops->elems;
-       for (size_t i = 0; i < hops_constr.datalen; i++) {
-               int8_tArray hops_conv_8 = hops_vals[i];
-               LDKPublicKey hops_conv_8_ref;
-               CHECK(hops_conv_8->arr_len == 33);
-               memcpy(hops_conv_8_ref.compressed_form, hops_conv_8->elems, 33); FREE(hops_conv_8);
-               hops_constr.data[i] = hops_conv_8_ref;
-       }
-       FREE(hops);
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       uint8_t random_seed_bytes_arr[32];
-       CHECK(random_seed_bytes->arr_len == 32);
-       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_PaymentForwardNode_set_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       PaymentForwardNode_set_node_id(&this_ptr_conv, val_ref);
 }
 
-void  CS_LDK_ScoreLookUp_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScoreLookUp this_ptr_conv = *(LDKScoreLookUp*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ScoreLookUp_free(this_ptr_conv);
+int64_t  CS_LDK_PaymentForwardNode_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = PaymentForwardNode_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ScoreUpdate_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScoreUpdate this_ptr_conv = *(LDKScoreUpdate*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ScoreUpdate_free(this_ptr_conv);
+void  CS_LDK_PaymentForwardNode_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentForwardNode_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-void  CS_LDK_Score_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Score_free(this_ptr_conv);
+int64_t  CS_LDK_PaymentForwardNode_new(int64_t tlvs_arg, int8_tArray node_id_arg, int64_t htlc_maximum_msat_arg) {
+       LDKForwardTlvs tlvs_arg_conv;
+       tlvs_arg_conv.inner = untag_ptr(tlvs_arg);
+       tlvs_arg_conv.is_owned = ptr_is_owned(tlvs_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_arg_conv);
+       tlvs_arg_conv = ForwardTlvs_clone(&tlvs_arg_conv);
+       LDKPublicKey node_id_arg_ref;
+       CHECK(node_id_arg->arr_len == 33);
+       memcpy(node_id_arg_ref.compressed_form, node_id_arg->elems, 33); FREE(node_id_arg);
+       LDKPaymentForwardNode ret_var = PaymentForwardNode_new(tlvs_arg_conv, node_id_arg_ref, htlc_maximum_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_LockableScore_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       LockableScore_free(this_ptr_conv);
+static inline uint64_t PaymentForwardNode_clone_ptr(LDKPaymentForwardNode *NONNULL_PTR arg) {
+       LDKPaymentForwardNode ret_var = PaymentForwardNode_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_PaymentForwardNode_clone_ptr(int64_t arg) {
+       LDKPaymentForwardNode arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PaymentForwardNode_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_WriteableScore_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableScore_free(this_ptr_conv);
+int64_t  CS_LDK_PaymentForwardNode_clone(int64_t orig) {
+       LDKPaymentForwardNode orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPaymentForwardNode ret_var = PaymentForwardNode_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_MultiThreadedLockableScore_free(int64_t this_obj) {
-       LDKMultiThreadedLockableScore this_obj_conv;
+void  CS_LDK_ForwardTlvs_free(int64_t this_obj) {
+       LDKForwardTlvs this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedLockableScore_free(this_obj_conv);
+       ForwardTlvs_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_MultiThreadedLockableScore_as_LockableScore(int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
-       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_ForwardTlvs_get_short_channel_id(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_MultiThreadedLockableScore_write(int64_t obj) {
-       LDKMultiThreadedLockableScore obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_ForwardTlvs_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ForwardTlvs_set_short_channel_id(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_MultiThreadedLockableScore_as_WriteableScore(int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
-       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_ForwardTlvs_get_payment_relay(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay ret_var = ForwardTlvs_get_payment_relay(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_MultiThreadedLockableScore_new(int64_t score) {
-       void* score_ptr = untag_ptr(score);
-       CHECK_ACCESS(score_ptr);
-       LDKScore score_conv = *(LDKScore*)(score_ptr);
-       if (score_conv.free == LDKScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&score_conv);
-       }
-       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
+void  CS_LDK_ForwardTlvs_set_payment_relay(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentRelay_clone(&val_conv);
+       ForwardTlvs_set_payment_relay(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_ForwardTlvs_get_payment_constraints(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints ret_var = ForwardTlvs_get_payment_constraints(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_MultiThreadedScoreLockRead_free(int64_t this_obj) {
-       LDKMultiThreadedScoreLockRead this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedScoreLockRead_free(this_obj_conv);
+void  CS_LDK_ForwardTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ForwardTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-void  CS_LDK_MultiThreadedScoreLockWrite_free(int64_t this_obj) {
-       LDKMultiThreadedScoreLockWrite this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedScoreLockWrite_free(this_obj_conv);
+int64_t  CS_LDK_ForwardTlvs_get_features(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = ForwardTlvs_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_MultiThreadedScoreLockRead_as_ScoreLookUp(int64_t this_arg) {
-       LDKMultiThreadedScoreLockRead this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = MultiThreadedScoreLockRead_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_ForwardTlvs_set_features(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       ForwardTlvs_set_features(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_MultiThreadedScoreLockWrite_write(int64_t obj) {
-       LDKMultiThreadedScoreLockWrite obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedScoreLockWrite_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int8_tArray  CS_LDK_ForwardTlvs_get_next_blinding_override(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, ForwardTlvs_get_next_blinding_override(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
 }
 
-int64_t  CS_LDK_MultiThreadedScoreLockWrite_as_ScoreUpdate(int64_t this_arg) {
-       LDKMultiThreadedScoreLockWrite this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
-       *ret_ret = MultiThreadedScoreLockWrite_as_ScoreUpdate(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_ForwardTlvs_set_next_blinding_override(int64_t this_ptr, int8_tArray val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       ForwardTlvs_set_next_blinding_override(&this_ptr_conv, val_ref);
 }
 
-void  CS_LDK_ChannelUsage_free(int64_t this_obj) {
-       LDKChannelUsage this_obj_conv;
+int64_t  CS_LDK_ForwardTlvs_new(int64_t short_channel_id_arg, int64_t payment_relay_arg, int64_t payment_constraints_arg, int64_t features_arg, int8_tArray next_blinding_override_arg) {
+       LDKPaymentRelay payment_relay_arg_conv;
+       payment_relay_arg_conv.inner = untag_ptr(payment_relay_arg);
+       payment_relay_arg_conv.is_owned = ptr_is_owned(payment_relay_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_relay_arg_conv);
+       payment_relay_arg_conv = PaymentRelay_clone(&payment_relay_arg_conv);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKPublicKey next_blinding_override_arg_ref;
+       CHECK(next_blinding_override_arg->arr_len == 33);
+       memcpy(next_blinding_override_arg_ref.compressed_form, next_blinding_override_arg->elems, 33); FREE(next_blinding_override_arg);
+       LDKForwardTlvs ret_var = ForwardTlvs_new(short_channel_id_arg, payment_relay_arg_conv, payment_constraints_arg_conv, features_arg_conv, next_blinding_override_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg) {
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ForwardTlvs_clone_ptr(int64_t arg) {
+       LDKForwardTlvs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ForwardTlvs_clone(int64_t orig) {
+       LDKForwardTlvs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ReceiveTlvs_free(int64_t this_obj) {
+       LDKReceiveTlvs this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUsage_free(this_obj_conv);
+       ReceiveTlvs_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelUsage_get_amount_msat(int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+int8_tArray  CS_LDK_ReceiveTlvs_get_payment_secret(int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ReceiveTlvs_get_payment_secret(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelUsage_set_amount_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+void  CS_LDK_ReceiveTlvs_set_payment_secret(int64_t this_ptr, int8_tArray val) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ReceiveTlvs_set_payment_secret(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_ChannelUsage_get_inflight_htlc_msat(int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+int64_t  CS_LDK_ReceiveTlvs_get_payment_constraints(int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKPaymentConstraints ret_var = ReceiveTlvs_get_payment_constraints(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelUsage_set_inflight_htlc_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+void  CS_LDK_ReceiveTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ReceiveTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelUsage_get_effective_capacity(int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+int64_t  CS_LDK_ReceiveTlvs_get_payment_context(int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = ReceiveTlvs_get_payment_context(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_ChannelUsage_set_effective_capacity(int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+void  CS_LDK_ReceiveTlvs_set_payment_context(int64_t this_ptr, int64_t val) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
-       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
-       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
+       LDKPaymentContext val_conv = *(LDKPaymentContext*)(val_ptr);
+       val_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(val));
+       ReceiveTlvs_set_payment_context(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelUsage_new(int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
-       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
-       CHECK_ACCESS(effective_capacity_arg_ptr);
-       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
-       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
-       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
+int64_t  CS_LDK_ReceiveTlvs_new(int8_tArray payment_secret_arg, int64_t payment_constraints_arg, int64_t payment_context_arg) {
+       LDKThirtyTwoBytes payment_secret_arg_ref;
+       CHECK(payment_secret_arg->arr_len == 32);
+       memcpy(payment_secret_arg_ref.data, payment_secret_arg->elems, 32); FREE(payment_secret_arg);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       void* payment_context_arg_ptr = untag_ptr(payment_context_arg);
+       CHECK_ACCESS(payment_context_arg_ptr);
+       LDKPaymentContext payment_context_arg_conv = *(LDKPaymentContext*)(payment_context_arg_ptr);
+       payment_context_arg_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(payment_context_arg));
+       LDKReceiveTlvs ret_var = ReceiveTlvs_new(payment_secret_arg_ref, payment_constraints_arg_conv, payment_context_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
-       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
+static inline uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg) {
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelUsage_clone_ptr(int64_t arg) {
-       LDKChannelUsage arg_conv;
+int64_t  CS_LDK_ReceiveTlvs_clone_ptr(int64_t arg) {
+       LDKReceiveTlvs arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
+       int64_t ret_conv = ReceiveTlvs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelUsage_clone(int64_t orig) {
-       LDKChannelUsage orig_conv;
+int64_t  CS_LDK_ReceiveTlvs_clone(int64_t orig) {
+       LDKReceiveTlvs orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_FixedPenaltyScorer_free(int64_t this_obj) {
-       LDKFixedPenaltyScorer this_obj_conv;
+void  CS_LDK_PaymentRelay_free(int64_t this_obj) {
+       LDKPaymentRelay this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FixedPenaltyScorer_free(this_obj_conv);
+       PaymentRelay_free(this_obj_conv);
 }
 
-static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_FixedPenaltyScorer_clone_ptr(int64_t arg) {
-       LDKFixedPenaltyScorer arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_clone(int64_t orig) {
-       LDKFixedPenaltyScorer orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_with_penalty(int64_t penalty_msat) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreLookUp(int64_t this_arg) {
-       LDKFixedPenaltyScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = FixedPenaltyScorer_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreUpdate(int64_t this_arg) {
-       LDKFixedPenaltyScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
-       *ret_ret = FixedPenaltyScorer_as_ScoreUpdate(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int8_tArray  CS_LDK_FixedPenaltyScorer_write(int64_t obj) {
-       LDKFixedPenaltyScorer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_read(int8_tArray ser, int64_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
-       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_ProbabilisticScorer_free(int64_t this_obj) {
-       LDKProbabilisticScorer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScorer_free(this_obj_conv);
-}
-
-void  CS_LDK_ProbabilisticScoringFeeParameters_free(int64_t this_obj) {
-       LDKProbabilisticScoringFeeParameters this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringFeeParameters_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int16_t  CS_LDK_PaymentRelay_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
+       int16_t ret_conv = PaymentRelay_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentRelay_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
+       PaymentRelay_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int32_t  CS_LDK_PaymentRelay_get_fee_proportional_millionths(int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentRelay_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentRelay_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       PaymentRelay_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int32_t  CS_LDK_PaymentRelay_get_fee_base_msat(int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentRelay_get_fee_base_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentRelay_set_fee_base_msat(int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
+       PaymentRelay_set_fee_base_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_PaymentRelay_new(int16_t cltv_expiry_delta_arg, int32_t fee_proportional_millionths_arg, int32_t fee_base_msat_arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+static inline uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+int64_t  CS_LDK_PaymentRelay_clone_ptr(int64_t arg) {
+       LDKPaymentRelay arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PaymentRelay_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_PaymentRelay_clone(int64_t orig) {
+       LDKPaymentRelay orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPaymentRelay ret_var = PaymentRelay_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+void  CS_LDK_PaymentConstraints_free(int64_t this_obj) {
+       LDKPaymentConstraints this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentConstraints_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int32_t  CS_LDK_PaymentConstraints_get_max_cltv_expiry(int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentConstraints_get_max_cltv_expiry(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentConstraints_set_max_cltv_expiry(int64_t this_ptr, int32_t val) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
+       PaymentConstraints_set_max_cltv_expiry(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int64_t  CS_LDK_PaymentConstraints_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
+       int64_t ret_conv = PaymentConstraints_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
-}
-
-jboolean  CS_LDK_ProbabilisticScoringFeeParameters_get_linear_success_probability(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentConstraints_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ProbabilisticScoringFeeParameters_get_linear_success_probability(&this_ptr_conv);
-       return ret_conv;
+       PaymentConstraints_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_linear_success_probability(int64_t this_ptr, jboolean val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_linear_success_probability(&this_ptr_conv, val);
+int64_t  CS_LDK_PaymentConstraints_new(int32_t max_cltv_expiry_arg, int64_t htlc_minimum_msat_arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
+static inline uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone_ptr(int64_t arg) {
-       LDKProbabilisticScoringFeeParameters arg_conv;
+int64_t  CS_LDK_PaymentConstraints_clone_ptr(int64_t arg) {
+       LDKPaymentConstraints arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentConstraints_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone(int64_t orig) {
-       LDKProbabilisticScoringFeeParameters orig_conv;
+int64_t  CS_LDK_PaymentConstraints_clone(int64_t orig) {
+       LDKPaymentConstraints orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_default() {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentContext_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPaymentContext this_ptr_conv = *(LDKPaymentContext*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PaymentContext_free(this_ptr_conv);
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned(int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
+static inline uint64_t PaymentContext_clone_ptr(LDKPaymentContext *NONNULL_PTR arg) {
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_PaymentContext_clone_ptr(int64_t arg) {
+       LDKPaymentContext* arg_conv = (LDKPaymentContext*)untag_ptr(arg);
+       int64_t ret_conv = PaymentContext_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned_from_list(int64_t this_arg, int64_tArray node_ids) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NodeIdZ node_ids_constr;
-       node_ids_constr.datalen = node_ids->arr_len;
-       if (node_ids_constr.datalen > 0)
-               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
-       else
-               node_ids_constr.data = NULL;
-       int64_t* node_ids_vals = node_ids->elems;
-       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
-               int64_t node_ids_conv_8 = node_ids_vals[i];
-               LDKNodeId node_ids_conv_8_conv;
-               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
-               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
-               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
-               node_ids_constr.data[i] = node_ids_conv_8_conv;
-       }
-       FREE(node_ids);
-       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
+int64_t  CS_LDK_PaymentContext_clone(int64_t orig) {
+       LDKPaymentContext* orig_conv = (LDKPaymentContext*)untag_ptr(orig);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_remove_banned(int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
+int64_t  CS_LDK_PaymentContext_unknown(int64_t a) {
+       LDKUnknownPaymentContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = UnknownPaymentContext_clone(&a_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_unknown(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_manual_penalty(int64_t this_arg, int64_t node_id, int64_t penalty) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
+int64_t  CS_LDK_PaymentContext_bolt12_offer(int64_t a) {
+       LDKBolt12OfferContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12OfferContext_clone(&a_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_bolt12_offer(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_remove_manual_penalty(int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
+int64_t  CS_LDK_PaymentContext_bolt12_refund(int64_t a) {
+       LDKBolt12RefundContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12RefundContext_clone(&a_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_bolt12_refund(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_clear_manual_penalties(int64_t this_arg) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
+jboolean  CS_LDK_PaymentContext_eq(int64_t a, int64_t b) {
+       LDKPaymentContext* a_conv = (LDKPaymentContext*)untag_ptr(a);
+       LDKPaymentContext* b_conv = (LDKPaymentContext*)untag_ptr(b);
+       jboolean ret_conv = PaymentContext_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringDecayParameters_free(int64_t this_obj) {
-       LDKProbabilisticScoringDecayParameters this_obj_conv;
+void  CS_LDK_UnknownPaymentContext_free(int64_t this_obj) {
+       LDKUnknownPaymentContext this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringDecayParameters_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_new(int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       UnknownPaymentContext_free(this_obj_conv);
 }
 
-static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
+static inline uint64_t UnknownPaymentContext_clone_ptr(LDKUnknownPaymentContext *NONNULL_PTR arg) {
+       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone_ptr(int64_t arg) {
-       LDKProbabilisticScoringDecayParameters arg_conv;
+int64_t  CS_LDK_UnknownPaymentContext_clone_ptr(int64_t arg) {
+       LDKUnknownPaymentContext arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = UnknownPaymentContext_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone(int64_t orig) {
-       LDKProbabilisticScoringDecayParameters orig_conv;
+int64_t  CS_LDK_UnknownPaymentContext_clone(int64_t orig) {
+       LDKUnknownPaymentContext orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
+       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_default() {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_UnknownPaymentContext_eq(int64_t a, int64_t b) {
+       LDKUnknownPaymentContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKUnknownPaymentContext b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = UnknownPaymentContext_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ProbabilisticScorer_new(int64_t decay_params, int64_t network_graph, int64_t logger) {
-       LDKProbabilisticScoringDecayParameters decay_params_conv;
-       decay_params_conv.inner = untag_ptr(decay_params);
-       decay_params_conv.is_owned = ptr_is_owned(decay_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
-       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ProbabilisticScorer_debug_log_liquidity_stats(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_estimated_channel_liquidity_range(int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
-       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
-       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_payment_success_probability(int64_t this_arg, int64_t scid, int64_t target, int64_t amount_msat, int64_t params) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKProbabilisticScoringFeeParameters params_conv;
-       params_conv.inner = untag_ptr(params);
-       params_conv.is_owned = ptr_is_owned(params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
-       params_conv.is_owned = false;
-       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
-       *ret_copy = ProbabilisticScorer_historical_estimated_payment_success_probability(&this_arg_conv, scid, &target_conv, amount_msat, &params_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_as_ScoreLookUp(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = ProbabilisticScorer_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_as_ScoreUpdate(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
-       *ret_ret = ProbabilisticScorer_as_ScoreUpdate(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_as_Score(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int8_tArray  CS_LDK_ProbabilisticScorer_write(int64_t obj) {
-       LDKProbabilisticScorer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_read(int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKProbabilisticScoringDecayParameters arg_a_conv;
-       arg_a_conv.inner = untag_ptr(arg_a);
-       arg_a_conv.is_owned = ptr_is_owned(arg_a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
-       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
-       LDKNetworkGraph arg_b_conv;
-       arg_b_conv.inner = untag_ptr(arg_b);
-       arg_b_conv.is_owned = ptr_is_owned(arg_b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
-       arg_b_conv.is_owned = false;
-       void* arg_c_ptr = untag_ptr(arg_c);
-       CHECK_ACCESS(arg_c_ptr);
-       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
-       if (arg_c_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_c_conv);
-       }
-       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
-       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_free(int64_t this_obj) {
-       LDKDelayedPaymentOutputDescriptor this_obj_conv;
+void  CS_LDK_Bolt12OfferContext_free(int64_t this_obj) {
+       LDKBolt12OfferContext this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DelayedPaymentOutputDescriptor_free(this_obj_conv);
+       Bolt12OfferContext_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+int64_t  CS_LDK_Bolt12OfferContext_get_offer_id(int64_t this_ptr) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
+       LDKOfferId ret_var = Bolt12OfferContext_get_offer_id(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+void  CS_LDK_Bolt12OfferContext_set_offer_id(int64_t this_ptr, int64_t val) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
+       LDKOfferId val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
-}
-
-int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_per_commitment_point(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
-}
-
-int16_t  CS_LDK_DelayedPaymentOutputDescriptor_get_to_self_delay(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_to_self_delay(int64_t this_ptr, int16_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_output(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+       val_conv = OfferId_clone(&val_conv);
+       Bolt12OfferContext_set_offer_id(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_revocation_pubkey(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+int64_t  CS_LDK_Bolt12OfferContext_get_invoice_request(int64_t this_ptr) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRevocationKey ret_var = DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv);
+       LDKInvoiceRequestFields ret_var = Bolt12OfferContext_get_invoice_request(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_revocation_pubkey(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+void  CS_LDK_Bolt12OfferContext_set_invoice_request(int64_t this_ptr, int64_t val) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRevocationKey val_conv;
+       LDKInvoiceRequestFields val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RevocationKey_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_conv);
+       val_conv = InvoiceRequestFields_clone(&val_conv);
+       Bolt12OfferContext_set_invoice_request(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_Bolt12OfferContext_new(int64_t offer_id_arg, int64_t invoice_request_arg) {
+       LDKOfferId offer_id_arg_conv;
+       offer_id_arg_conv.inner = untag_ptr(offer_id_arg);
+       offer_id_arg_conv.is_owned = ptr_is_owned(offer_id_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(offer_id_arg_conv);
+       offer_id_arg_conv = OfferId_clone(&offer_id_arg_conv);
+       LDKInvoiceRequestFields invoice_request_arg_conv;
+       invoice_request_arg_conv.inner = untag_ptr(invoice_request_arg);
+       invoice_request_arg_conv.is_owned = ptr_is_owned(invoice_request_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_arg_conv);
+       invoice_request_arg_conv = InvoiceRequestFields_clone(&invoice_request_arg_conv);
+       LDKBolt12OfferContext ret_var = Bolt12OfferContext_new(offer_id_arg_conv, invoice_request_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+static inline uint64_t Bolt12OfferContext_clone_ptr(LDKBolt12OfferContext *NONNULL_PTR arg) {
+       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+int64_t  CS_LDK_Bolt12OfferContext_clone_ptr(int64_t arg) {
+       LDKBolt12OfferContext arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12OfferContext_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
+int64_t  CS_LDK_Bolt12OfferContext_clone(int64_t orig) {
+       LDKBolt12OfferContext orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelTransactionParameters_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_Bolt12OfferContext_eq(int64_t a, int64_t b) {
+       LDKBolt12OfferContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBolt12OfferContext b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Bolt12OfferContext_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_new(int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int64_t revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       LDKPublicKey per_commitment_point_arg_ref;
-       CHECK(per_commitment_point_arg->arr_len == 33);
-       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKRevocationKey revocation_pubkey_arg_conv;
-       revocation_pubkey_arg_conv.inner = untag_ptr(revocation_pubkey_arg);
-       revocation_pubkey_arg_conv.is_owned = ptr_is_owned(revocation_pubkey_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(revocation_pubkey_arg_conv);
-       revocation_pubkey_arg_conv = RevocationKey_clone(&revocation_pubkey_arg_conv);
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK(channel_keys_id_arg->arr_len == 32);
-       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
-       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
-       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
-       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
-       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
+void  CS_LDK_Bolt12RefundContext_free(int64_t this_obj) {
+       LDKBolt12RefundContext this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12RefundContext_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_Bolt12RefundContext_new() {
+       LDKBolt12RefundContext ret_var = Bolt12RefundContext_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+static inline uint64_t Bolt12RefundContext_clone_ptr(LDKBolt12RefundContext *NONNULL_PTR arg) {
+       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone_ptr(int64_t arg) {
-       LDKDelayedPaymentOutputDescriptor arg_conv;
+int64_t  CS_LDK_Bolt12RefundContext_clone_ptr(int64_t arg) {
+       LDKBolt12RefundContext arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       int64_t ret_conv = Bolt12RefundContext_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone(int64_t orig) {
-       LDKDelayedPaymentOutputDescriptor orig_conv;
+int64_t  CS_LDK_Bolt12RefundContext_clone(int64_t orig) {
+       LDKBolt12RefundContext orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
+       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_hash(int64_t o) {
-       LDKDelayedPaymentOutputDescriptor o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_DelayedPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
+jboolean  CS_LDK_Bolt12RefundContext_eq(int64_t a, int64_t b) {
+       LDKBolt12RefundContext a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor b_conv;
+       LDKBolt12RefundContext b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Bolt12RefundContext_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_write(int64_t obj) {
-       LDKDelayedPaymentOutputDescriptor obj_conv;
+int8_tArray  CS_LDK_ForwardTlvs_write(int64_t obj) {
+       LDKForwardTlvs obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ForwardTlvs_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_read(int8_tArray ser) {
+int8_tArray  CS_LDK_ReceiveTlvs_write(int64_t obj) {
+       LDKReceiveTlvs obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ReceiveTlvs_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_PaymentRelay_write(int64_t obj) {
+       LDKPaymentRelay obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = PaymentRelay_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_PaymentRelay_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = PaymentRelay_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_free(int64_t this_obj) {
-       LDKStaticPaymentOutputDescriptor this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       StaticPaymentOutputDescriptor_free(this_obj_conv);
+int8_tArray  CS_LDK_PaymentConstraints_write(int64_t obj) {
+       LDKPaymentConstraints obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = PaymentConstraints_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_PaymentConstraints_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = PaymentConstraints_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_output(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+int8_tArray  CS_LDK_PaymentContext_write(int64_t obj) {
+       LDKPaymentContext* obj_conv = (LDKPaymentContext*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PaymentContext_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_PaymentContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentContextDecodeErrorZ), "LDKCResult_PaymentContextDecodeErrorZ");
+       *ret_conv = PaymentContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
+int8_tArray  CS_LDK_UnknownPaymentContext_write(int64_t obj) {
+       LDKUnknownPaymentContext obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnknownPaymentContext_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_UnknownPaymentContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_UnknownPaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnknownPaymentContextDecodeErrorZ), "LDKCResult_UnknownPaymentContextDecodeErrorZ");
+       *ret_conv = UnknownPaymentContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Bolt12OfferContext_write(int64_t obj) {
+       LDKBolt12OfferContext obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12OfferContext_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+int64_t  CS_LDK_Bolt12OfferContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12OfferContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12OfferContextDecodeErrorZ), "LDKCResult_Bolt12OfferContextDecodeErrorZ");
+       *ret_conv = Bolt12OfferContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = StaticPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_Bolt12RefundContext_write(int64_t obj) {
+       LDKBolt12RefundContext obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12RefundContext_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelTransactionParameters_clone(&val_conv);
-       StaticPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_Bolt12RefundContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12RefundContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12RefundContextDecodeErrorZ), "LDKCResult_Bolt12RefundContextDecodeErrorZ");
+       *ret_conv = Bolt12RefundContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_new(int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK(channel_keys_id_arg->arr_len == 32);
-       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
-       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
-       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
-       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
-       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_BlindedMessagePath_free(int64_t this_obj) {
+       LDKBlindedMessagePath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedMessagePath_free(this_obj_conv);
 }
 
-static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+static inline uint64_t BlindedMessagePath_clone_ptr(LDKBlindedMessagePath *NONNULL_PTR arg) {
+       LDKBlindedMessagePath ret_var = BlindedMessagePath_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone_ptr(int64_t arg) {
-       LDKStaticPaymentOutputDescriptor arg_conv;
+int64_t  CS_LDK_BlindedMessagePath_clone_ptr(int64_t arg) {
+       LDKBlindedMessagePath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedMessagePath_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone(int64_t orig) {
-       LDKStaticPaymentOutputDescriptor orig_conv;
+int64_t  CS_LDK_BlindedMessagePath_clone(int64_t orig) {
+       LDKBlindedMessagePath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
+       LDKBlindedMessagePath ret_var = BlindedMessagePath_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_hash(int64_t o) {
-       LDKStaticPaymentOutputDescriptor o_conv;
+int64_t  CS_LDK_BlindedMessagePath_hash(int64_t o) {
+       LDKBlindedMessagePath o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_hash(&o_conv);
+       int64_t ret_conv = BlindedMessagePath_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_StaticPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
-       LDKStaticPaymentOutputDescriptor a_conv;
+jboolean  CS_LDK_BlindedMessagePath_eq(int64_t a, int64_t b) {
+       LDKBlindedMessagePath a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor b_conv;
+       LDKBlindedMessagePath b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       jboolean ret_conv = BlindedMessagePath_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_witness_script(int64_t this_arg) {
-       LDKStaticPaymentOutputDescriptor this_arg_conv;
+int8_tArray  CS_LDK_BlindedMessagePath_write(int64_t obj) {
+       LDKBlindedMessagePath obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedMessagePath_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedMessagePath_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = BlindedMessagePath_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_BlindedMessagePath_one_hop(int8_tArray recipient_node_id, int64_t context, int64_t entropy_source) {
+       LDKPublicKey recipient_node_id_ref;
+       CHECK(recipient_node_id->arr_len == 33);
+       memcpy(recipient_node_id_ref.compressed_form, recipient_node_id->elems, 33); FREE(recipient_node_id);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = BlindedMessagePath_one_hop(recipient_node_id_ref, context_conv, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_BlindedMessagePath_new(int64_tArray intermediate_nodes, int8_tArray recipient_node_id, int64_t context, int64_t entropy_source) {
+       LDKCVec_MessageForwardNodeZ intermediate_nodes_constr;
+       intermediate_nodes_constr.datalen = intermediate_nodes->arr_len;
+       if (intermediate_nodes_constr.datalen > 0)
+               intermediate_nodes_constr.data = MALLOC(intermediate_nodes_constr.datalen * sizeof(LDKMessageForwardNode), "LDKCVec_MessageForwardNodeZ Elements");
+       else
+               intermediate_nodes_constr.data = NULL;
+       int64_t* intermediate_nodes_vals = intermediate_nodes->elems;
+       for (size_t u = 0; u < intermediate_nodes_constr.datalen; u++) {
+               int64_t intermediate_nodes_conv_20 = intermediate_nodes_vals[u];
+               LDKMessageForwardNode intermediate_nodes_conv_20_conv;
+               intermediate_nodes_conv_20_conv.inner = untag_ptr(intermediate_nodes_conv_20);
+               intermediate_nodes_conv_20_conv.is_owned = ptr_is_owned(intermediate_nodes_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(intermediate_nodes_conv_20_conv);
+               intermediate_nodes_conv_20_conv = MessageForwardNode_clone(&intermediate_nodes_conv_20_conv);
+               intermediate_nodes_constr.data[u] = intermediate_nodes_conv_20_conv;
+       }
+       FREE(intermediate_nodes);
+       LDKPublicKey recipient_node_id_ref;
+       CHECK(recipient_node_id->arr_len == 33);
+       memcpy(recipient_node_id_ref.compressed_form, recipient_node_id->elems, 33); FREE(recipient_node_id);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = BlindedMessagePath_new(intermediate_nodes_constr, recipient_node_id_ref, context_conv, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_BlindedMessagePath_use_compact_introduction_node(int64_t this_arg, int64_t network_graph) {
+       LDKBlindedMessagePath this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = StaticPaymentOutputDescriptor_witness_script(&this_arg_conv);
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       BlindedMessagePath_use_compact_introduction_node(&this_arg_conv, &network_graph_conv);
+}
+
+int64_t  CS_LDK_BlindedMessagePath_public_introduction_node_id(int64_t this_arg, int64_t network_graph) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKNodeId ret_var = BlindedMessagePath_public_introduction_node_id(&this_arg_conv, &network_graph_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_BlindedMessagePath_introduction_node(int64_t this_arg) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = BlindedMessagePath_introduction_node(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_max_witness_length(int64_t this_arg) {
-       LDKStaticPaymentOutputDescriptor this_arg_conv;
+int8_tArray  CS_LDK_BlindedMessagePath_blinding_point(int64_t this_arg) {
+       LDKBlindedMessagePath this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_max_witness_length(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedMessagePath_blinding_point(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_write(int64_t obj) {
-       LDKStaticPaymentOutputDescriptor obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int64_tArray  CS_LDK_BlindedMessagePath_blinded_hops(int64_t this_arg) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedMessagePath_blinded_hops(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_BlindedMessagePath_advance_path_by_one(int64_t this_arg, int64_t node_signer, int64_t node_id_lookup) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedMessagePath_advance_path_by_one(&this_arg_conv, node_signer_conv, node_id_lookup_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_SpendableOutputDescriptor_free(int64_t this_ptr) {
+void  CS_LDK_NextMessageHop_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
+       LDKNextMessageHop this_ptr_conv = *(LDKNextMessageHop*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       SpendableOutputDescriptor_free(this_ptr_conv);
+       NextMessageHop_free(this_ptr_conv);
 }
 
-static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(arg);
+static inline uint64_t NextMessageHop_clone_ptr(LDKNextMessageHop *NONNULL_PTR arg) {
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_SpendableOutputDescriptor_clone_ptr(int64_t arg) {
-       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
-       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+int64_t  CS_LDK_NextMessageHop_clone_ptr(int64_t arg) {
+       LDKNextMessageHop* arg_conv = (LDKNextMessageHop*)untag_ptr(arg);
+       int64_t ret_conv = NextMessageHop_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_clone(int64_t orig) {
-       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_SpendableOutputDescriptor_static_output(int64_t outpoint, int64_t output, int8_tArray channel_keys_id) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       void* output_ptr = untag_ptr(output);
-       CHECK_ACCESS(output_ptr);
-       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
-       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
-       LDKThirtyTwoBytes channel_keys_id_ref;
-       CHECK(channel_keys_id->arr_len == 32);
-       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv, channel_keys_id_ref);
+int64_t  CS_LDK_NextMessageHop_clone(int64_t orig) {
+       LDKNextMessageHop* orig_conv = (LDKNextMessageHop*)untag_ptr(orig);
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_delayed_payment_output(int64_t a) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
+int64_t  CS_LDK_NextMessageHop_node_id(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_node_id(a_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_static_payment_output(int64_t a) {
-       LDKStaticPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+int64_t  CS_LDK_NextMessageHop_short_channel_id(int64_t a) {
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_short_channel_id(a);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_hash(int64_t o) {
-       LDKSpendableOutputDescriptor* o_conv = (LDKSpendableOutputDescriptor*)untag_ptr(o);
-       int64_t ret_conv = SpendableOutputDescriptor_hash(o_conv);
+int64_t  CS_LDK_NextMessageHop_hash(int64_t o) {
+       LDKNextMessageHop* o_conv = (LDKNextMessageHop*)untag_ptr(o);
+       int64_t ret_conv = NextMessageHop_hash(o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_SpendableOutputDescriptor_eq(int64_t a, int64_t b) {
-       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
-       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
-       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
+jboolean  CS_LDK_NextMessageHop_eq(int64_t a, int64_t b) {
+       LDKNextMessageHop* a_conv = (LDKNextMessageHop*)untag_ptr(a);
+       LDKNextMessageHop* b_conv = (LDKNextMessageHop*)untag_ptr(b);
+       jboolean ret_conv = NextMessageHop_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_SpendableOutputDescriptor_write(int64_t obj) {
-       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_SpendableOutputDescriptor_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
-       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_SpendableOutputDescriptor_create_spendable_outputs_psbt(int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = descriptors->arr_len;
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = descriptors->elems;
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       FREE(descriptors);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = outputs->arr_len;
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = outputs->elems;
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
-       }
-       FREE(outputs);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = change_destination_script->arr_len;
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(change_destination_script_ref.data, change_destination_script->elems, change_destination_script_ref.datalen); FREE(change_destination_script);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
-       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
-       LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ), "LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ");
-       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_ChannelDerivationParameters_free(int64_t this_obj) {
-       LDKChannelDerivationParameters this_obj_conv;
+void  CS_LDK_MessageForwardNode_free(int64_t this_obj) {
+       LDKMessageForwardNode this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelDerivationParameters_free(this_obj_conv);
+       MessageForwardNode_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_get_value_satoshis(int64_t this_ptr) {
-       LDKChannelDerivationParameters this_ptr_conv;
+int8_tArray  CS_LDK_MessageForwardNode_get_node_id(int64_t this_ptr) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelDerivationParameters_get_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, MessageForwardNode_get_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelDerivationParameters_set_value_satoshis(int64_t this_ptr, int64_t val) {
-       LDKChannelDerivationParameters this_ptr_conv;
+void  CS_LDK_MessageForwardNode_set_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelDerivationParameters_set_value_satoshis(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       MessageForwardNode_set_node_id(&this_ptr_conv, val_ref);
 }
 
-int8_tArray  CS_LDK_ChannelDerivationParameters_get_keys_id(int64_t this_ptr) {
-       LDKChannelDerivationParameters this_ptr_conv;
+int64_t  CS_LDK_MessageForwardNode_get_short_channel_id(int64_t this_ptr) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *ChannelDerivationParameters_get_keys_id(&this_ptr_conv), 32);
-       return ret_arr;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = MessageForwardNode_get_short_channel_id(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelDerivationParameters_set_keys_id(int64_t this_ptr, int8_tArray val) {
-       LDKChannelDerivationParameters this_ptr_conv;
+void  CS_LDK_MessageForwardNode_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       ChannelDerivationParameters_set_keys_id(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_ChannelDerivationParameters_get_transaction_parameters(int64_t this_ptr) {
-       LDKChannelDerivationParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = ChannelDerivationParameters_get_transaction_parameters(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ChannelDerivationParameters_set_transaction_parameters(int64_t this_ptr, int64_t val) {
-       LDKChannelDerivationParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelTransactionParameters_clone(&val_conv);
-       ChannelDerivationParameters_set_transaction_parameters(&this_ptr_conv, val_conv);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       MessageForwardNode_set_short_channel_id(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_new(int64_t value_satoshis_arg, int8_tArray keys_id_arg, int64_t transaction_parameters_arg) {
-       LDKThirtyTwoBytes keys_id_arg_ref;
-       CHECK(keys_id_arg->arr_len == 32);
-       memcpy(keys_id_arg_ref.data, keys_id_arg->elems, 32); FREE(keys_id_arg);
-       LDKChannelTransactionParameters transaction_parameters_arg_conv;
-       transaction_parameters_arg_conv.inner = untag_ptr(transaction_parameters_arg);
-       transaction_parameters_arg_conv.is_owned = ptr_is_owned(transaction_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(transaction_parameters_arg_conv);
-       transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&transaction_parameters_arg_conv);
-       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_new(value_satoshis_arg, keys_id_arg_ref, transaction_parameters_arg_conv);
+int64_t  CS_LDK_MessageForwardNode_new(int8_tArray node_id_arg, int64_t short_channel_id_arg) {
+       LDKPublicKey node_id_arg_ref;
+       CHECK(node_id_arg->arr_len == 33);
+       memcpy(node_id_arg_ref.compressed_form, node_id_arg->elems, 33); FREE(node_id_arg);
+       void* short_channel_id_arg_ptr = untag_ptr(short_channel_id_arg);
+       CHECK_ACCESS(short_channel_id_arg_ptr);
+       LDKCOption_u64Z short_channel_id_arg_conv = *(LDKCOption_u64Z*)(short_channel_id_arg_ptr);
+       short_channel_id_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id_arg));
+       LDKMessageForwardNode ret_var = MessageForwardNode_new(node_id_arg_ref, short_channel_id_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelDerivationParameters_clone_ptr(LDKChannelDerivationParameters *NONNULL_PTR arg) {
-       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(arg);
+static inline uint64_t MessageForwardNode_clone_ptr(LDKMessageForwardNode *NONNULL_PTR arg) {
+       LDKMessageForwardNode ret_var = MessageForwardNode_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelDerivationParameters_clone_ptr(int64_t arg) {
-       LDKChannelDerivationParameters arg_conv;
+int64_t  CS_LDK_MessageForwardNode_clone_ptr(int64_t arg) {
+       LDKMessageForwardNode arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelDerivationParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = MessageForwardNode_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_clone(int64_t orig) {
-       LDKChannelDerivationParameters orig_conv;
+int64_t  CS_LDK_MessageForwardNode_clone(int64_t orig) {
+       LDKMessageForwardNode orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(&orig_conv);
+       LDKMessageForwardNode ret_var = MessageForwardNode_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelDerivationParameters_eq(int64_t a, int64_t b) {
-       LDKChannelDerivationParameters a_conv;
+int64_t  CS_LDK_MessageForwardNode_hash(int64_t o) {
+       LDKMessageForwardNode o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = MessageForwardNode_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_MessageForwardNode_eq(int64_t a, int64_t b) {
+       LDKMessageForwardNode a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKChannelDerivationParameters b_conv;
+       LDKMessageForwardNode b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = ChannelDerivationParameters_eq(&a_conv, &b_conv);
+       jboolean ret_conv = MessageForwardNode_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelDerivationParameters_write(int64_t obj) {
-       LDKChannelDerivationParameters obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelDerivationParameters_write(&obj_conv);
+void  CS_LDK_MessageContext_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageContext this_ptr_conv = *(LDKMessageContext*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageContext_free(this_ptr_conv);
+}
+
+static inline uint64_t MessageContext_clone_ptr(LDKMessageContext *NONNULL_PTR arg) {
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_MessageContext_clone_ptr(int64_t arg) {
+       LDKMessageContext* arg_conv = (LDKMessageContext*)untag_ptr(arg);
+       int64_t ret_conv = MessageContext_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_MessageContext_clone(int64_t orig) {
+       LDKMessageContext* orig_conv = (LDKMessageContext*)untag_ptr(orig);
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageContext_offers(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersContext a_conv = *(LDKOffersContext*)(a_ptr);
+       a_conv = OffersContext_clone((LDKOffersContext*)untag_ptr(a));
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_offers(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageContext_custom(int8_tArray a) {
+       LDKCVec_u8Z a_ref;
+       a_ref.datalen = a->arr_len;
+       a_ref.data = MALLOC(a_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(a_ref.data, a->elems, a_ref.datalen); FREE(a);
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_custom(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_OffersContext_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersContext this_ptr_conv = *(LDKOffersContext*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersContext_free(this_ptr_conv);
+}
+
+static inline uint64_t OffersContext_clone_ptr(LDKOffersContext *NONNULL_PTR arg) {
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_OffersContext_clone_ptr(int64_t arg) {
+       LDKOffersContext* arg_conv = (LDKOffersContext*)untag_ptr(arg);
+       int64_t ret_conv = OffersContext_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OffersContext_clone(int64_t orig) {
+       LDKOffersContext* orig_conv = (LDKOffersContext*)untag_ptr(orig);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersContext_invoice_request(int64_t nonce) {
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_invoice_request(nonce_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersContext_outbound_payment(int8_tArray payment_id, int64_t nonce, int8_tArray hmac) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes hmac_ref;
+       CHECK(hmac->arr_len == 32);
+       memcpy(hmac_ref.data, hmac->elems, 32); FREE(hmac);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_outbound_payment(payment_id_ref, nonce_conv, hmac_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersContext_inbound_payment(int8_tArray payment_hash) {
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_inbound_payment(payment_hash_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_OffersContext_eq(int64_t a, int64_t b) {
+       LDKOffersContext* a_conv = (LDKOffersContext*)untag_ptr(a);
+       LDKOffersContext* b_conv = (LDKOffersContext*)untag_ptr(b);
+       jboolean ret_conv = OffersContext_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_MessageContext_write(int64_t obj) {
+       LDKMessageContext* obj_conv = (LDKMessageContext*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = MessageContext_write(obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_read(int8_tArray ser) {
+int64_t  CS_LDK_MessageContext_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
-       *ret_conv = ChannelDerivationParameters_read(ser_ref);
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = MessageContext_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_HTLCDescriptor_free(int64_t this_obj) {
-       LDKHTLCDescriptor this_obj_conv;
+int8_tArray  CS_LDK_OffersContext_write(int64_t obj) {
+       LDKOffersContext* obj_conv = (LDKOffersContext*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = OffersContext_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_OffersContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = OffersContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_FundingInfo_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKFundingInfo this_ptr_conv = *(LDKFundingInfo*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       FundingInfo_free(this_ptr_conv);
+}
+
+static inline uint64_t FundingInfo_clone_ptr(LDKFundingInfo *NONNULL_PTR arg) {
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_FundingInfo_clone_ptr(int64_t arg) {
+       LDKFundingInfo* arg_conv = (LDKFundingInfo*)untag_ptr(arg);
+       int64_t ret_conv = FundingInfo_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_FundingInfo_clone(int64_t orig) {
+       LDKFundingInfo* orig_conv = (LDKFundingInfo*)untag_ptr(orig);
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FundingInfo_tx(int8_tArray transaction) {
+       LDKTransaction transaction_ref;
+       transaction_ref.datalen = transaction->arr_len;
+       transaction_ref.data = MALLOC(transaction_ref.datalen, "LDKTransaction Bytes");
+       memcpy(transaction_ref.data, transaction->elems, transaction_ref.datalen); FREE(transaction);
+       transaction_ref.data_is_owned = true;
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_tx(transaction_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FundingInfo_out_point(int64_t outpoint) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_out_point(outpoint_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_FundingInfo_eq(int64_t a, int64_t b) {
+       LDKFundingInfo* a_conv = (LDKFundingInfo*)untag_ptr(a);
+       LDKFundingInfo* b_conv = (LDKFundingInfo*)untag_ptr(b);
+       jboolean ret_conv = FundingInfo_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_FundingInfo_write(int64_t obj) {
+       LDKFundingInfo* obj_conv = (LDKFundingInfo*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = FundingInfo_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_FundingInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = FundingInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_PaymentPurpose_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPaymentPurpose this_ptr_conv = *(LDKPaymentPurpose*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PaymentPurpose_free(this_ptr_conv);
+}
+
+static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_PaymentPurpose_clone_ptr(int64_t arg) {
+       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)untag_ptr(arg);
+       int64_t ret_conv = PaymentPurpose_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_PaymentPurpose_clone(int64_t orig) {
+       LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)untag_ptr(orig);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_bolt11_invoice_payment(int64_t payment_preimage, int8_tArray payment_secret) {
+       void* payment_preimage_ptr = untag_ptr(payment_preimage);
+       CHECK_ACCESS(payment_preimage_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_bolt11_invoice_payment(payment_preimage_conv, payment_secret_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_bolt12_offer_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
+       void* payment_preimage_ptr = untag_ptr(payment_preimage);
+       CHECK_ACCESS(payment_preimage_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKBolt12OfferContext payment_context_conv;
+       payment_context_conv.inner = untag_ptr(payment_context);
+       payment_context_conv.is_owned = ptr_is_owned(payment_context);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
+       payment_context_conv = Bolt12OfferContext_clone(&payment_context_conv);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_bolt12_offer_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_bolt12_refund_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
+       void* payment_preimage_ptr = untag_ptr(payment_preimage);
+       CHECK_ACCESS(payment_preimage_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKBolt12RefundContext payment_context_conv;
+       payment_context_conv.inner = untag_ptr(payment_context);
+       payment_context_conv.is_owned = ptr_is_owned(payment_context);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
+       payment_context_conv = Bolt12RefundContext_clone(&payment_context_conv);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_bolt12_refund_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_spontaneous_payment(int8_tArray a) {
+       LDKThirtyTwoBytes a_ref;
+       CHECK(a->arr_len == 32);
+       memcpy(a_ref.data, a->elems, 32); FREE(a);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_spontaneous_payment(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_PaymentPurpose_eq(int64_t a, int64_t b) {
+       LDKPaymentPurpose* a_conv = (LDKPaymentPurpose*)untag_ptr(a);
+       LDKPaymentPurpose* b_conv = (LDKPaymentPurpose*)untag_ptr(b);
+       jboolean ret_conv = PaymentPurpose_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_PaymentPurpose_preimage(int64_t this_arg) {
+       LDKPaymentPurpose* this_arg_conv = (LDKPaymentPurpose*)untag_ptr(this_arg);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = PaymentPurpose_preimage(this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int8_tArray  CS_LDK_PaymentPurpose_write(int64_t obj) {
+       LDKPaymentPurpose* obj_conv = (LDKPaymentPurpose*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PaymentPurpose_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_PaymentPurpose_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentPurposeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPurposeDecodeErrorZ), "LDKCResult_PaymentPurposeDecodeErrorZ");
+       *ret_conv = PaymentPurpose_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_ClaimedHTLC_free(int64_t this_obj) {
+       LDKClaimedHTLC this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       HTLCDescriptor_free(this_obj_conv);
+       ClaimedHTLC_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int64_t  CS_LDK_ClaimedHTLC_get_channel_id(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters ret_var = HTLCDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
+       LDKChannelId ret_var = ClaimedHTLC_get_channel_id(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_HTLCDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_channel_id(int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters val_conv;
+       LDKChannelId val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelDerivationParameters_clone(&val_conv);
-       HTLCDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
+       val_conv = ChannelId_clone(&val_conv);
+       ClaimedHTLC_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_get_commitment_txid(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int8_tArray  CS_LDK_ClaimedHTLC_get_user_channel_id(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *HTLCDescriptor_get_commitment_txid(&this_ptr_conv), 32);
+       int8_tArray ret_arr = init_int8_tArray(16, __LINE__);
+       memcpy(ret_arr->elems, ClaimedHTLC_get_user_channel_id(&this_ptr_conv).le_bytes, 16);
        return ret_arr;
 }
 
-void  CS_LDK_HTLCDescriptor_set_commitment_txid(int64_t this_ptr, int8_tArray val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_user_channel_id(int64_t this_ptr, int8_tArray val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       HTLCDescriptor_set_commitment_txid(&this_ptr_conv, val_ref);
+       LDKU128 val_ref;
+       CHECK(val->arr_len == 16);
+       memcpy(val_ref.le_bytes, val->elems, 16); FREE(val);
+       ClaimedHTLC_set_user_channel_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_get_per_commitment_number(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int32_t  CS_LDK_ClaimedHTLC_get_cltv_expiry(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = HTLCDescriptor_get_per_commitment_number(&this_ptr_conv);
+       int32_t ret_conv = ClaimedHTLC_get_cltv_expiry(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_per_commitment_number(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_cltv_expiry(int64_t this_ptr, int32_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       HTLCDescriptor_set_per_commitment_number(&this_ptr_conv, val);
+       ClaimedHTLC_set_cltv_expiry(&this_ptr_conv, val);
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_get_per_commitment_point(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int64_t  CS_LDK_ClaimedHTLC_get_value_msat(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, HTLCDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       int64_t ret_conv = ClaimedHTLC_get_value_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_value_msat(int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       HTLCDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+       ClaimedHTLC_set_value_msat(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_HTLCDescriptor_get_feerate_per_kw(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int64_t  CS_LDK_ClaimedHTLC_get_counterparty_skimmed_fee_msat(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = HTLCDescriptor_get_feerate_per_kw(&this_ptr_conv);
+       int64_t ret_conv = ClaimedHTLC_get_counterparty_skimmed_fee_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_feerate_per_kw(int64_t this_ptr, int32_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_counterparty_skimmed_fee_msat(int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       HTLCDescriptor_set_feerate_per_kw(&this_ptr_conv, val);
+       ClaimedHTLC_set_counterparty_skimmed_fee_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_get_htlc(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKHTLCOutputInCommitment ret_var = HTLCDescriptor_get_htlc(&this_ptr_conv);
+int64_t  CS_LDK_ClaimedHTLC_new(int64_t channel_id_arg, int8_tArray user_channel_id_arg, int32_t cltv_expiry_arg, int64_t value_msat_arg, int64_t counterparty_skimmed_fee_msat_arg) {
+       LDKChannelId channel_id_arg_conv;
+       channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
+       channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
+       channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
+       LDKU128 user_channel_id_arg_ref;
+       CHECK(user_channel_id_arg->arr_len == 16);
+       memcpy(user_channel_id_arg_ref.le_bytes, user_channel_id_arg->elems, 16); FREE(user_channel_id_arg);
+       LDKClaimedHTLC ret_var = ClaimedHTLC_new(channel_id_arg_conv, user_channel_id_arg_ref, cltv_expiry_arg, value_msat_arg, counterparty_skimmed_fee_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_HTLCDescriptor_set_htlc(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKHTLCOutputInCommitment val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = HTLCOutputInCommitment_clone(&val_conv);
-       HTLCDescriptor_set_htlc(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_HTLCDescriptor_get_preimage(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
-       *ret_copy = HTLCDescriptor_get_preimage(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg) {
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_ClaimedHTLC_clone_ptr(int64_t arg) {
+       LDKClaimedHTLC arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ClaimedHTLC_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_HTLCDescriptor_set_preimage(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
-       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
-       HTLCDescriptor_set_preimage(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_ClaimedHTLC_clone(int64_t orig) {
+       LDKClaimedHTLC orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_get_counterparty_sig(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
-       memcpy(ret_arr->elems, HTLCDescriptor_get_counterparty_sig(&this_ptr_conv).compact_form, 64);
-       return ret_arr;
+jboolean  CS_LDK_ClaimedHTLC_eq(int64_t a, int64_t b) {
+       LDKClaimedHTLC a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKClaimedHTLC b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ClaimedHTLC_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_counterparty_sig(int64_t this_ptr, int8_tArray val) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKECDSASignature val_ref;
-       CHECK(val->arr_len == 64);
-       memcpy(val_ref.compact_form, val->elems, 64); FREE(val);
-       HTLCDescriptor_set_counterparty_sig(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_HTLCDescriptor_new(int64_t channel_derivation_parameters_arg, int8_tArray commitment_txid_arg, int64_t per_commitment_number_arg, int8_tArray per_commitment_point_arg, int32_t feerate_per_kw_arg, int64_t htlc_arg, int64_t preimage_arg, int8_tArray counterparty_sig_arg) {
-       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
-       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
-       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
-       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
-       LDKThirtyTwoBytes commitment_txid_arg_ref;
-       CHECK(commitment_txid_arg->arr_len == 32);
-       memcpy(commitment_txid_arg_ref.data, commitment_txid_arg->elems, 32); FREE(commitment_txid_arg);
-       LDKPublicKey per_commitment_point_arg_ref;
-       CHECK(per_commitment_point_arg->arr_len == 33);
-       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
-       LDKHTLCOutputInCommitment htlc_arg_conv;
-       htlc_arg_conv.inner = untag_ptr(htlc_arg);
-       htlc_arg_conv.is_owned = ptr_is_owned(htlc_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_arg_conv);
-       htlc_arg_conv = HTLCOutputInCommitment_clone(&htlc_arg_conv);
-       void* preimage_arg_ptr = untag_ptr(preimage_arg);
-       CHECK_ACCESS(preimage_arg_ptr);
-       LDKCOption_ThirtyTwoBytesZ preimage_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(preimage_arg_ptr);
-       preimage_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(preimage_arg));
-       LDKECDSASignature counterparty_sig_arg_ref;
-       CHECK(counterparty_sig_arg->arr_len == 64);
-       memcpy(counterparty_sig_arg_ref.compact_form, counterparty_sig_arg->elems, 64); FREE(counterparty_sig_arg);
-       LDKHTLCDescriptor ret_var = HTLCDescriptor_new(channel_derivation_parameters_arg_conv, commitment_txid_arg_ref, per_commitment_number_arg, per_commitment_point_arg_ref, feerate_per_kw_arg, htlc_arg_conv, preimage_arg_conv, counterparty_sig_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t HTLCDescriptor_clone_ptr(LDKHTLCDescriptor *NONNULL_PTR arg) {
-       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_HTLCDescriptor_clone_ptr(int64_t arg) {
-       LDKHTLCDescriptor arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = HTLCDescriptor_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_HTLCDescriptor_clone(int64_t orig) {
-       LDKHTLCDescriptor orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_HTLCDescriptor_eq(int64_t a, int64_t b) {
-       LDKHTLCDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKHTLCDescriptor b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = HTLCDescriptor_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_HTLCDescriptor_write(int64_t obj) {
-       LDKHTLCDescriptor obj_conv;
+int8_tArray  CS_LDK_ClaimedHTLC_write(int64_t obj) {
+       LDKClaimedHTLC obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = HTLCDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ClaimedHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_read(int8_tArray ser) {
+int64_t  CS_LDK_ClaimedHTLC_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
-       *ret_conv = HTLCDescriptor_read(ser_ref);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = ClaimedHTLC_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_outpoint(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutPoint ret_var = HTLCDescriptor_outpoint(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+void  CS_LDK_PathFailure_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPathFailure this_ptr_conv = *(LDKPathFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PathFailure_free(this_ptr_conv);
+}
+
+static inline uint64_t PathFailure_clone_ptr(LDKPathFailure *NONNULL_PTR arg) {
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_PathFailure_clone_ptr(int64_t arg) {
+       LDKPathFailure* arg_conv = (LDKPathFailure*)untag_ptr(arg);
+       int64_t ret_conv = PathFailure_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_HTLCDescriptor_previous_utxo(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = HTLCDescriptor_previous_utxo(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+int64_t  CS_LDK_PathFailure_clone(int64_t orig) {
+       LDKPathFailure* orig_conv = (LDKPathFailure*)untag_ptr(orig);
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_unsigned_tx_input(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
-       *ret_ref = HTLCDescriptor_unsigned_tx_input(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+int64_t  CS_LDK_PathFailure_initial_send(int64_t err) {
+       void* err_ptr = untag_ptr(err);
+       CHECK_ACCESS(err_ptr);
+       LDKAPIError err_conv = *(LDKAPIError*)(err_ptr);
+       err_conv = APIError_clone((LDKAPIError*)untag_ptr(err));
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_initial_send(err_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_tx_output(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = HTLCDescriptor_tx_output(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+int64_t  CS_LDK_PathFailure_on_path(int64_t network_update) {
+       void* network_update_ptr = untag_ptr(network_update);
+       CHECK_ACCESS(network_update_ptr);
+       LDKCOption_NetworkUpdateZ network_update_conv = *(LDKCOption_NetworkUpdateZ*)(network_update_ptr);
+       network_update_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)untag_ptr(network_update));
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_on_path(network_update_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_witness_script(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = HTLCDescriptor_witness_script(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_PathFailure_eq(int64_t a, int64_t b) {
+       LDKPathFailure* a_conv = (LDKPathFailure*)untag_ptr(a);
+       LDKPathFailure* b_conv = (LDKPathFailure*)untag_ptr(b);
+       jboolean ret_conv = PathFailure_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature, int8_tArray witness_script) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKECDSASignature signature_ref;
-       CHECK(signature->arr_len == 64);
-       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
-       LDKu8slice witness_script_ref;
-       witness_script_ref.datalen = witness_script->arr_len;
-       witness_script_ref.data = witness_script->elems;
-       LDKWitness ret_var = HTLCDescriptor_tx_input_witness(&this_arg_conv, signature_ref, witness_script_ref);
+int8_tArray  CS_LDK_PathFailure_write(int64_t obj) {
+       LDKPathFailure* obj_conv = (LDKPathFailure*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PathFailure_write(obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       Witness_free(ret_var);
-       FREE(witness_script);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
-       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = HTLCDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_PathFailure_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_PathFailureZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PathFailureZDecodeErrorZ), "LDKCResult_COption_PathFailureZDecodeErrorZ");
+       *ret_conv = PathFailure_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelSigner_free(int64_t this_ptr) {
+void  CS_LDK_ClosureReason_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
+       LDKClosureReason this_ptr_conv = *(LDKClosureReason*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       ChannelSigner_free(this_ptr_conv);
+       ClosureReason_free(this_ptr_conv);
 }
 
-int32_t  CS_LDK_Recipient_clone(int64_t orig) {
-       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
-       int32_t ret_conv = LDKRecipient_to_cs(Recipient_clone(orig_conv));
+static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_ClosureReason_clone_ptr(int64_t arg) {
+       LDKClosureReason* arg_conv = (LDKClosureReason*)untag_ptr(arg);
+       int64_t ret_conv = ClosureReason_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Recipient_node() {
-       int32_t ret_conv = LDKRecipient_to_cs(Recipient_node());
-       return ret_conv;
+int64_t  CS_LDK_ClosureReason_clone(int64_t orig) {
+       LDKClosureReason* orig_conv = (LDKClosureReason*)untag_ptr(orig);
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Recipient_phantom_node() {
-       int32_t ret_conv = LDKRecipient_to_cs(Recipient_phantom_node());
-       return ret_conv;
+int64_t  CS_LDK_ClosureReason_counterparty_force_closed(int64_t peer_msg) {
+       LDKUntrustedString peer_msg_conv;
+       peer_msg_conv.inner = untag_ptr(peer_msg);
+       peer_msg_conv.is_owned = ptr_is_owned(peer_msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_msg_conv);
+       peer_msg_conv = UntrustedString_clone(&peer_msg_conv);
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_counterparty_force_closed(peer_msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_EntropySource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EntropySource_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_holder_force_closed(int64_t broadcasted_latest_txn) {
+       void* broadcasted_latest_txn_ptr = untag_ptr(broadcasted_latest_txn);
+       CHECK_ACCESS(broadcasted_latest_txn_ptr);
+       LDKCOption_boolZ broadcasted_latest_txn_conv = *(LDKCOption_boolZ*)(broadcasted_latest_txn_ptr);
+       broadcasted_latest_txn_conv = COption_boolZ_clone((LDKCOption_boolZ*)untag_ptr(broadcasted_latest_txn));
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_holder_force_closed(broadcasted_latest_txn_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeSigner_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NodeSigner_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_legacy_cooperative_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_legacy_cooperative_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OutputSpender_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOutputSpender this_ptr_conv = *(LDKOutputSpender*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OutputSpender_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_counterparty_initiated_cooperative_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_counterparty_initiated_cooperative_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_SignerProvider_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignerProvider_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_locally_initiated_cooperative_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_locally_initiated_cooperative_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChangeDestinationSource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKChangeDestinationSource this_ptr_conv = *(LDKChangeDestinationSource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ChangeDestinationSource_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_commitment_tx_confirmed() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_commitment_tx_confirmed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_free(int64_t this_obj) {
-       LDKInMemorySigner this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InMemorySigner_free(this_obj_conv);
+int64_t  CS_LDK_ClosureReason_funding_timed_out() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_funding_timed_out();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_funding_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_funding_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_processing_error(jstring err) {
+       LDKStr err_conv = str_ref_to_owned_c(err);
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_processing_error(err_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_funding_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_disconnected_peer() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_disconnected_peer();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_revocation_base_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_revocation_base_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_outdated_channel_manager() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_outdated_channel_manager();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_revocation_base_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_counterparty_coop_closed_unfunded_channel() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_counterparty_coop_closed_unfunded_channel();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_payment_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_payment_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_funding_batch_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_funding_batch_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_payment_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_htlcs_timed_out() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_htlcs_timed_out();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_delayed_payment_base_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_peer_feerate_too_low(int32_t peer_feerate_sat_per_kw, int32_t required_feerate_sat_per_kw) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_peer_feerate_too_low(peer_feerate_sat_per_kw, required_feerate_sat_per_kw);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_delayed_payment_base_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
+jboolean  CS_LDK_ClosureReason_eq(int64_t a, int64_t b) {
+       LDKClosureReason* a_conv = (LDKClosureReason*)untag_ptr(a);
+       LDKClosureReason* b_conv = (LDKClosureReason*)untag_ptr(b);
+       jboolean ret_conv = ClosureReason_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_htlc_base_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_htlc_base_key(&this_ptr_conv), 32);
+jstring  CS_LDK_ClosureReason_to_str(int64_t o) {
+       LDKClosureReason* o_conv = (LDKClosureReason*)untag_ptr(o);
+       LDKStr ret_str = ClosureReason_to_str(o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_ClosureReason_write(int64_t obj) {
+       LDKClosureReason* obj_conv = (LDKClosureReason*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = ClosureReason_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_InMemorySigner_set_htlc_base_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = ClosureReason_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_commitment_seed(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_commitment_seed(&this_ptr_conv), 32);
-       return ret_arr;
+void  CS_LDK_HTLCDestination_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKHTLCDestination this_ptr_conv = *(LDKHTLCDestination*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       HTLCDestination_free(this_ptr_conv);
 }
 
-void  CS_LDK_InMemorySigner_set_commitment_seed(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
-}
-
-static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
-       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+static inline uint64_t HTLCDestination_clone_ptr(LDKHTLCDestination *NONNULL_PTR arg) {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_InMemorySigner_clone_ptr(int64_t arg) {
-       LDKInMemorySigner arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
+int64_t  CS_LDK_HTLCDestination_clone_ptr(int64_t arg) {
+       LDKHTLCDestination* arg_conv = (LDKHTLCDestination*)untag_ptr(arg);
+       int64_t ret_conv = HTLCDestination_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InMemorySigner_clone(int64_t orig) {
-       LDKInMemorySigner orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InMemorySigner_new(int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
-       LDKSecretKey funding_key_ref;
-       CHECK(funding_key->arr_len == 32);
-       memcpy(funding_key_ref.bytes, funding_key->elems, 32); FREE(funding_key);
-       LDKSecretKey revocation_base_key_ref;
-       CHECK(revocation_base_key->arr_len == 32);
-       memcpy(revocation_base_key_ref.bytes, revocation_base_key->elems, 32); FREE(revocation_base_key);
-       LDKSecretKey payment_key_ref;
-       CHECK(payment_key->arr_len == 32);
-       memcpy(payment_key_ref.bytes, payment_key->elems, 32); FREE(payment_key);
-       LDKSecretKey delayed_payment_base_key_ref;
-       CHECK(delayed_payment_base_key->arr_len == 32);
-       memcpy(delayed_payment_base_key_ref.bytes, delayed_payment_base_key->elems, 32); FREE(delayed_payment_base_key);
-       LDKSecretKey htlc_base_key_ref;
-       CHECK(htlc_base_key->arr_len == 32);
-       memcpy(htlc_base_key_ref.bytes, htlc_base_key->elems, 32); FREE(htlc_base_key);
-       LDKThirtyTwoBytes commitment_seed_ref;
-       CHECK(commitment_seed->arr_len == 32);
-       memcpy(commitment_seed_ref.data, commitment_seed->elems, 32); FREE(commitment_seed);
-       LDKThirtyTwoBytes channel_keys_id_ref;
-       CHECK(channel_keys_id->arr_len == 32);
-       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
-       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
-       CHECK(rand_bytes_unique_start->arr_len == 32);
-       memcpy(rand_bytes_unique_start_ref.data, rand_bytes_unique_start->elems, 32); FREE(rand_bytes_unique_start);
-       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InMemorySigner_counterparty_pubkeys(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InMemorySigner_counterparty_selected_contest_delay(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
+int64_t  CS_LDK_HTLCDestination_clone(int64_t orig) {
+       LDKHTLCDestination* orig_conv = (LDKHTLCDestination*)untag_ptr(orig);
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_holder_selected_contest_delay(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
+int64_t  CS_LDK_HTLCDestination_next_hop_channel(int8_tArray node_id, int64_t channel_id) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_next_hop_channel(node_id_ref, channel_id_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_is_outbound(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
-       *ret_copy = InMemorySigner_is_outbound(&this_arg_conv);
+int64_t  CS_LDK_HTLCDestination_unknown_next_hop(int64_t requested_forward_scid) {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_unknown_next_hop(requested_forward_scid);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_funding_outpoint(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_HTLCDestination_invalid_forward(int64_t requested_forward_scid) {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_invalid_forward(requested_forward_scid);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_get_channel_parameters(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_HTLCDestination_invalid_onion() {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_invalid_onion();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_channel_type_features(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_HTLCDestination_failed_payment(int8_tArray payment_hash) {
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_failed_payment(payment_hash_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_sign_counterparty_payment_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = spend_tx->arr_len;
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
-       spend_tx_ref.data_is_owned = true;
-       LDKStaticPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
-       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_sign_dynamic_p2wsh_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = spend_tx->arr_len;
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
-       spend_tx_ref.data_is_owned = true;
-       LDKDelayedPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
-       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_EntropySource(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_ChannelSigner(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
-       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_EcdsaChannelSigner(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_WriteableEcdsaChannelSigner(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_WriteableEcdsaChannelSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jboolean  CS_LDK_HTLCDestination_eq(int64_t a, int64_t b) {
+       LDKHTLCDestination* a_conv = (LDKHTLCDestination*)untag_ptr(a);
+       LDKHTLCDestination* b_conv = (LDKHTLCDestination*)untag_ptr(b);
+       jboolean ret_conv = HTLCDestination_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_write(int64_t obj) {
-       LDKInMemorySigner obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
+int8_tArray  CS_LDK_HTLCDestination_write(int64_t obj) {
+       LDKHTLCDestination* obj_conv = (LDKHTLCDestination*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = HTLCDestination_write(obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InMemorySigner_read(int8_tArray ser, int64_t arg) {
+int64_t  CS_LDK_HTLCDestination_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
-       if (arg_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&arg_conv);
-       }
-       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
-       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
+       LDKCResult_COption_HTLCDestinationZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_HTLCDestinationZDecodeErrorZ), "LDKCResult_COption_HTLCDestinationZDecodeErrorZ");
+       *ret_conv = HTLCDestination_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_KeysManager_free(int64_t this_obj) {
-       LDKKeysManager this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       KeysManager_free(this_obj_conv);
+int32_t  CS_LDK_PaymentFailureReason_clone(int64_t orig) {
+       LDKPaymentFailureReason* orig_conv = (LDKPaymentFailureReason*)untag_ptr(orig);
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_clone(orig_conv));
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
-       uint8_t seed_arr[32];
-       CHECK(seed->arr_len == 32);
-       memcpy(seed_arr, seed->elems, 32); FREE(seed);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_PaymentFailureReason_recipient_rejected() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_recipient_rejected());
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_KeysManager_get_node_secret_key(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, KeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
-       return ret_arr;
+int32_t  CS_LDK_PaymentFailureReason_user_abandoned() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_user_abandoned());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       uint8_t params_arr[32];
-       CHECK(params->arr_len == 32);
-       memcpy(params_arr, params->elems, 32); FREE(params);
-       uint8_t (*params_ref)[32] = &params_arr;
-       LDKInMemorySigner ret_var = KeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_PaymentFailureReason_retries_exhausted() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_retries_exhausted());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_sign_spendable_outputs_psbt(int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = descriptors->arr_len;
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = descriptors->elems;
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       FREE(descriptors);
-       LDKCVec_u8Z psbt_ref;
-       psbt_ref.datalen = psbt->arr_len;
-       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(psbt_ref.data, psbt->elems, psbt_ref.datalen); FREE(psbt);
-       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
-       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_PaymentFailureReason_payment_expired() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_payment_expired());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_EntropySource(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_route_not_found() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_route_not_found());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_NodeSigner(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_unexpected_error() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_unexpected_error());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_OutputSpender(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
-       *ret_ret = KeysManager_as_OutputSpender(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_unknown_required_features() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_unknown_required_features());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_SignerProvider(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_invoice_request_expired() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_invoice_request_expired());
+       return ret_conv;
 }
 
-void  CS_LDK_PhantomKeysManager_free(int64_t this_obj) {
-       LDKPhantomKeysManager this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PhantomKeysManager_free(this_obj_conv);
+int32_t  CS_LDK_PaymentFailureReason_invoice_request_rejected() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_invoice_request_rejected());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_EntropySource(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jboolean  CS_LDK_PaymentFailureReason_eq(int64_t a, int64_t b) {
+       LDKPaymentFailureReason* a_conv = (LDKPaymentFailureReason*)untag_ptr(a);
+       LDKPaymentFailureReason* b_conv = (LDKPaymentFailureReason*)untag_ptr(b);
+       jboolean ret_conv = PaymentFailureReason_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_NodeSigner(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int8_tArray  CS_LDK_PaymentFailureReason_write(int64_t obj) {
+       LDKPaymentFailureReason* obj_conv = (LDKPaymentFailureReason*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PaymentFailureReason_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_OutputSpender(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
-       *ret_ret = PhantomKeysManager_as_OutputSpender(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_PaymentFailureReason_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = PaymentFailureReason_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_SignerProvider(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_Event_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEvent this_ptr_conv = *(LDKEvent*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Event_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_PhantomKeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
-       uint8_t seed_arr[32];
-       CHECK(seed->arr_len == 32);
-       memcpy(seed_arr, seed->elems, 32); FREE(seed);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       uint8_t cross_node_seed_arr[32];
-       CHECK(cross_node_seed->arr_len == 32);
-       memcpy(cross_node_seed_arr, cross_node_seed->elems, 32); FREE(cross_node_seed);
-       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
-       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_Event_clone_ptr(int64_t arg) {
+       LDKEvent* arg_conv = (LDKEvent*)untag_ptr(arg);
+       int64_t ret_conv = Event_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_PhantomKeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       uint8_t params_arr[32];
-       CHECK(params->arr_len == 32);
-       memcpy(params_arr, params->elems, 32); FREE(params);
-       uint8_t (*params_ref)[32] = &params_arr;
-       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_clone(int64_t orig) {
+       LDKEvent* orig_conv = (LDKEvent*)untag_ptr(orig);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_PhantomKeysManager_get_node_secret_key(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_PhantomKeysManager_get_phantom_node_secret_key(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes, 32);
-       return ret_arr;
-}
-
-void  CS_LDK_RandomBytes_free(int64_t this_obj) {
-       LDKRandomBytes this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RandomBytes_free(this_obj_conv);
+int64_t  CS_LDK_Event_funding_generation_ready(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t channel_value_satoshis, int8_tArray output_script, int8_tArray user_channel_id) {
+       LDKChannelId temporary_channel_id_conv;
+       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
+       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKCVec_u8Z output_script_ref;
+       output_script_ref.datalen = output_script->arr_len;
+       output_script_ref.data = MALLOC(output_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(output_script_ref.data, output_script->elems, output_script_ref.datalen); FREE(output_script);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_funding_generation_ready(temporary_channel_id_conv, counterparty_node_id_ref, channel_value_satoshis, output_script_ref, user_channel_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_RandomBytes_new(int8_tArray seed) {
-       LDKThirtyTwoBytes seed_ref;
-       CHECK(seed->arr_len == 32);
-       memcpy(seed_ref.data, seed->elems, 32); FREE(seed);
-       LDKRandomBytes ret_var = RandomBytes_new(seed_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_funding_tx_broadcast_safe(int64_t channel_id, int8_tArray user_channel_id, int64_t funding_txo, int8_tArray counterparty_node_id, int64_t former_temporary_channel_id) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKOutPoint funding_txo_conv;
+       funding_txo_conv.inner = untag_ptr(funding_txo);
+       funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
+       funding_txo_conv = OutPoint_clone(&funding_txo_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKChannelId former_temporary_channel_id_conv;
+       former_temporary_channel_id_conv.inner = untag_ptr(former_temporary_channel_id);
+       former_temporary_channel_id_conv.is_owned = ptr_is_owned(former_temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_conv);
+       former_temporary_channel_id_conv = ChannelId_clone(&former_temporary_channel_id_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_funding_tx_broadcast_safe(channel_id_conv, user_channel_id_ref, funding_txo_conv, counterparty_node_id_ref, former_temporary_channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RandomBytes_as_EntropySource(int64_t this_arg) {
-       LDKRandomBytes this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = RandomBytes_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_Event_payment_claimable(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int64_t via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
+       LDKPublicKey receiver_node_id_ref;
+       CHECK(receiver_node_id->arr_len == 33);
+       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKRecipientOnionFields onion_fields_conv;
+       onion_fields_conv.inner = untag_ptr(onion_fields);
+       onion_fields_conv.is_owned = ptr_is_owned(onion_fields);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_conv);
+       onion_fields_conv = RecipientOnionFields_clone(&onion_fields_conv);
+       void* purpose_ptr = untag_ptr(purpose);
+       CHECK_ACCESS(purpose_ptr);
+       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
+       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
+       LDKChannelId via_channel_id_conv;
+       via_channel_id_conv.inner = untag_ptr(via_channel_id);
+       via_channel_id_conv.is_owned = ptr_is_owned(via_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(via_channel_id_conv);
+       via_channel_id_conv = ChannelId_clone(&via_channel_id_conv);
+       void* via_user_channel_id_ptr = untag_ptr(via_user_channel_id);
+       CHECK_ACCESS(via_user_channel_id_ptr);
+       LDKCOption_U128Z via_user_channel_id_conv = *(LDKCOption_U128Z*)(via_user_channel_id_ptr);
+       via_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(via_user_channel_id));
+       void* claim_deadline_ptr = untag_ptr(claim_deadline);
+       CHECK_ACCESS(claim_deadline_ptr);
+       LDKCOption_u32Z claim_deadline_conv = *(LDKCOption_u32Z*)(claim_deadline_ptr);
+       claim_deadline_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(claim_deadline));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_conv, via_user_channel_id_conv, claim_deadline_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_EcdsaChannelSigner_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EcdsaChannelSigner_free(this_ptr_conv);
+int64_t  CS_LDK_Event_payment_claimed(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose, int64_tArray htlcs, int64_t sender_intended_total_msat, int64_t onion_fields) {
+       LDKPublicKey receiver_node_id_ref;
+       CHECK(receiver_node_id->arr_len == 33);
+       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* purpose_ptr = untag_ptr(purpose);
+       CHECK_ACCESS(purpose_ptr);
+       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
+       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
+       LDKCVec_ClaimedHTLCZ htlcs_constr;
+       htlcs_constr.datalen = htlcs->arr_len;
+       if (htlcs_constr.datalen > 0)
+               htlcs_constr.data = MALLOC(htlcs_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
+       else
+               htlcs_constr.data = NULL;
+       int64_t* htlcs_vals = htlcs->elems;
+       for (size_t n = 0; n < htlcs_constr.datalen; n++) {
+               int64_t htlcs_conv_13 = htlcs_vals[n];
+               LDKClaimedHTLC htlcs_conv_13_conv;
+               htlcs_conv_13_conv.inner = untag_ptr(htlcs_conv_13);
+               htlcs_conv_13_conv.is_owned = ptr_is_owned(htlcs_conv_13);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_conv);
+               htlcs_conv_13_conv = ClaimedHTLC_clone(&htlcs_conv_13_conv);
+               htlcs_constr.data[n] = htlcs_conv_13_conv;
+       }
+       FREE(htlcs);
+       void* sender_intended_total_msat_ptr = untag_ptr(sender_intended_total_msat);
+       CHECK_ACCESS(sender_intended_total_msat_ptr);
+       LDKCOption_u64Z sender_intended_total_msat_conv = *(LDKCOption_u64Z*)(sender_intended_total_msat_ptr);
+       sender_intended_total_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(sender_intended_total_msat));
+       LDKRecipientOnionFields onion_fields_conv;
+       onion_fields_conv.inner = untag_ptr(onion_fields);
+       onion_fields_conv.is_owned = ptr_is_owned(onion_fields);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_conv);
+       onion_fields_conv = RecipientOnionFields_clone(&onion_fields_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv, htlcs_constr, sender_intended_total_msat_conv, onion_fields_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg) {
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(arg);
-       return tag_ptr(ret_ret, true);
-}
-int64_t  CS_LDK_WriteableEcdsaChannelSigner_clone_ptr(int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKWriteableEcdsaChannelSigner* arg_conv = (LDKWriteableEcdsaChannelSigner*)arg_ptr;
-       int64_t ret_conv = WriteableEcdsaChannelSigner_clone_ptr(arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_Event_connection_needed(int8_tArray node_id, int64_tArray addresses) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKCVec_SocketAddressZ addresses_constr;
+       addresses_constr.datalen = addresses->arr_len;
+       if (addresses_constr.datalen > 0)
+               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
+       else
+               addresses_constr.data = NULL;
+       int64_t* addresses_vals = addresses->elems;
+       for (size_t p = 0; p < addresses_constr.datalen; p++) {
+               int64_t addresses_conv_15 = addresses_vals[p];
+               void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
+               CHECK_ACCESS(addresses_conv_15_ptr);
+               LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
+               addresses_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_conv_15));
+               addresses_constr.data[p] = addresses_conv_15_conv;
+       }
+       FREE(addresses);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_connection_needed(node_id_ref, addresses_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_WriteableEcdsaChannelSigner_clone(int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKWriteableEcdsaChannelSigner* orig_conv = (LDKWriteableEcdsaChannelSigner*)orig_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_Event_invoice_received(int8_tArray payment_id, int64_t invoice, int64_t context, int64_t responder) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv = Bolt12Invoice_clone(&invoice_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKCOption_OffersContextZ context_conv = *(LDKCOption_OffersContextZ*)(context_ptr);
+       context_conv = COption_OffersContextZ_clone((LDKCOption_OffersContextZ*)untag_ptr(context));
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_invoice_received(payment_id_ref, invoice_conv, context_conv, responder_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_WriteableEcdsaChannelSigner_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableEcdsaChannelSigner this_ptr_conv = *(LDKWriteableEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableEcdsaChannelSigner_free(this_ptr_conv);
+int64_t  CS_LDK_Event_payment_sent(int64_t payment_id, int8_tArray payment_preimage, int8_tArray payment_hash, int64_t fee_paid_msat) {
+       void* payment_id_ptr = untag_ptr(payment_id);
+       CHECK_ACCESS(payment_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
+       LDKThirtyTwoBytes payment_preimage_ref;
+       CHECK(payment_preimage->arr_len == 32);
+       memcpy(payment_preimage_ref.data, payment_preimage->elems, 32); FREE(payment_preimage);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* fee_paid_msat_ptr = untag_ptr(fee_paid_msat);
+       CHECK_ACCESS(fee_paid_msat_ptr);
+       LDKCOption_u64Z fee_paid_msat_conv = *(LDKCOption_u64Z*)(fee_paid_msat_ptr);
+       fee_paid_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(fee_paid_msat));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_sent(payment_id_conv, payment_preimage_ref, payment_hash_ref, fee_paid_msat_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OnionMessenger_free(int64_t this_obj) {
-       LDKOnionMessenger this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessenger_free(this_obj_conv);
+int64_t  CS_LDK_Event_payment_failed(int8_tArray payment_id, int64_t payment_hash, int64_t reason) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       void* reason_ptr = untag_ptr(reason);
+       CHECK_ACCESS(reason_ptr);
+       LDKCOption_PaymentFailureReasonZ reason_conv = *(LDKCOption_PaymentFailureReasonZ*)(reason_ptr);
+       reason_conv = COption_PaymentFailureReasonZ_clone((LDKCOption_PaymentFailureReasonZ*)untag_ptr(reason));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_failed(payment_id_ref, payment_hash_conv, reason_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_MessageRouter_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageRouter_free(this_ptr_conv);
+int64_t  CS_LDK_Event_payment_path_successful(int8_tArray payment_id, int64_t payment_hash, int64_t path) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_path_successful(payment_id_ref, payment_hash_conv, path_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_DefaultMessageRouter_free(int64_t this_obj) {
-       LDKDefaultMessageRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultMessageRouter_free(this_obj_conv);
+int64_t  CS_LDK_Event_payment_path_failed(int64_t payment_id, int8_tArray payment_hash, jboolean payment_failed_permanently, int64_t failure, int64_t path, int64_t short_channel_id) {
+       void* payment_id_ptr = untag_ptr(payment_id);
+       CHECK_ACCESS(payment_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* failure_ptr = untag_ptr(failure);
+       CHECK_ACCESS(failure_ptr);
+       LDKPathFailure failure_conv = *(LDKPathFailure*)(failure_ptr);
+       failure_conv = PathFailure_clone((LDKPathFailure*)untag_ptr(failure));
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       void* short_channel_id_ptr = untag_ptr(short_channel_id);
+       CHECK_ACCESS(short_channel_id_ptr);
+       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
+       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_path_failed(payment_id_conv, payment_hash_ref, payment_failed_permanently, failure_conv, path_conv, short_channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_DefaultMessageRouter_new(int64_t network_graph, int64_t entropy_source) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new(&network_graph_conv, entropy_source_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_probe_successful(int8_tArray payment_id, int8_tArray payment_hash, int64_t path) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_probe_successful(payment_id_ref, payment_hash_ref, path_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DefaultMessageRouter_as_MessageRouter(int64_t this_arg) {
-       LDKDefaultMessageRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
-       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_Event_probe_failed(int8_tArray payment_id, int8_tArray payment_hash, int64_t path, int64_t short_channel_id) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       void* short_channel_id_ptr = untag_ptr(short_channel_id);
+       CHECK_ACCESS(short_channel_id_ptr);
+       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
+       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_probe_failed(payment_id_ref, payment_hash_ref, path_conv, short_channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_free(int64_t this_obj) {
-       LDKOnionMessagePath this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessagePath_free(this_obj_conv);
+int64_t  CS_LDK_Event_pending_htlcs_forwardable(int64_t time_forwardable) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_pending_htlcs_forwardable(time_forwardable);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-ptrArray  CS_LDK_OnionMessagePath_get_intermediate_nodes(int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&this_ptr_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(33, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].compressed_form, 33);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+int64_t  CS_LDK_Event_htlcintercepted(int8_tArray intercept_id, int64_t requested_next_hop_scid, int8_tArray payment_hash, int64_t inbound_amount_msat, int64_t expected_outbound_amount_msat) {
+       LDKThirtyTwoBytes intercept_id_ref;
+       CHECK(intercept_id->arr_len == 32);
+       memcpy(intercept_id_ref.data, intercept_id->elems, 32); FREE(intercept_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_htlcintercepted(intercept_id_ref, requested_next_hop_scid, payment_hash_ref, inbound_amount_msat, expected_outbound_amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_set_intermediate_nodes(int64_t this_ptr, ptrArray val) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+int64_t  CS_LDK_Event_spendable_outputs(int64_tArray outputs, int64_t channel_id) {
+       LDKCVec_SpendableOutputDescriptorZ outputs_constr;
+       outputs_constr.datalen = outputs->arr_len;
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
        else
-               val_constr.data = NULL;
-       int8_tArray* val_vals = (void*) val->elems;
-       for (size_t i = 0; i < val_constr.datalen; i++) {
-               int8_tArray val_conv_8 = val_vals[i];
-               LDKPublicKey val_conv_8_ref;
-               CHECK(val_conv_8->arr_len == 33);
-               memcpy(val_conv_8_ref.compressed_form, val_conv_8->elems, 33); FREE(val_conv_8);
-               val_constr.data[i] = val_conv_8_ref;
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = outputs->elems;
+       for (size_t b = 0; b < outputs_constr.datalen; b++) {
+               int64_t outputs_conv_27 = outputs_vals[b];
+               void* outputs_conv_27_ptr = untag_ptr(outputs_conv_27);
+               CHECK_ACCESS(outputs_conv_27_ptr);
+               LDKSpendableOutputDescriptor outputs_conv_27_conv = *(LDKSpendableOutputDescriptor*)(outputs_conv_27_ptr);
+               outputs_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(outputs_conv_27));
+               outputs_constr.data[b] = outputs_conv_27_conv;
        }
-       FREE(val);
-       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
+       FREE(outputs);
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_spendable_outputs(outputs_constr, channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessagePath_get_destination(int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
+int64_t  CS_LDK_Event_payment_forwarded(int64_t prev_channel_id, int64_t next_channel_id, int64_t prev_user_channel_id, int64_t next_user_channel_id, int64_t total_fee_earned_msat, int64_t skimmed_fee_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
+       LDKChannelId prev_channel_id_conv;
+       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
+       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
+       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
+       LDKChannelId next_channel_id_conv;
+       next_channel_id_conv.inner = untag_ptr(next_channel_id);
+       next_channel_id_conv.is_owned = ptr_is_owned(next_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(next_channel_id_conv);
+       next_channel_id_conv = ChannelId_clone(&next_channel_id_conv);
+       void* prev_user_channel_id_ptr = untag_ptr(prev_user_channel_id);
+       CHECK_ACCESS(prev_user_channel_id_ptr);
+       LDKCOption_U128Z prev_user_channel_id_conv = *(LDKCOption_U128Z*)(prev_user_channel_id_ptr);
+       prev_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(prev_user_channel_id));
+       void* next_user_channel_id_ptr = untag_ptr(next_user_channel_id);
+       CHECK_ACCESS(next_user_channel_id_ptr);
+       LDKCOption_U128Z next_user_channel_id_conv = *(LDKCOption_U128Z*)(next_user_channel_id_ptr);
+       next_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(next_user_channel_id));
+       void* total_fee_earned_msat_ptr = untag_ptr(total_fee_earned_msat);
+       CHECK_ACCESS(total_fee_earned_msat_ptr);
+       LDKCOption_u64Z total_fee_earned_msat_conv = *(LDKCOption_u64Z*)(total_fee_earned_msat_ptr);
+       total_fee_earned_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(total_fee_earned_msat));
+       void* skimmed_fee_msat_ptr = untag_ptr(skimmed_fee_msat);
+       CHECK_ACCESS(skimmed_fee_msat_ptr);
+       LDKCOption_u64Z skimmed_fee_msat_conv = *(LDKCOption_u64Z*)(skimmed_fee_msat_ptr);
+       skimmed_fee_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(skimmed_fee_msat));
+       void* outbound_amount_forwarded_msat_ptr = untag_ptr(outbound_amount_forwarded_msat);
+       CHECK_ACCESS(outbound_amount_forwarded_msat_ptr);
+       LDKCOption_u64Z outbound_amount_forwarded_msat_conv = *(LDKCOption_u64Z*)(outbound_amount_forwarded_msat_ptr);
+       outbound_amount_forwarded_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(outbound_amount_forwarded_msat));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_forwarded(prev_channel_id_conv, next_channel_id_conv, prev_user_channel_id_conv, next_user_channel_id_conv, total_fee_earned_msat_conv, skimmed_fee_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_set_destination(int64_t this_ptr, int64_t val) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
-       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
-       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_OnionMessagePath_get_first_node_addresses(int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
-       *ret_copy = OnionMessagePath_get_first_node_addresses(&this_ptr_conv);
+int64_t  CS_LDK_Event_channel_pending(int64_t channel_id, int8_tArray user_channel_id, int64_t former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo, int64_t channel_type) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKChannelId former_temporary_channel_id_conv;
+       former_temporary_channel_id_conv.inner = untag_ptr(former_temporary_channel_id);
+       former_temporary_channel_id_conv.is_owned = ptr_is_owned(former_temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_conv);
+       former_temporary_channel_id_conv = ChannelId_clone(&former_temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKOutPoint funding_txo_conv;
+       funding_txo_conv.inner = untag_ptr(funding_txo);
+       funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
+       funding_txo_conv = OutPoint_clone(&funding_txo_conv);
+       LDKChannelTypeFeatures channel_type_conv;
+       channel_type_conv.inner = untag_ptr(channel_type);
+       channel_type_conv.is_owned = ptr_is_owned(channel_type);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
+       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_channel_pending(channel_id_conv, user_channel_id_ref, former_temporary_channel_id_conv, counterparty_node_id_ref, funding_txo_conv, channel_type_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_set_first_node_addresses(int64_t this_ptr, int64_t val) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_SocketAddressZZ val_conv = *(LDKCOption_CVec_SocketAddressZZ*)(val_ptr);
-       val_conv = COption_CVec_SocketAddressZZ_clone((LDKCOption_CVec_SocketAddressZZ*)untag_ptr(val));
-       OnionMessagePath_set_first_node_addresses(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_OnionMessagePath_new(ptrArray intermediate_nodes_arg, int64_t destination_arg, int64_t first_node_addresses_arg) {
-       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
-       intermediate_nodes_arg_constr.datalen = intermediate_nodes_arg->arr_len;
-       if (intermediate_nodes_arg_constr.datalen > 0)
-               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               intermediate_nodes_arg_constr.data = NULL;
-       int8_tArray* intermediate_nodes_arg_vals = (void*) intermediate_nodes_arg->elems;
-       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
-               int8_tArray intermediate_nodes_arg_conv_8 = intermediate_nodes_arg_vals[i];
-               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
-               CHECK(intermediate_nodes_arg_conv_8->arr_len == 33);
-               memcpy(intermediate_nodes_arg_conv_8_ref.compressed_form, intermediate_nodes_arg_conv_8->elems, 33); FREE(intermediate_nodes_arg_conv_8);
-               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
-       }
-       FREE(intermediate_nodes_arg);
-       void* destination_arg_ptr = untag_ptr(destination_arg);
-       CHECK_ACCESS(destination_arg_ptr);
-       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
-       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
-       void* first_node_addresses_arg_ptr = untag_ptr(first_node_addresses_arg);
-       CHECK_ACCESS(first_node_addresses_arg_ptr);
-       LDKCOption_CVec_SocketAddressZZ first_node_addresses_arg_conv = *(LDKCOption_CVec_SocketAddressZZ*)(first_node_addresses_arg_ptr);
-       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv, first_node_addresses_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_channel_ready(int64_t channel_id, int8_tArray user_channel_id, int8_tArray counterparty_node_id, int64_t channel_type) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKChannelTypeFeatures channel_type_conv;
+       channel_type_conv.inner = untag_ptr(channel_type);
+       channel_type_conv.is_owned = ptr_is_owned(channel_type);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
+       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_channel_ready(channel_id_conv, user_channel_id_ref, counterparty_node_id_ref, channel_type_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_channel_closed(int64_t channel_id, int8_tArray user_channel_id, int64_t reason, int8_tArray counterparty_node_id, int64_t channel_capacity_sats, int64_t channel_funding_txo) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       void* reason_ptr = untag_ptr(reason);
+       CHECK_ACCESS(reason_ptr);
+       LDKClosureReason reason_conv = *(LDKClosureReason*)(reason_ptr);
+       reason_conv = ClosureReason_clone((LDKClosureReason*)untag_ptr(reason));
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       void* channel_capacity_sats_ptr = untag_ptr(channel_capacity_sats);
+       CHECK_ACCESS(channel_capacity_sats_ptr);
+       LDKCOption_u64Z channel_capacity_sats_conv = *(LDKCOption_u64Z*)(channel_capacity_sats_ptr);
+       channel_capacity_sats_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(channel_capacity_sats));
+       LDKOutPoint channel_funding_txo_conv;
+       channel_funding_txo_conv.inner = untag_ptr(channel_funding_txo);
+       channel_funding_txo_conv.is_owned = ptr_is_owned(channel_funding_txo);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_txo_conv);
+       channel_funding_txo_conv = OutPoint_clone(&channel_funding_txo_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_channel_closed(channel_id_conv, user_channel_id_ref, reason_conv, counterparty_node_id_ref, channel_capacity_sats_conv, channel_funding_txo_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_OnionMessagePath_clone_ptr(int64_t arg) {
-       LDKOnionMessagePath arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_OnionMessagePath_clone(int64_t orig) {
-       LDKOnionMessagePath orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_discard_funding(int64_t channel_id, int64_t funding_info) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       void* funding_info_ptr = untag_ptr(funding_info);
+       CHECK_ACCESS(funding_info_ptr);
+       LDKFundingInfo funding_info_conv = *(LDKFundingInfo*)(funding_info_ptr);
+       funding_info_conv = FundingInfo_clone((LDKFundingInfo*)untag_ptr(funding_info));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_discard_funding(channel_id_conv, funding_info_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_OnionMessagePath_first_node(int64_t this_arg) {
-       LDKOnionMessagePath this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, OnionMessagePath_first_node(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_Destination_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Destination_free(this_ptr_conv);
+int64_t  CS_LDK_Event_open_channel_request(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_satoshis, int64_t push_msat, int64_t channel_type, jboolean is_announced, int64_t params) {
+       LDKChannelId temporary_channel_id_conv;
+       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
+       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKChannelTypeFeatures channel_type_conv;
+       channel_type_conv.inner = untag_ptr(channel_type);
+       channel_type_conv.is_owned = ptr_is_owned(channel_type);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
+       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
+       LDKChannelParameters params_conv;
+       params_conv.inner = untag_ptr(params);
+       params_conv.is_owned = ptr_is_owned(params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
+       params_conv = ChannelParameters_clone(&params_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_open_channel_request(temporary_channel_id_conv, counterparty_node_id_ref, funding_satoshis, push_msat, channel_type_conv, is_announced, params_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(arg);
+int64_t  CS_LDK_Event_htlchandling_failed(int64_t prev_channel_id, int64_t failed_next_destination) {
+       LDKChannelId prev_channel_id_conv;
+       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
+       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
+       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
+       void* failed_next_destination_ptr = untag_ptr(failed_next_destination);
+       CHECK_ACCESS(failed_next_destination_ptr);
+       LDKHTLCDestination failed_next_destination_conv = *(LDKHTLCDestination*)(failed_next_destination_ptr);
+       failed_next_destination_conv = HTLCDestination_clone((LDKHTLCDestination*)untag_ptr(failed_next_destination));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_htlchandling_failed(prev_channel_id_conv, failed_next_destination_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_Destination_clone_ptr(int64_t arg) {
-       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
-       int64_t ret_conv = Destination_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Destination_clone(int64_t orig) {
-       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(orig_conv);
+int64_t  CS_LDK_Event_bump_transaction(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKBumpTransactionEvent a_conv = *(LDKBumpTransactionEvent*)(a_ptr);
+       a_conv = BumpTransactionEvent_clone((LDKBumpTransactionEvent*)untag_ptr(a));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_bump_transaction(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Destination_node(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_node(a_ref);
+int64_t  CS_LDK_Event_onion_message_intercepted(int8_tArray peer_node_id, int64_t message) {
+       LDKPublicKey peer_node_id_ref;
+       CHECK(peer_node_id->arr_len == 33);
+       memcpy(peer_node_id_ref.compressed_form, peer_node_id->elems, 33); FREE(peer_node_id);
+       LDKOnionMessage message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = OnionMessage_clone(&message_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_onion_message_intercepted(peer_node_id_ref, message_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Destination_blinded_path(int64_t a) {
-       LDKBlindedPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPath_clone(&a_conv);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_blinded_path(a_conv);
+int64_t  CS_LDK_Event_onion_message_peer_connected(int8_tArray peer_node_id) {
+       LDKPublicKey peer_node_id_ref;
+       CHECK(peer_node_id->arr_len == 33);
+       memcpy(peer_node_id_ref.compressed_form, peer_node_id->elems, 33); FREE(peer_node_id);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_onion_message_peer_connected(peer_node_id_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Destination_hash(int64_t o) {
-       LDKDestination* o_conv = (LDKDestination*)untag_ptr(o);
-       int64_t ret_conv = Destination_hash(o_conv);
+jboolean  CS_LDK_Event_eq(int64_t a, int64_t b) {
+       LDKEvent* a_conv = (LDKEvent*)untag_ptr(a);
+       LDKEvent* b_conv = (LDKEvent*)untag_ptr(b);
+       jboolean ret_conv = Event_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Destination_eq(int64_t a, int64_t b) {
-       LDKDestination* a_conv = (LDKDestination*)untag_ptr(a);
-       LDKDestination* b_conv = (LDKDestination*)untag_ptr(b);
-       jboolean ret_conv = Destination_eq(a_conv, b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Event_write(int64_t obj) {
+       LDKEvent* obj_conv = (LDKEvent*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = Event_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_Destination_resolve(int64_t this_arg, int64_t network_graph) {
-       LDKDestination* this_arg_conv = (LDKDestination*)untag_ptr(this_arg);
-       LDKReadOnlyNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       Destination_resolve(this_arg_conv, &network_graph_conv);
+int64_t  CS_LDK_Event_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = Event_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_SendSuccess_free(int64_t this_ptr) {
+void  CS_LDK_MessageSendEvent_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKSendSuccess this_ptr_conv = *(LDKSendSuccess*)(this_ptr_ptr);
+       LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       SendSuccess_free(this_ptr_conv);
+       MessageSendEvent_free(this_ptr_conv);
 }
 
-static inline uint64_t SendSuccess_clone_ptr(LDKSendSuccess *NONNULL_PTR arg) {
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_clone(arg);
+static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_SendSuccess_clone_ptr(int64_t arg) {
-       LDKSendSuccess* arg_conv = (LDKSendSuccess*)untag_ptr(arg);
-       int64_t ret_conv = SendSuccess_clone_ptr(arg_conv);
+int64_t  CS_LDK_MessageSendEvent_clone_ptr(int64_t arg) {
+       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)untag_ptr(arg);
+       int64_t ret_conv = MessageSendEvent_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_SendSuccess_clone(int64_t orig) {
-       LDKSendSuccess* orig_conv = (LDKSendSuccess*)untag_ptr(orig);
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_clone(int64_t orig) {
+       LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)untag_ptr(orig);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendSuccess_buffered() {
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_buffered();
+int64_t  CS_LDK_MessageSendEvent_send_accept_channel(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKAcceptChannel msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = AcceptChannel_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendSuccess_buffered_awaiting_connection(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_buffered_awaiting_connection(a_ref);
+int64_t  CS_LDK_MessageSendEvent_send_accept_channel_v2(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKAcceptChannelV2 msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = AcceptChannelV2_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_accept_channel_v2(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendSuccess_hash(int64_t o) {
-       LDKSendSuccess* o_conv = (LDKSendSuccess*)untag_ptr(o);
-       int64_t ret_conv = SendSuccess_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_SendSuccess_eq(int64_t a, int64_t b) {
-       LDKSendSuccess* a_conv = (LDKSendSuccess*)untag_ptr(a);
-       LDKSendSuccess* b_conv = (LDKSendSuccess*)untag_ptr(b);
-       jboolean ret_conv = SendSuccess_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_SendError_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SendError_free(this_ptr_conv);
-}
-
-static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(arg);
+int64_t  CS_LDK_MessageSendEvent_send_open_channel(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKOpenChannel msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = OpenChannel_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_SendError_clone_ptr(int64_t arg) {
-       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
-       int64_t ret_conv = SendError_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_SendError_clone(int64_t orig) {
-       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_send_open_channel_v2(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKOpenChannelV2 msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = OpenChannelV2_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_open_channel_v2(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_secp256k1(int32_t a) {
-       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_secp256k1(a_conv);
+int64_t  CS_LDK_MessageSendEvent_send_funding_created(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKFundingCreated msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = FundingCreated_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_too_big_packet() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_big_packet();
+int64_t  CS_LDK_MessageSendEvent_send_funding_signed(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKFundingSigned msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = FundingSigned_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_too_few_blinded_hops() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_few_blinded_hops();
+int64_t  CS_LDK_MessageSendEvent_send_stfu(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKStfu msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = Stfu_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_stfu(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_invalid_first_hop(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_first_hop(a_ref);
+int64_t  CS_LDK_MessageSendEvent_send_splice_init(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKSpliceInit msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = SpliceInit_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_splice_init(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_path_not_found() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_path_not_found();
+int64_t  CS_LDK_MessageSendEvent_send_splice_ack(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKSpliceAck msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = SpliceAck_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_splice_ack(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_invalid_message() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_message();
+int64_t  CS_LDK_MessageSendEvent_send_splice_locked(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKSpliceLocked msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = SpliceLocked_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_splice_locked(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_buffer_full() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_buffer_full();
+int64_t  CS_LDK_MessageSendEvent_send_tx_add_input(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAddInput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxAddInput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_add_input(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_get_node_id_failed() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_get_node_id_failed();
+int64_t  CS_LDK_MessageSendEvent_send_tx_add_output(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAddOutput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxAddOutput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_add_output(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_unresolved_introduction_node() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_unresolved_introduction_node();
+int64_t  CS_LDK_MessageSendEvent_send_tx_remove_input(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxRemoveInput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxRemoveInput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_remove_input(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_blinded_path_advance_failed() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_blinded_path_advance_failed();
+int64_t  CS_LDK_MessageSendEvent_send_tx_remove_output(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxRemoveOutput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxRemoveOutput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_remove_output(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_hash(int64_t o) {
-       LDKSendError* o_conv = (LDKSendError*)untag_ptr(o);
-       int64_t ret_conv = SendError_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_SendError_eq(int64_t a, int64_t b) {
-       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
-       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
-       jboolean ret_conv = SendError_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CustomOnionMessageHandler_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomOnionMessageHandler_free(this_ptr_conv);
-}
-
-void  CS_LDK_PeeledOnion_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPeeledOnion this_ptr_conv = *(LDKPeeledOnion*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PeeledOnion_free(this_ptr_conv);
-}
-
-static inline uint64_t PeeledOnion_clone_ptr(LDKPeeledOnion *NONNULL_PTR arg) {
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_clone(arg);
+int64_t  CS_LDK_MessageSendEvent_send_tx_complete(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxComplete msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxComplete_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_complete(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_PeeledOnion_clone_ptr(int64_t arg) {
-       LDKPeeledOnion* arg_conv = (LDKPeeledOnion*)untag_ptr(arg);
-       int64_t ret_conv = PeeledOnion_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_PeeledOnion_clone(int64_t orig) {
-       LDKPeeledOnion* orig_conv = (LDKPeeledOnion*)untag_ptr(orig);
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_send_tx_signatures(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxSignatures msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxSignatures_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_signatures(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PeeledOnion_forward(int64_t a, int64_t b) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKNextMessageHop a_conv = *(LDKNextMessageHop*)(a_ptr);
-       a_conv = NextMessageHop_clone((LDKNextMessageHop*)untag_ptr(a));
-       LDKOnionMessage b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv = OnionMessage_clone(&b_conv);
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_forward(a_conv, b_conv);
+int64_t  CS_LDK_MessageSendEvent_send_tx_init_rbf(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxInitRbf msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxInitRbf_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_init_rbf(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PeeledOnion_receive(int64_t a, int8_tArray b, int64_t c) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKParsedOnionMessageContents a_conv = *(LDKParsedOnionMessageContents*)(a_ptr);
-       a_conv = ParsedOnionMessageContents_clone((LDKParsedOnionMessageContents*)untag_ptr(a));
-       LDKThirtyTwoBytes b_ref;
-       CHECK(b->arr_len == 32);
-       memcpy(b_ref.data, b->elems, 32); FREE(b);
-       LDKBlindedPath c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = BlindedPath_clone(&c_conv);
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_receive(a_conv, b_ref, c_conv);
+int64_t  CS_LDK_MessageSendEvent_send_tx_ack_rbf(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAckRbf msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxAckRbf_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_ack_rbf(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_create_onion_message_resolving_destination(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t network_graph, int64_t path, int64_t contents, int64_t reply_path) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
-       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
-       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
-       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
-       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
-       LDKReadOnlyNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKOnionMessagePath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = OnionMessagePath_clone(&path_conv);
-       void* contents_ptr = untag_ptr(contents);
-       CHECK_ACCESS(contents_ptr);
-       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
-       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
-       }
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
-       *ret_conv = create_onion_message_resolving_destination(entropy_source_conv, node_signer_conv, node_id_lookup_conv, &network_graph_conv, path_conv, contents_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_onion_message(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t path, int64_t contents, int64_t reply_path) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
-       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
-       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
-       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
-       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
-       LDKOnionMessagePath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = OnionMessagePath_clone(&path_conv);
-       void* contents_ptr = untag_ptr(contents);
-       CHECK_ACCESS(contents_ptr);
-       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
-       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
-       }
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
-       *ret_conv = create_onion_message(entropy_source_conv, node_signer_conv, node_id_lookup_conv, path_conv, contents_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_peel_onion_message(int64_t msg, int64_t node_signer, int64_t logger, int64_t custom_handler) {
-       LDKOnionMessage msg_conv;
+int64_t  CS_LDK_MessageSendEvent_send_tx_abort(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAbort msg_conv;
        msg_conv.inner = untag_ptr(msg);
        msg_conv.is_owned = ptr_is_owned(msg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* custom_handler_ptr = untag_ptr(custom_handler);
-       CHECK_ACCESS(custom_handler_ptr);
-       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
-       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
-       }
-       LDKCResult_PeeledOnionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PeeledOnionNoneZ), "LDKCResult_PeeledOnionNoneZ");
-       *ret_conv = peel_onion_message(&msg_conv, node_signer_conv, logger_conv, custom_handler_conv);
-       return tag_ptr(ret_conv, true);
+       msg_conv = TxAbort_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_abort(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessenger_new(int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t node_id_lookup, int64_t message_router, int64_t offers_handler, int64_t custom_handler) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
-       CHECK_ACCESS(node_id_lookup_ptr);
-       LDKNodeIdLookUp node_id_lookup_conv = *(LDKNodeIdLookUp*)(node_id_lookup_ptr);
-       if (node_id_lookup_conv.free == LDKNodeIdLookUp_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeIdLookUp_JCalls_cloned(&node_id_lookup_conv);
-       }
-       void* message_router_ptr = untag_ptr(message_router);
-       CHECK_ACCESS(message_router_ptr);
-       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
-       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKMessageRouter_JCalls_cloned(&message_router_conv);
-       }
-       void* offers_handler_ptr = untag_ptr(offers_handler);
-       CHECK_ACCESS(offers_handler_ptr);
-       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
-       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
-       }
-       void* custom_handler_ptr = untag_ptr(custom_handler);
-       CHECK_ACCESS(custom_handler_ptr);
-       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
-       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
-       }
-       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, node_id_lookup_conv, message_router_conv, offers_handler_conv, custom_handler_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_MessageSendEvent_send_channel_ready(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelReady msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelReady_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_ready(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessenger_send_onion_message(int64_t this_arg, int64_t contents, int64_t destination, int64_t reply_path) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       void* contents_ptr = untag_ptr(contents);
-       CHECK_ACCESS(contents_ptr);
-       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
-       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
-       }
-       void* destination_ptr = untag_ptr(destination);
-       CHECK_ACCESS(destination_ptr);
-       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
-       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_SendSuccessSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SendSuccessSendErrorZ), "LDKCResult_SendSuccessSendErrorZ");
-       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, contents_conv, destination_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_MessageSendEvent_send_announcement_signatures(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKAnnouncementSignatures msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = AnnouncementSignatures_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessenger_as_OnionMessageHandler(int64_t this_arg) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
-       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_MessageSendEvent_update_htlcs(int8_tArray node_id, int64_t updates) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKCommitmentUpdate updates_conv;
+       updates_conv.inner = untag_ptr(updates);
+       updates_conv.is_owned = ptr_is_owned(updates);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
+       updates_conv = CommitmentUpdate_clone(&updates_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OffersMessageHandler_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessageHandler_free(this_ptr_conv);
+int64_t  CS_LDK_MessageSendEvent_send_revoke_and_ack(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKRevokeAndACK msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = RevokeAndACK_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OffersMessage_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessage_free(this_ptr_conv);
+int64_t  CS_LDK_MessageSendEvent_send_closing_signed(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKClosingSigned msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ClosingSigned_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(arg);
+int64_t  CS_LDK_MessageSendEvent_send_shutdown(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKShutdown msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = Shutdown_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_OffersMessage_clone_ptr(int64_t arg) {
-       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
-       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_OffersMessage_clone(int64_t orig) {
-       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_send_channel_reestablish(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelReestablish msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelReestablish_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_invoice_request(int64_t a) {
-       LDKInvoiceRequest a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceRequest_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_request(a_conv);
+int64_t  CS_LDK_MessageSendEvent_send_channel_announcement(int8_tArray node_id, int64_t msg, int64_t update_msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelAnnouncement_clone(&msg_conv);
+       LDKChannelUpdate update_msg_conv;
+       update_msg_conv.inner = untag_ptr(update_msg);
+       update_msg_conv.is_owned = ptr_is_owned(update_msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
+       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_announcement(node_id_ref, msg_conv, update_msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_invoice(int64_t a) {
-       LDKBolt12Invoice a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12Invoice_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice(a_conv);
+int64_t  CS_LDK_MessageSendEvent_broadcast_channel_announcement(int64_t msg, int64_t update_msg) {
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelAnnouncement_clone(&msg_conv);
+       LDKChannelUpdate update_msg_conv;
+       update_msg_conv.inner = untag_ptr(update_msg);
+       update_msg_conv.is_owned = ptr_is_owned(update_msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
+       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_invoice_error(int64_t a) {
-       LDKInvoiceError a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceError_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_error(a_conv);
+int64_t  CS_LDK_MessageSendEvent_broadcast_channel_update(int64_t msg) {
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelUpdate_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_OffersMessage_is_known_type(int64_t tlv_type) {
-       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
-       return ret_conv;
+int64_t  CS_LDK_MessageSendEvent_broadcast_node_announcement(int64_t msg) {
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = NodeAnnouncement_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_as_OnionMessageContents(int64_t this_arg) {
-       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = OffersMessage_as_OnionMessageContents(this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_MessageSendEvent_send_channel_update(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelUpdate_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_OffersMessage_write(int64_t obj) {
-       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = OffersMessage_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_MessageSendEvent_handle_error(int8_tArray node_id, int64_t action) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       void* action_ptr = untag_ptr(action);
+       CHECK_ACCESS(action_ptr);
+       LDKErrorAction action_conv = *(LDKErrorAction*)(action_ptr);
+       action_conv = ErrorAction_clone((LDKErrorAction*)untag_ptr(action));
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_handle_error(node_id_ref, action_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_read(int8_tArray ser, int64_t arg_a, int64_t arg_b) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       void* arg_b_ptr = untag_ptr(arg_b);
-       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
-       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
-       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
-       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_MessageSendEvent_send_channel_range_query(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKQueryChannelRange msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = QueryChannelRange_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Packet_free(int64_t this_obj) {
-       LDKPacket this_obj_conv;
+int64_t  CS_LDK_MessageSendEvent_send_short_ids_query(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKQueryShortChannelIds msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = QueryShortChannelIds_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageSendEvent_send_reply_channel_range(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKReplyChannelRange msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ReplyChannelRange_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageSendEvent_send_gossip_timestamp_filter(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKGossipTimestampFilter msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = GossipTimestampFilter_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_gossip_timestamp_filter(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_MessageSendEventsProvider_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageSendEventsProvider_free(this_ptr_conv);
+}
+
+void  CS_LDK_EventsProvider_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EventsProvider_free(this_ptr_conv);
+}
+
+void  CS_LDK_ReplayEvent_free(int64_t this_obj) {
+       LDKReplayEvent this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Packet_free(this_obj_conv);
+       ReplayEvent_free(this_obj_conv);
 }
 
-int8_t  CS_LDK_Packet_get_version(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_t ret_conv = Packet_get_version(&this_ptr_conv);
+int64_t  CS_LDK_ReplayEvent_new() {
+       LDKReplayEvent ret_var = ReplayEvent_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ReplayEvent_clone_ptr(LDKReplayEvent *NONNULL_PTR arg) {
+       LDKReplayEvent ret_var = ReplayEvent_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ReplayEvent_clone_ptr(int64_t arg) {
+       LDKReplayEvent arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ReplayEvent_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Packet_set_version(int64_t this_ptr, int8_t val) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       Packet_set_version(&this_ptr_conv, val);
+int64_t  CS_LDK_ReplayEvent_clone(int64_t orig) {
+       LDKReplayEvent orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKReplayEvent ret_var = ReplayEvent_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_Packet_get_public_key(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Packet_get_public_key(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+void  CS_LDK_EventHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEventHandler this_ptr_conv = *(LDKEventHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EventHandler_free(this_ptr_conv);
 }
 
-void  CS_LDK_Packet_set_public_key(int64_t this_ptr, int8_tArray val) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       Packet_set_public_key(&this_ptr_conv, val_ref);
+void  CS_LDK_AnchorDescriptor_free(int64_t this_obj) {
+       LDKAnchorDescriptor this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       AnchorDescriptor_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_Packet_get_hop_data(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
+int64_t  CS_LDK_AnchorDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Packet_get_hop_data(&this_ptr_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       LDKChannelDerivationParameters ret_var = AnchorDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Packet_set_hop_data(int64_t this_ptr, int8_tArray val) {
-       LDKPacket this_ptr_conv;
+void  CS_LDK_AnchorDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z val_ref;
-       val_ref.datalen = val->arr_len;
-       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
-       Packet_set_hop_data(&this_ptr_conv, val_ref);
+       LDKChannelDerivationParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelDerivationParameters_clone(&val_conv);
+       AnchorDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_Packet_get_hmac(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
+int64_t  CS_LDK_AnchorDescriptor_get_outpoint(int64_t this_ptr) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *Packet_get_hmac(&this_ptr_conv), 32);
-       return ret_arr;
+       LDKOutPoint ret_var = AnchorDescriptor_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Packet_set_hmac(int64_t this_ptr, int8_tArray val) {
-       LDKPacket this_ptr_conv;
+void  CS_LDK_AnchorDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       Packet_set_hmac(&this_ptr_conv, val_ref);
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       AnchorDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Packet_new(int8_t version_arg, int8_tArray public_key_arg, int8_tArray hop_data_arg, int8_tArray hmac_arg) {
-       LDKPublicKey public_key_arg_ref;
-       CHECK(public_key_arg->arr_len == 33);
-       memcpy(public_key_arg_ref.compressed_form, public_key_arg->elems, 33); FREE(public_key_arg);
-       LDKCVec_u8Z hop_data_arg_ref;
-       hop_data_arg_ref.datalen = hop_data_arg->arr_len;
-       hop_data_arg_ref.data = MALLOC(hop_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(hop_data_arg_ref.data, hop_data_arg->elems, hop_data_arg_ref.datalen); FREE(hop_data_arg);
-       LDKThirtyTwoBytes hmac_arg_ref;
-       CHECK(hmac_arg->arr_len == 32);
-       memcpy(hmac_arg_ref.data, hmac_arg->elems, 32); FREE(hmac_arg);
-       LDKPacket ret_var = Packet_new(version_arg, public_key_arg_ref, hop_data_arg_ref, hmac_arg_ref);
+int64_t  CS_LDK_AnchorDescriptor_new(int64_t channel_derivation_parameters_arg, int64_t outpoint_arg) {
+       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
+       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
+       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
+       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       LDKAnchorDescriptor ret_var = AnchorDescriptor_new(channel_derivation_parameters_arg_conv, outpoint_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg) {
-       LDKPacket ret_var = Packet_clone(arg);
+static inline uint64_t AnchorDescriptor_clone_ptr(LDKAnchorDescriptor *NONNULL_PTR arg) {
+       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Packet_clone_ptr(int64_t arg) {
-       LDKPacket arg_conv;
+int64_t  CS_LDK_AnchorDescriptor_clone_ptr(int64_t arg) {
+       LDKAnchorDescriptor arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Packet_clone_ptr(&arg_conv);
+       int64_t ret_conv = AnchorDescriptor_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Packet_clone(int64_t orig) {
-       LDKPacket orig_conv;
+int64_t  CS_LDK_AnchorDescriptor_clone(int64_t orig) {
+       LDKAnchorDescriptor orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPacket ret_var = Packet_clone(&orig_conv);
+       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Packet_hash(int64_t o) {
-       LDKPacket o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Packet_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Packet_eq(int64_t a, int64_t b) {
-       LDKPacket a_conv;
+jboolean  CS_LDK_AnchorDescriptor_eq(int64_t a, int64_t b) {
+       LDKAnchorDescriptor a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKPacket b_conv;
+       LDKAnchorDescriptor b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Packet_eq(&a_conv, &b_conv);
+       jboolean ret_conv = AnchorDescriptor_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Packet_write(int64_t obj) {
-       LDKPacket obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Packet_write(&obj_conv);
+int64_t  CS_LDK_AnchorDescriptor_previous_utxo(int64_t this_arg) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = AnchorDescriptor_previous_utxo(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+int64_t  CS_LDK_AnchorDescriptor_unsigned_tx_input(int64_t this_arg) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
+       *ret_ref = AnchorDescriptor_unsigned_tx_input(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+int8_tArray  CS_LDK_AnchorDescriptor_witness_script(int64_t this_arg) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = AnchorDescriptor_witness_script(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_ParsedOnionMessageContents_free(int64_t this_ptr) {
+int8_tArray  CS_LDK_AnchorDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKECDSASignature signature_ref;
+       CHECK(signature->arr_len == 64);
+       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
+       LDKWitness ret_var = AnchorDescriptor_tx_input_witness(&this_arg_conv, signature_ref);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       Witness_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_AnchorDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
+       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = AnchorDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_BumpTransactionEvent_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKParsedOnionMessageContents this_ptr_conv = *(LDKParsedOnionMessageContents*)(this_ptr_ptr);
+       LDKBumpTransactionEvent this_ptr_conv = *(LDKBumpTransactionEvent*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       ParsedOnionMessageContents_free(this_ptr_conv);
+       BumpTransactionEvent_free(this_ptr_conv);
 }
 
-static inline uint64_t ParsedOnionMessageContents_clone_ptr(LDKParsedOnionMessageContents *NONNULL_PTR arg) {
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_clone(arg);
+static inline uint64_t BumpTransactionEvent_clone_ptr(LDKBumpTransactionEvent *NONNULL_PTR arg) {
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_ParsedOnionMessageContents_clone_ptr(int64_t arg) {
-       LDKParsedOnionMessageContents* arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(arg);
-       int64_t ret_conv = ParsedOnionMessageContents_clone_ptr(arg_conv);
+int64_t  CS_LDK_BumpTransactionEvent_clone_ptr(int64_t arg) {
+       LDKBumpTransactionEvent* arg_conv = (LDKBumpTransactionEvent*)untag_ptr(arg);
+       int64_t ret_conv = BumpTransactionEvent_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_clone(int64_t orig) {
-       LDKParsedOnionMessageContents* orig_conv = (LDKParsedOnionMessageContents*)untag_ptr(orig);
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_clone(orig_conv);
+int64_t  CS_LDK_BumpTransactionEvent_clone(int64_t orig) {
+       LDKBumpTransactionEvent* orig_conv = (LDKBumpTransactionEvent*)untag_ptr(orig);
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_offers(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
-       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_offers(a_conv);
+int64_t  CS_LDK_BumpTransactionEvent_channel_close(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t package_target_feerate_sat_per_1000_weight, int8_tArray commitment_tx, int64_t commitment_tx_fee_satoshis, int64_t anchor_descriptor, int64_tArray pending_htlcs) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKThirtyTwoBytes claim_id_ref;
+       CHECK(claim_id->arr_len == 32);
+       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
+       LDKTransaction commitment_tx_ref;
+       commitment_tx_ref.datalen = commitment_tx->arr_len;
+       commitment_tx_ref.data = MALLOC(commitment_tx_ref.datalen, "LDKTransaction Bytes");
+       memcpy(commitment_tx_ref.data, commitment_tx->elems, commitment_tx_ref.datalen); FREE(commitment_tx);
+       commitment_tx_ref.data_is_owned = true;
+       LDKAnchorDescriptor anchor_descriptor_conv;
+       anchor_descriptor_conv.inner = untag_ptr(anchor_descriptor);
+       anchor_descriptor_conv.is_owned = ptr_is_owned(anchor_descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(anchor_descriptor_conv);
+       anchor_descriptor_conv = AnchorDescriptor_clone(&anchor_descriptor_conv);
+       LDKCVec_HTLCOutputInCommitmentZ pending_htlcs_constr;
+       pending_htlcs_constr.datalen = pending_htlcs->arr_len;
+       if (pending_htlcs_constr.datalen > 0)
+               pending_htlcs_constr.data = MALLOC(pending_htlcs_constr.datalen * sizeof(LDKHTLCOutputInCommitment), "LDKCVec_HTLCOutputInCommitmentZ Elements");
+       else
+               pending_htlcs_constr.data = NULL;
+       int64_t* pending_htlcs_vals = pending_htlcs->elems;
+       for (size_t y = 0; y < pending_htlcs_constr.datalen; y++) {
+               int64_t pending_htlcs_conv_24 = pending_htlcs_vals[y];
+               LDKHTLCOutputInCommitment pending_htlcs_conv_24_conv;
+               pending_htlcs_conv_24_conv.inner = untag_ptr(pending_htlcs_conv_24);
+               pending_htlcs_conv_24_conv.is_owned = ptr_is_owned(pending_htlcs_conv_24);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(pending_htlcs_conv_24_conv);
+               pending_htlcs_conv_24_conv = HTLCOutputInCommitment_clone(&pending_htlcs_conv_24_conv);
+               pending_htlcs_constr.data[y] = pending_htlcs_conv_24_conv;
+       }
+       FREE(pending_htlcs);
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_channel_close(channel_id_conv, counterparty_node_id_ref, claim_id_ref, package_target_feerate_sat_per_1000_weight, commitment_tx_ref, commitment_tx_fee_satoshis, anchor_descriptor_conv, pending_htlcs_constr);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_custom(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
-       if (a_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&a_conv);
+int64_t  CS_LDK_BumpTransactionEvent_htlcresolution(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t target_feerate_sat_per_1000_weight, int64_tArray htlc_descriptors, int32_t tx_lock_time) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKThirtyTwoBytes claim_id_ref;
+       CHECK(claim_id->arr_len == 32);
+       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
+       LDKCVec_HTLCDescriptorZ htlc_descriptors_constr;
+       htlc_descriptors_constr.datalen = htlc_descriptors->arr_len;
+       if (htlc_descriptors_constr.datalen > 0)
+               htlc_descriptors_constr.data = MALLOC(htlc_descriptors_constr.datalen * sizeof(LDKHTLCDescriptor), "LDKCVec_HTLCDescriptorZ Elements");
+       else
+               htlc_descriptors_constr.data = NULL;
+       int64_t* htlc_descriptors_vals = htlc_descriptors->elems;
+       for (size_t q = 0; q < htlc_descriptors_constr.datalen; q++) {
+               int64_t htlc_descriptors_conv_16 = htlc_descriptors_vals[q];
+               LDKHTLCDescriptor htlc_descriptors_conv_16_conv;
+               htlc_descriptors_conv_16_conv.inner = untag_ptr(htlc_descriptors_conv_16);
+               htlc_descriptors_conv_16_conv.is_owned = ptr_is_owned(htlc_descriptors_conv_16);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_descriptors_conv_16_conv);
+               htlc_descriptors_conv_16_conv = HTLCDescriptor_clone(&htlc_descriptors_conv_16_conv);
+               htlc_descriptors_constr.data[q] = htlc_descriptors_conv_16_conv;
        }
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_custom(a_conv);
+       FREE(htlc_descriptors);
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_htlcresolution(channel_id_conv, counterparty_node_id_ref, claim_id_ref, target_feerate_sat_per_1000_weight, htlc_descriptors_constr, tx_lock_time);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_as_OnionMessageContents(int64_t this_arg) {
-       LDKParsedOnionMessageContents* this_arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(this_arg);
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = ParsedOnionMessageContents_as_OnionMessageContents(this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jboolean  CS_LDK_BumpTransactionEvent_eq(int64_t a, int64_t b) {
+       LDKBumpTransactionEvent* a_conv = (LDKBumpTransactionEvent*)untag_ptr(a);
+       LDKBumpTransactionEvent* b_conv = (LDKBumpTransactionEvent*)untag_ptr(b);
+       jboolean ret_conv = BumpTransactionEvent_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_ParsedOnionMessageContents_write(int64_t obj) {
-       LDKParsedOnionMessageContents* obj_conv = (LDKParsedOnionMessageContents*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = ParsedOnionMessageContents_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_Input_free(int64_t this_obj) {
+       LDKInput this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Input_free(this_obj_conv);
 }
 
-static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = OnionMessageContents_clone(arg);
-       return tag_ptr(ret_ret, true);
-}
-int64_t  CS_LDK_OnionMessageContents_clone_ptr(int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)arg_ptr;
-       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_OnionMessageContents_clone(int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)orig_ptr;
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = OnionMessageContents_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-void  CS_LDK_OnionMessageContents_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OnionMessageContents_free(this_ptr_conv);
-}
-
-void  CS_LDK_NextMessageHop_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNextMessageHop this_ptr_conv = *(LDKNextMessageHop*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NextMessageHop_free(this_ptr_conv);
-}
-
-static inline uint64_t NextMessageHop_clone_ptr(LDKNextMessageHop *NONNULL_PTR arg) {
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_NextMessageHop_clone_ptr(int64_t arg) {
-       LDKNextMessageHop* arg_conv = (LDKNextMessageHop*)untag_ptr(arg);
-       int64_t ret_conv = NextMessageHop_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_NextMessageHop_clone(int64_t orig) {
-       LDKNextMessageHop* orig_conv = (LDKNextMessageHop*)untag_ptr(orig);
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_NextMessageHop_node_id(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_node_id(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_NextMessageHop_short_channel_id(int64_t a) {
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_short_channel_id(a);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_NextMessageHop_hash(int64_t o) {
-       LDKNextMessageHop* o_conv = (LDKNextMessageHop*)untag_ptr(o);
-       int64_t ret_conv = NextMessageHop_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_NextMessageHop_eq(int64_t a, int64_t b) {
-       LDKNextMessageHop* a_conv = (LDKNextMessageHop*)untag_ptr(a);
-       LDKNextMessageHop* b_conv = (LDKNextMessageHop*)untag_ptr(b);
-       jboolean ret_conv = NextMessageHop_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_BlindedPath_free(int64_t this_obj) {
-       LDKBlindedPath this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPath_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_BlindedPath_get_introduction_node(int64_t this_ptr) {
-       LDKBlindedPath this_ptr_conv;
+int64_t  CS_LDK_Input_get_outpoint(int64_t this_ptr) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = BlindedPath_get_introduction_node(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKOutPoint ret_var = Input_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_BlindedPath_set_introduction_node(int64_t this_ptr, int64_t val) {
-       LDKBlindedPath this_ptr_conv;
+void  CS_LDK_Input_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKIntroductionNode val_conv = *(LDKIntroductionNode*)(val_ptr);
-       val_conv = IntroductionNode_clone((LDKIntroductionNode*)untag_ptr(val));
-       BlindedPath_set_introduction_node(&this_ptr_conv, val_conv);
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       Input_set_outpoint(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_BlindedPath_get_blinding_point(int64_t this_ptr) {
-       LDKBlindedPath this_ptr_conv;
+int64_t  CS_LDK_Input_get_previous_utxo(int64_t this_ptr) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, BlindedPath_get_blinding_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = Input_get_previous_utxo(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_BlindedPath_set_blinding_point(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedPath this_ptr_conv;
+void  CS_LDK_Input_set_previous_utxo(int64_t this_ptr, int64_t val) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       BlindedPath_set_blinding_point(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       Input_set_previous_utxo(&this_ptr_conv, val_conv);
 }
 
-int64_tArray  CS_LDK_BlindedPath_get_blinded_hops(int64_t this_ptr) {
-       LDKBlindedPath this_ptr_conv;
+int64_t  CS_LDK_Input_get_satisfaction_weight(int64_t this_ptr) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ ret_var = BlindedPath_get_blinded_hops(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t m = 0; m < ret_var.datalen; m++) {
-               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
-               int64_t ret_conv_12_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
-               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
-               ret_arr_ptr[m] = ret_conv_12_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       int64_t ret_conv = Input_get_satisfaction_weight(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_BlindedPath_set_blinded_hops(int64_t this_ptr, int64_tArray val) {
-       LDKBlindedPath this_ptr_conv;
+void  CS_LDK_Input_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               LDKBlindedHop val_conv_12_conv;
-               val_conv_12_conv.inner = untag_ptr(val_conv_12);
-               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
-               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
-               val_constr.data[m] = val_conv_12_conv;
-       }
-       FREE(val);
-       BlindedPath_set_blinded_hops(&this_ptr_conv, val_constr);
+       Input_set_satisfaction_weight(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_BlindedPath_new(int64_t introduction_node_arg, int8_tArray blinding_point_arg, int64_tArray blinded_hops_arg) {
-       void* introduction_node_arg_ptr = untag_ptr(introduction_node_arg);
-       CHECK_ACCESS(introduction_node_arg_ptr);
-       LDKIntroductionNode introduction_node_arg_conv = *(LDKIntroductionNode*)(introduction_node_arg_ptr);
-       introduction_node_arg_conv = IntroductionNode_clone((LDKIntroductionNode*)untag_ptr(introduction_node_arg));
-       LDKPublicKey blinding_point_arg_ref;
-       CHECK(blinding_point_arg->arr_len == 33);
-       memcpy(blinding_point_arg_ref.compressed_form, blinding_point_arg->elems, 33); FREE(blinding_point_arg);
-       LDKCVec_BlindedHopZ blinded_hops_arg_constr;
-       blinded_hops_arg_constr.datalen = blinded_hops_arg->arr_len;
-       if (blinded_hops_arg_constr.datalen > 0)
-               blinded_hops_arg_constr.data = MALLOC(blinded_hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               blinded_hops_arg_constr.data = NULL;
-       int64_t* blinded_hops_arg_vals = blinded_hops_arg->elems;
-       for (size_t m = 0; m < blinded_hops_arg_constr.datalen; m++) {
-               int64_t blinded_hops_arg_conv_12 = blinded_hops_arg_vals[m];
-               LDKBlindedHop blinded_hops_arg_conv_12_conv;
-               blinded_hops_arg_conv_12_conv.inner = untag_ptr(blinded_hops_arg_conv_12);
-               blinded_hops_arg_conv_12_conv.is_owned = ptr_is_owned(blinded_hops_arg_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_hops_arg_conv_12_conv);
-               blinded_hops_arg_conv_12_conv = BlindedHop_clone(&blinded_hops_arg_conv_12_conv);
-               blinded_hops_arg_constr.data[m] = blinded_hops_arg_conv_12_conv;
-       }
-       FREE(blinded_hops_arg);
-       LDKBlindedPath ret_var = BlindedPath_new(introduction_node_arg_conv, blinding_point_arg_ref, blinded_hops_arg_constr);
+int64_t  CS_LDK_Input_new(int64_t outpoint_arg, int64_t previous_utxo_arg, int64_t satisfaction_weight_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* previous_utxo_arg_ptr = untag_ptr(previous_utxo_arg);
+       CHECK_ACCESS(previous_utxo_arg_ptr);
+       LDKTxOut previous_utxo_arg_conv = *(LDKTxOut*)(previous_utxo_arg_ptr);
+       previous_utxo_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(previous_utxo_arg));
+       LDKInput ret_var = Input_new(outpoint_arg_conv, previous_utxo_arg_conv, satisfaction_weight_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg) {
-       LDKBlindedPath ret_var = BlindedPath_clone(arg);
+static inline uint64_t Input_clone_ptr(LDKInput *NONNULL_PTR arg) {
+       LDKInput ret_var = Input_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedPath_clone_ptr(int64_t arg) {
-       LDKBlindedPath arg_conv;
+int64_t  CS_LDK_Input_clone_ptr(int64_t arg) {
+       LDKInput arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_clone_ptr(&arg_conv);
+       int64_t ret_conv = Input_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPath_clone(int64_t orig) {
-       LDKBlindedPath orig_conv;
+int64_t  CS_LDK_Input_clone(int64_t orig) {
+       LDKInput orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPath ret_var = BlindedPath_clone(&orig_conv);
+       LDKInput ret_var = Input_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedPath_hash(int64_t o) {
-       LDKBlindedPath o_conv;
+int64_t  CS_LDK_Input_hash(int64_t o) {
+       LDKInput o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_hash(&o_conv);
+       int64_t ret_conv = Input_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_BlindedPath_eq(int64_t a, int64_t b) {
-       LDKBlindedPath a_conv;
+jboolean  CS_LDK_Input_eq(int64_t a, int64_t b) {
+       LDKInput a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedPath b_conv;
+       LDKInput b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPath_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_IntroductionNode_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKIntroductionNode this_ptr_conv = *(LDKIntroductionNode*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       IntroductionNode_free(this_ptr_conv);
-}
-
-static inline uint64_t IntroductionNode_clone_ptr(LDKIntroductionNode *NONNULL_PTR arg) {
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_IntroductionNode_clone_ptr(int64_t arg) {
-       LDKIntroductionNode* arg_conv = (LDKIntroductionNode*)untag_ptr(arg);
-       int64_t ret_conv = IntroductionNode_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_IntroductionNode_clone(int64_t orig) {
-       LDKIntroductionNode* orig_conv = (LDKIntroductionNode*)untag_ptr(orig);
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_IntroductionNode_node_id(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_node_id(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_IntroductionNode_directed_short_channel_id(int32_t a, int64_t b) {
-       LDKDirection a_conv = LDKDirection_from_cs(a);
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_directed_short_channel_id(a_conv, b);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_IntroductionNode_hash(int64_t o) {
-       LDKIntroductionNode* o_conv = (LDKIntroductionNode*)untag_ptr(o);
-       int64_t ret_conv = IntroductionNode_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_IntroductionNode_eq(int64_t a, int64_t b) {
-       LDKIntroductionNode* a_conv = (LDKIntroductionNode*)untag_ptr(a);
-       LDKIntroductionNode* b_conv = (LDKIntroductionNode*)untag_ptr(b);
-       jboolean ret_conv = IntroductionNode_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Direction_clone(int64_t orig) {
-       LDKDirection* orig_conv = (LDKDirection*)untag_ptr(orig);
-       int32_t ret_conv = LDKDirection_to_cs(Direction_clone(orig_conv));
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Direction_node_one() {
-       int32_t ret_conv = LDKDirection_to_cs(Direction_node_one());
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Direction_node_two() {
-       int32_t ret_conv = LDKDirection_to_cs(Direction_node_two());
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Direction_hash(int64_t o) {
-       LDKDirection* o_conv = (LDKDirection*)untag_ptr(o);
-       int64_t ret_conv = Direction_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Direction_eq(int64_t a, int64_t b) {
-       LDKDirection* a_conv = (LDKDirection*)untag_ptr(a);
-       LDKDirection* b_conv = (LDKDirection*)untag_ptr(b);
-       jboolean ret_conv = Direction_eq(a_conv, b_conv);
+       jboolean ret_conv = Input_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeIdLookUp_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNodeIdLookUp this_ptr_conv = *(LDKNodeIdLookUp*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NodeIdLookUp_free(this_ptr_conv);
-}
-
-void  CS_LDK_EmptyNodeIdLookUp_free(int64_t this_obj) {
-       LDKEmptyNodeIdLookUp this_obj_conv;
+void  CS_LDK_Utxo_free(int64_t this_obj) {
+       LDKUtxo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       EmptyNodeIdLookUp_free(this_obj_conv);
+       Utxo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_EmptyNodeIdLookUp_new() {
-       LDKEmptyNodeIdLookUp ret_var = EmptyNodeIdLookUp_new();
+int64_t  CS_LDK_Utxo_get_outpoint(int64_t this_ptr) {
+       LDKUtxo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint ret_var = Utxo_get_outpoint(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_EmptyNodeIdLookUp_as_NodeIdLookUp(int64_t this_arg) {
-       LDKEmptyNodeIdLookUp this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeIdLookUp* ret_ret = MALLOC(sizeof(LDKNodeIdLookUp), "LDKNodeIdLookUp");
-       *ret_ret = EmptyNodeIdLookUp_as_NodeIdLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-void  CS_LDK_BlindedHop_free(int64_t this_obj) {
-       LDKBlindedHop this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedHop_free(this_obj_conv);
+void  CS_LDK_Utxo_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKUtxo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       Utxo_set_outpoint(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_BlindedHop_get_blinded_node_id(int64_t this_ptr) {
-       LDKBlindedHop this_ptr_conv;
+int64_t  CS_LDK_Utxo_get_output(int64_t this_ptr) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, BlindedHop_get_blinded_node_id(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = Utxo_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_BlindedHop_set_blinded_node_id(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedHop this_ptr_conv;
+void  CS_LDK_Utxo_set_output(int64_t this_ptr, int64_t val) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       BlindedHop_set_blinded_node_id(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       Utxo_set_output(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_BlindedHop_get_encrypted_payload(int64_t this_ptr) {
-       LDKBlindedHop this_ptr_conv;
+int64_t  CS_LDK_Utxo_get_satisfaction_weight(int64_t this_ptr) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHop_get_encrypted_payload(&this_ptr_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       int64_t ret_conv = Utxo_get_satisfaction_weight(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_BlindedHop_set_encrypted_payload(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedHop this_ptr_conv;
+void  CS_LDK_Utxo_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z val_ref;
-       val_ref.datalen = val->arr_len;
-       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
-       BlindedHop_set_encrypted_payload(&this_ptr_conv, val_ref);
+       Utxo_set_satisfaction_weight(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_BlindedHop_new(int8_tArray blinded_node_id_arg, int8_tArray encrypted_payload_arg) {
-       LDKPublicKey blinded_node_id_arg_ref;
-       CHECK(blinded_node_id_arg->arr_len == 33);
-       memcpy(blinded_node_id_arg_ref.compressed_form, blinded_node_id_arg->elems, 33); FREE(blinded_node_id_arg);
-       LDKCVec_u8Z encrypted_payload_arg_ref;
-       encrypted_payload_arg_ref.datalen = encrypted_payload_arg->arr_len;
-       encrypted_payload_arg_ref.data = MALLOC(encrypted_payload_arg_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(encrypted_payload_arg_ref.data, encrypted_payload_arg->elems, encrypted_payload_arg_ref.datalen); FREE(encrypted_payload_arg);
-       LDKBlindedHop ret_var = BlindedHop_new(blinded_node_id_arg_ref, encrypted_payload_arg_ref);
+int64_t  CS_LDK_Utxo_new(int64_t outpoint_arg, int64_t output_arg, int64_t satisfaction_weight_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKUtxo ret_var = Utxo_new(outpoint_arg_conv, output_arg_conv, satisfaction_weight_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
-       LDKBlindedHop ret_var = BlindedHop_clone(arg);
+static inline uint64_t Utxo_clone_ptr(LDKUtxo *NONNULL_PTR arg) {
+       LDKUtxo ret_var = Utxo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedHop_clone_ptr(int64_t arg) {
-       LDKBlindedHop arg_conv;
+int64_t  CS_LDK_Utxo_clone_ptr(int64_t arg) {
+       LDKUtxo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = Utxo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedHop_clone(int64_t orig) {
-       LDKBlindedHop orig_conv;
+int64_t  CS_LDK_Utxo_clone(int64_t orig) {
+       LDKUtxo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
+       LDKUtxo ret_var = Utxo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedHop_hash(int64_t o) {
-       LDKBlindedHop o_conv;
+int64_t  CS_LDK_Utxo_hash(int64_t o) {
+       LDKUtxo o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_hash(&o_conv);
+       int64_t ret_conv = Utxo_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_BlindedHop_eq(int64_t a, int64_t b) {
-       LDKBlindedHop a_conv;
+jboolean  CS_LDK_Utxo_eq(int64_t a, int64_t b) {
+       LDKUtxo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedHop b_conv;
+       LDKUtxo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Utxo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPath_one_hop_for_message(int8_tArray recipient_node_id, int64_t entropy_source) {
-       LDKPublicKey recipient_node_id_ref;
-       CHECK(recipient_node_id->arr_len == 33);
-       memcpy(recipient_node_id_ref.compressed_form, recipient_node_id->elems, 33); FREE(recipient_node_id);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = BlindedPath_one_hop_for_message(recipient_node_id_ref, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Utxo_new_p2pkh(int64_t outpoint, int64_t value, int8_tArray pubkey_hash) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       LDKUtxo ret_var = Utxo_new_p2pkh(outpoint_conv, value, pubkey_hash_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedPath_new_for_message(ptrArray node_pks, int64_t entropy_source) {
-       LDKCVec_PublicKeyZ node_pks_constr;
-       node_pks_constr.datalen = node_pks->arr_len;
-       if (node_pks_constr.datalen > 0)
-               node_pks_constr.data = MALLOC(node_pks_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               node_pks_constr.data = NULL;
-       int8_tArray* node_pks_vals = (void*) node_pks->elems;
-       for (size_t i = 0; i < node_pks_constr.datalen; i++) {
-               int8_tArray node_pks_conv_8 = node_pks_vals[i];
-               LDKPublicKey node_pks_conv_8_ref;
-               CHECK(node_pks_conv_8->arr_len == 33);
-               memcpy(node_pks_conv_8_ref.compressed_form, node_pks_conv_8->elems, 33); FREE(node_pks_conv_8);
-               node_pks_constr.data[i] = node_pks_conv_8_ref;
-       }
-       FREE(node_pks);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = BlindedPath_new_for_message(node_pks_constr, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_CoinSelection_free(int64_t this_obj) {
+       LDKCoinSelection this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       CoinSelection_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_BlindedPath_one_hop_for_payment(int8_tArray payee_node_id, int64_t payee_tlvs, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
-       LDKPublicKey payee_node_id_ref;
-       CHECK(payee_node_id->arr_len == 33);
-       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
-       LDKReceiveTlvs payee_tlvs_conv;
-       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
-       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
-       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+int64_tArray  CS_LDK_CoinSelection_get_confirmed_utxos(int64_t this_ptr) {
+       LDKCoinSelection this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_UtxoZ ret_var = CoinSelection_get_confirmed_utxos(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               LDKUtxo ret_conv_6_var = ret_var.data[g];
+               int64_t ret_conv_6_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
+               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
+               ret_arr_ptr[g] = ret_conv_6_ref;
        }
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = BlindedPath_one_hop_for_payment(payee_node_id_ref, payee_tlvs_conv, min_final_cltv_expiry_delta, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_BlindedPath_new_for_payment(int64_tArray intermediate_nodes, int8_tArray payee_node_id, int64_t payee_tlvs, int64_t htlc_maximum_msat, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
-       LDKCVec_ForwardNodeZ intermediate_nodes_constr;
-       intermediate_nodes_constr.datalen = intermediate_nodes->arr_len;
-       if (intermediate_nodes_constr.datalen > 0)
-               intermediate_nodes_constr.data = MALLOC(intermediate_nodes_constr.datalen * sizeof(LDKForwardNode), "LDKCVec_ForwardNodeZ Elements");
-       else
-               intermediate_nodes_constr.data = NULL;
-       int64_t* intermediate_nodes_vals = intermediate_nodes->elems;
-       for (size_t n = 0; n < intermediate_nodes_constr.datalen; n++) {
-               int64_t intermediate_nodes_conv_13 = intermediate_nodes_vals[n];
-               LDKForwardNode intermediate_nodes_conv_13_conv;
-               intermediate_nodes_conv_13_conv.inner = untag_ptr(intermediate_nodes_conv_13);
-               intermediate_nodes_conv_13_conv.is_owned = ptr_is_owned(intermediate_nodes_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(intermediate_nodes_conv_13_conv);
-               intermediate_nodes_conv_13_conv = ForwardNode_clone(&intermediate_nodes_conv_13_conv);
-               intermediate_nodes_constr.data[n] = intermediate_nodes_conv_13_conv;
-       }
-       FREE(intermediate_nodes);
-       LDKPublicKey payee_node_id_ref;
-       CHECK(payee_node_id->arr_len == 33);
-       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
-       LDKReceiveTlvs payee_tlvs_conv;
-       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
-       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
-       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = BlindedPath_new_for_payment(intermediate_nodes_constr, payee_node_id_ref, payee_tlvs_conv, htlc_maximum_msat, min_final_cltv_expiry_delta, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_BlindedPath_public_introduction_node_id(int64_t this_arg, int64_t network_graph) {
-       LDKBlindedPath this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKReadOnlyNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKNodeId ret_var = BlindedPath_public_introduction_node_id(&this_arg_conv, &network_graph_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_BlindedPath_write(int64_t obj) {
-       LDKBlindedPath obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPath_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_BlindedPath_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = BlindedPath_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_BlindedHop_write(int64_t obj) {
-       LDKBlindedHop obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_BlindedHop_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
-       *ret_conv = BlindedHop_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_ForwardNode_free(int64_t this_obj) {
-       LDKForwardNode this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ForwardNode_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ForwardNode_get_tlvs(int64_t this_ptr) {
-       LDKForwardNode this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKForwardTlvs ret_var = ForwardNode_get_tlvs(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ForwardNode_set_tlvs(int64_t this_ptr, int64_t val) {
-       LDKForwardNode this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKForwardTlvs val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ForwardTlvs_clone(&val_conv);
-       ForwardNode_set_tlvs(&this_ptr_conv, val_conv);
-}
-
-int8_tArray  CS_LDK_ForwardNode_get_node_id(int64_t this_ptr) {
-       LDKForwardNode this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, ForwardNode_get_node_id(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_ForwardNode_set_node_id(int64_t this_ptr, int8_tArray val) {
-       LDKForwardNode this_ptr_conv;
+void  CS_LDK_CoinSelection_set_confirmed_utxos(int64_t this_ptr, int64_tArray val) {
+       LDKCoinSelection this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       ForwardNode_set_node_id(&this_ptr_conv, val_ref);
+       LDKCVec_UtxoZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               LDKUtxo val_conv_6_conv;
+               val_conv_6_conv.inner = untag_ptr(val_conv_6);
+               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
+               val_conv_6_conv = Utxo_clone(&val_conv_6_conv);
+               val_constr.data[g] = val_conv_6_conv;
+       }
+       FREE(val);
+       CoinSelection_set_confirmed_utxos(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_ForwardNode_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKForwardNode this_ptr_conv;
+int64_t  CS_LDK_CoinSelection_get_change_output(int64_t this_ptr) {
+       LDKCoinSelection this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ForwardNode_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_TxOutZ *ret_copy = MALLOC(sizeof(LDKCOption_TxOutZ), "LDKCOption_TxOutZ");
+       *ret_copy = CoinSelection_get_change_output(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ForwardNode_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKForwardNode this_ptr_conv;
+void  CS_LDK_CoinSelection_set_change_output(int64_t this_ptr, int64_t val) {
+       LDKCoinSelection this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ForwardNode_set_htlc_maximum_msat(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_TxOutZ val_conv = *(LDKCOption_TxOutZ*)(val_ptr);
+       val_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(val));
+       CoinSelection_set_change_output(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ForwardNode_new(int64_t tlvs_arg, int8_tArray node_id_arg, int64_t htlc_maximum_msat_arg) {
-       LDKForwardTlvs tlvs_arg_conv;
-       tlvs_arg_conv.inner = untag_ptr(tlvs_arg);
-       tlvs_arg_conv.is_owned = ptr_is_owned(tlvs_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_arg_conv);
-       tlvs_arg_conv = ForwardTlvs_clone(&tlvs_arg_conv);
-       LDKPublicKey node_id_arg_ref;
-       CHECK(node_id_arg->arr_len == 33);
-       memcpy(node_id_arg_ref.compressed_form, node_id_arg->elems, 33); FREE(node_id_arg);
-       LDKForwardNode ret_var = ForwardNode_new(tlvs_arg_conv, node_id_arg_ref, htlc_maximum_msat_arg);
+int64_t  CS_LDK_CoinSelection_new(int64_tArray confirmed_utxos_arg, int64_t change_output_arg) {
+       LDKCVec_UtxoZ confirmed_utxos_arg_constr;
+       confirmed_utxos_arg_constr.datalen = confirmed_utxos_arg->arr_len;
+       if (confirmed_utxos_arg_constr.datalen > 0)
+               confirmed_utxos_arg_constr.data = MALLOC(confirmed_utxos_arg_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
+       else
+               confirmed_utxos_arg_constr.data = NULL;
+       int64_t* confirmed_utxos_arg_vals = confirmed_utxos_arg->elems;
+       for (size_t g = 0; g < confirmed_utxos_arg_constr.datalen; g++) {
+               int64_t confirmed_utxos_arg_conv_6 = confirmed_utxos_arg_vals[g];
+               LDKUtxo confirmed_utxos_arg_conv_6_conv;
+               confirmed_utxos_arg_conv_6_conv.inner = untag_ptr(confirmed_utxos_arg_conv_6);
+               confirmed_utxos_arg_conv_6_conv.is_owned = ptr_is_owned(confirmed_utxos_arg_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(confirmed_utxos_arg_conv_6_conv);
+               confirmed_utxos_arg_conv_6_conv = Utxo_clone(&confirmed_utxos_arg_conv_6_conv);
+               confirmed_utxos_arg_constr.data[g] = confirmed_utxos_arg_conv_6_conv;
+       }
+       FREE(confirmed_utxos_arg);
+       void* change_output_arg_ptr = untag_ptr(change_output_arg);
+       CHECK_ACCESS(change_output_arg_ptr);
+       LDKCOption_TxOutZ change_output_arg_conv = *(LDKCOption_TxOutZ*)(change_output_arg_ptr);
+       change_output_arg_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(change_output_arg));
+       LDKCoinSelection ret_var = CoinSelection_new(confirmed_utxos_arg_constr, change_output_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ForwardNode_clone_ptr(LDKForwardNode *NONNULL_PTR arg) {
-       LDKForwardNode ret_var = ForwardNode_clone(arg);
+static inline uint64_t CoinSelection_clone_ptr(LDKCoinSelection *NONNULL_PTR arg) {
+       LDKCoinSelection ret_var = CoinSelection_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ForwardNode_clone_ptr(int64_t arg) {
-       LDKForwardNode arg_conv;
+int64_t  CS_LDK_CoinSelection_clone_ptr(int64_t arg) {
+       LDKCoinSelection arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ForwardNode_clone_ptr(&arg_conv);
+       int64_t ret_conv = CoinSelection_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ForwardNode_clone(int64_t orig) {
-       LDKForwardNode orig_conv;
+int64_t  CS_LDK_CoinSelection_clone(int64_t orig) {
+       LDKCoinSelection orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKForwardNode ret_var = ForwardNode_clone(&orig_conv);
+       LDKCoinSelection ret_var = CoinSelection_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ForwardTlvs_free(int64_t this_obj) {
-       LDKForwardTlvs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ForwardTlvs_free(this_obj_conv);
+void  CS_LDK_CoinSelectionSource_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCoinSelectionSource this_ptr_conv = *(LDKCoinSelectionSource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CoinSelectionSource_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_get_short_channel_id(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ForwardTlvs_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+void  CS_LDK_WalletSource_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWalletSource this_ptr_conv = *(LDKWalletSource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WalletSource_free(this_ptr_conv);
 }
 
-void  CS_LDK_ForwardTlvs_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ForwardTlvs_set_short_channel_id(&this_ptr_conv, val);
+void  CS_LDK_Wallet_free(int64_t this_obj) {
+       LDKWallet this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Wallet_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_get_payment_relay(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentRelay ret_var = ForwardTlvs_get_payment_relay(&this_ptr_conv);
+int64_t  CS_LDK_Wallet_new(int64_t source, int64_t logger) {
+       void* source_ptr = untag_ptr(source);
+       CHECK_ACCESS(source_ptr);
+       LDKWalletSource source_conv = *(LDKWalletSource*)(source_ptr);
+       if (source_conv.free == LDKWalletSource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKWalletSource_JCalls_cloned(&source_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKWallet ret_var = Wallet_new(source_conv, logger_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ForwardTlvs_set_payment_relay(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentRelay val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentRelay_clone(&val_conv);
-       ForwardTlvs_set_payment_relay(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_ForwardTlvs_get_payment_constraints(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints ret_var = ForwardTlvs_get_payment_constraints(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_Wallet_as_CoinSelectionSource(int64_t this_arg) {
+       LDKWallet this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCoinSelectionSource* ret_ret = MALLOC(sizeof(LDKCoinSelectionSource), "LDKCoinSelectionSource");
+       *ret_ret = Wallet_as_CoinSelectionSource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ForwardTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentConstraints_clone(&val_conv);
-       ForwardTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
+void  CS_LDK_BumpTransactionEventHandler_free(int64_t this_obj) {
+       LDKBumpTransactionEventHandler this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BumpTransactionEventHandler_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_get_features(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = ForwardTlvs_get_features(&this_ptr_conv);
+int64_t  CS_LDK_BumpTransactionEventHandler_new(int64_t broadcaster, int64_t utxo_source, int64_t signer_provider, int64_t logger) {
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       CHECK_ACCESS(broadcaster_ptr);
+       LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(broadcaster_ptr);
+       if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKBroadcasterInterface_JCalls_cloned(&broadcaster_conv);
+       }
+       void* utxo_source_ptr = untag_ptr(utxo_source);
+       CHECK_ACCESS(utxo_source_ptr);
+       LDKCoinSelectionSource utxo_source_conv = *(LDKCoinSelectionSource*)(utxo_source_ptr);
+       if (utxo_source_conv.free == LDKCoinSelectionSource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCoinSelectionSource_JCalls_cloned(&utxo_source_conv);
+       }
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       CHECK_ACCESS(signer_provider_ptr);
+       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
+       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKBumpTransactionEventHandler ret_var = BumpTransactionEventHandler_new(broadcaster_conv, utxo_source_conv, signer_provider_conv, logger_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ForwardTlvs_set_features(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedHopFeatures_clone(&val_conv);
-       ForwardTlvs_set_features(&this_ptr_conv, val_conv);
+void  CS_LDK_BumpTransactionEventHandler_handle_event(int64_t this_arg, int64_t event) {
+       LDKBumpTransactionEventHandler this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBumpTransactionEvent* event_conv = (LDKBumpTransactionEvent*)untag_ptr(event);
+       BumpTransactionEventHandler_handle_event(&this_arg_conv, event_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_new(int64_t short_channel_id_arg, int64_t payment_relay_arg, int64_t payment_constraints_arg, int64_t features_arg) {
-       LDKPaymentRelay payment_relay_arg_conv;
-       payment_relay_arg_conv.inner = untag_ptr(payment_relay_arg);
-       payment_relay_arg_conv.is_owned = ptr_is_owned(payment_relay_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_relay_arg_conv);
-       payment_relay_arg_conv = PaymentRelay_clone(&payment_relay_arg_conv);
-       LDKPaymentConstraints payment_constraints_arg_conv;
-       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
-       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
-       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
-       LDKBlindedHopFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
-       LDKForwardTlvs ret_var = ForwardTlvs_new(short_channel_id_arg, payment_relay_arg_conv, payment_constraints_arg_conv, features_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_eq(int64_t a, int64_t b) {
+       LDKInitFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKInitFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-static inline uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg) {
-       LDKForwardTlvs ret_var = ForwardTlvs_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_ForwardTlvs_clone_ptr(int64_t arg) {
-       LDKForwardTlvs arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ForwardTlvs_clone_ptr(&arg_conv);
+jboolean  CS_LDK_NodeFeatures_eq(int64_t a, int64_t b) {
+       LDKNodeFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ForwardTlvs_clone(int64_t orig) {
-       LDKForwardTlvs orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKForwardTlvs ret_var = ForwardTlvs_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelFeatures_eq(int64_t a, int64_t b) {
+       LDKChannelFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ReceiveTlvs_free(int64_t this_obj) {
-       LDKReceiveTlvs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ReceiveTlvs_free(this_obj_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_eq(int64_t a, int64_t b) {
+       LDKBolt11InvoiceFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_ReceiveTlvs_get_payment_secret(int64_t this_ptr) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *ReceiveTlvs_get_payment_secret(&this_ptr_conv), 32);
-       return ret_arr;
+jboolean  CS_LDK_OfferFeatures_eq(int64_t a, int64_t b) {
+       LDKOfferFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKOfferFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ReceiveTlvs_set_payment_secret(int64_t this_ptr, int8_tArray val) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       ReceiveTlvs_set_payment_secret(&this_ptr_conv, val_ref);
+jboolean  CS_LDK_InvoiceRequestFeatures_eq(int64_t a, int64_t b) {
+       LDKInvoiceRequestFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKInvoiceRequestFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ReceiveTlvs_get_payment_constraints(int64_t this_ptr) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints ret_var = ReceiveTlvs_get_payment_constraints(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ReceiveTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentConstraints_clone(&val_conv);
-       ReceiveTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_ReceiveTlvs_get_payment_context(int64_t this_ptr) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = ReceiveTlvs_get_payment_context(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt12InvoiceFeatures_eq(int64_t a, int64_t b) {
+       LDKBolt12InvoiceFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ReceiveTlvs_set_payment_context(int64_t this_ptr, int64_t val) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKPaymentContext val_conv = *(LDKPaymentContext*)(val_ptr);
-       val_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(val));
-       ReceiveTlvs_set_payment_context(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_BlindedHopFeatures_eq(int64_t a, int64_t b) {
+       LDKBlindedHopFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedHopFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ReceiveTlvs_new(int8_tArray payment_secret_arg, int64_t payment_constraints_arg, int64_t payment_context_arg) {
-       LDKThirtyTwoBytes payment_secret_arg_ref;
-       CHECK(payment_secret_arg->arr_len == 32);
-       memcpy(payment_secret_arg_ref.data, payment_secret_arg->elems, 32); FREE(payment_secret_arg);
-       LDKPaymentConstraints payment_constraints_arg_conv;
-       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
-       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
-       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
-       void* payment_context_arg_ptr = untag_ptr(payment_context_arg);
-       CHECK_ACCESS(payment_context_arg_ptr);
-       LDKPaymentContext payment_context_arg_conv = *(LDKPaymentContext*)(payment_context_arg_ptr);
-       payment_context_arg_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(payment_context_arg));
-       LDKReceiveTlvs ret_var = ReceiveTlvs_new(payment_secret_arg_ref, payment_constraints_arg_conv, payment_context_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_eq(int64_t a, int64_t b) {
+       LDKChannelTypeFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelTypeFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-static inline uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg) {
-       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(arg);
+static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
+       LDKInitFeatures ret_var = InitFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ReceiveTlvs_clone_ptr(int64_t arg) {
-       LDKReceiveTlvs arg_conv;
+int64_t  CS_LDK_InitFeatures_clone_ptr(int64_t arg) {
+       LDKInitFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ReceiveTlvs_clone_ptr(&arg_conv);
+       int64_t ret_conv = InitFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ReceiveTlvs_clone(int64_t orig) {
-       LDKReceiveTlvs orig_conv;
+int64_t  CS_LDK_InitFeatures_clone(int64_t orig) {
+       LDKInitFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(&orig_conv);
+       LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentRelay_free(int64_t this_obj) {
-       LDKPaymentRelay this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentRelay_free(this_obj_conv);
-}
-
-int16_t  CS_LDK_PaymentRelay_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = PaymentRelay_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_PaymentRelay_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentRelay_set_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-int32_t  CS_LDK_PaymentRelay_get_fee_proportional_millionths(int64_t this_ptr) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentRelay_get_fee_proportional_millionths(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_PaymentRelay_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentRelay_set_fee_proportional_millionths(&this_ptr_conv, val);
+static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
+       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int32_t  CS_LDK_PaymentRelay_get_fee_base_msat(int64_t this_ptr) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentRelay_get_fee_base_msat(&this_ptr_conv);
+int64_t  CS_LDK_NodeFeatures_clone_ptr(int64_t arg) {
+       LDKNodeFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = NodeFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_PaymentRelay_set_fee_base_msat(int64_t this_ptr, int32_t val) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentRelay_set_fee_base_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_PaymentRelay_new(int16_t cltv_expiry_delta_arg, int32_t fee_proportional_millionths_arg, int32_t fee_base_msat_arg) {
-       LDKPaymentRelay ret_var = PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
+int64_t  CS_LDK_NodeFeatures_clone(int64_t orig) {
+       LDKNodeFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg) {
-       LDKPaymentRelay ret_var = PaymentRelay_clone(arg);
+static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PaymentRelay_clone_ptr(int64_t arg) {
-       LDKPaymentRelay arg_conv;
+int64_t  CS_LDK_ChannelFeatures_clone_ptr(int64_t arg) {
+       LDKChannelFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentRelay_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentRelay_clone(int64_t orig) {
-       LDKPaymentRelay orig_conv;
+int64_t  CS_LDK_ChannelFeatures_clone(int64_t orig) {
+       LDKChannelFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentRelay ret_var = PaymentRelay_clone(&orig_conv);
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentConstraints_free(int64_t this_obj) {
-       LDKPaymentConstraints this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentConstraints_free(this_obj_conv);
-}
-
-int32_t  CS_LDK_PaymentConstraints_get_max_cltv_expiry(int64_t this_ptr) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentConstraints_get_max_cltv_expiry(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_PaymentConstraints_set_max_cltv_expiry(int64_t this_ptr, int32_t val) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentConstraints_set_max_cltv_expiry(&this_ptr_conv, val);
+static inline uint64_t Bolt11InvoiceFeatures_clone_ptr(LDKBolt11InvoiceFeatures *NONNULL_PTR arg) {
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int64_t  CS_LDK_PaymentConstraints_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = PaymentConstraints_get_htlc_minimum_msat(&this_ptr_conv);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_clone_ptr(int64_t arg) {
+       LDKBolt11InvoiceFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt11InvoiceFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_PaymentConstraints_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentConstraints_set_htlc_minimum_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_PaymentConstraints_new(int32_t max_cltv_expiry_arg, int64_t htlc_minimum_msat_arg) {
-       LDKPaymentConstraints ret_var = PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_clone(int64_t orig) {
+       LDKBolt11InvoiceFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg) {
-       LDKPaymentConstraints ret_var = PaymentConstraints_clone(arg);
+static inline uint64_t OfferFeatures_clone_ptr(LDKOfferFeatures *NONNULL_PTR arg) {
+       LDKOfferFeatures ret_var = OfferFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PaymentConstraints_clone_ptr(int64_t arg) {
-       LDKPaymentConstraints arg_conv;
+int64_t  CS_LDK_OfferFeatures_clone_ptr(int64_t arg) {
+       LDKOfferFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentConstraints_clone_ptr(&arg_conv);
+       int64_t ret_conv = OfferFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentConstraints_clone(int64_t orig) {
-       LDKPaymentConstraints orig_conv;
+int64_t  CS_LDK_OfferFeatures_clone(int64_t orig) {
+       LDKOfferFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentConstraints ret_var = PaymentConstraints_clone(&orig_conv);
+       LDKOfferFeatures ret_var = OfferFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentContext_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPaymentContext this_ptr_conv = *(LDKPaymentContext*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PaymentContext_free(this_ptr_conv);
-}
-
-static inline uint64_t PaymentContext_clone_ptr(LDKPaymentContext *NONNULL_PTR arg) {
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_PaymentContext_clone_ptr(int64_t arg) {
-       LDKPaymentContext* arg_conv = (LDKPaymentContext*)untag_ptr(arg);
-       int64_t ret_conv = PaymentContext_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_PaymentContext_clone(int64_t orig) {
-       LDKPaymentContext* orig_conv = (LDKPaymentContext*)untag_ptr(orig);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentContext_unknown(int64_t a) {
-       LDKUnknownPaymentContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = UnknownPaymentContext_clone(&a_conv);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_unknown(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentContext_bolt12_offer(int64_t a) {
-       LDKBolt12OfferContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12OfferContext_clone(&a_conv);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_bolt12_offer(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentContext_bolt12_refund(int64_t a) {
-       LDKBolt12RefundContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12RefundContext_clone(&a_conv);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_bolt12_refund(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_PaymentContext_eq(int64_t a, int64_t b) {
-       LDKPaymentContext* a_conv = (LDKPaymentContext*)untag_ptr(a);
-       LDKPaymentContext* b_conv = (LDKPaymentContext*)untag_ptr(b);
-       jboolean ret_conv = PaymentContext_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_UnknownPaymentContext_free(int64_t this_obj) {
-       LDKUnknownPaymentContext this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnknownPaymentContext_free(this_obj_conv);
-}
-
-static inline uint64_t UnknownPaymentContext_clone_ptr(LDKUnknownPaymentContext *NONNULL_PTR arg) {
-       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(arg);
+static inline uint64_t InvoiceRequestFeatures_clone_ptr(LDKInvoiceRequestFeatures *NONNULL_PTR arg) {
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_UnknownPaymentContext_clone_ptr(int64_t arg) {
-       LDKUnknownPaymentContext arg_conv;
+int64_t  CS_LDK_InvoiceRequestFeatures_clone_ptr(int64_t arg) {
+       LDKInvoiceRequestFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = UnknownPaymentContext_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvoiceRequestFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UnknownPaymentContext_clone(int64_t orig) {
-       LDKUnknownPaymentContext orig_conv;
+int64_t  CS_LDK_InvoiceRequestFeatures_clone(int64_t orig) {
+       LDKInvoiceRequestFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(&orig_conv);
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_UnknownPaymentContext_eq(int64_t a, int64_t b) {
-       LDKUnknownPaymentContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKUnknownPaymentContext b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = UnknownPaymentContext_eq(&a_conv, &b_conv);
-       return ret_conv;
+static inline uint64_t Bolt12InvoiceFeatures_clone_ptr(LDKBolt12InvoiceFeatures *NONNULL_PTR arg) {
+       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-void  CS_LDK_Bolt12OfferContext_free(int64_t this_obj) {
-       LDKBolt12OfferContext this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12OfferContext_free(this_obj_conv);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_clone_ptr(int64_t arg) {
+       LDKBolt12InvoiceFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12InvoiceFeatures_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_get_offer_id(int64_t this_ptr) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOfferId ret_var = Bolt12OfferContext_get_offer_id(&this_ptr_conv);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_clone(int64_t orig) {
+       LDKBolt12InvoiceFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Bolt12OfferContext_set_offer_id(int64_t this_ptr, int64_t val) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOfferId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OfferId_clone(&val_conv);
-       Bolt12OfferContext_set_offer_id(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_Bolt12OfferContext_get_invoice_request(int64_t this_ptr) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKInvoiceRequestFields ret_var = Bolt12OfferContext_get_invoice_request(&this_ptr_conv);
+static inline uint64_t BlindedHopFeatures_clone_ptr(LDKBlindedHopFeatures *NONNULL_PTR arg) {
+       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-void  CS_LDK_Bolt12OfferContext_set_invoice_request(int64_t this_ptr, int64_t val) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKInvoiceRequestFields val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = InvoiceRequestFields_clone(&val_conv);
-       Bolt12OfferContext_set_invoice_request(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_BlindedHopFeatures_clone_ptr(int64_t arg) {
+       LDKBlindedHopFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedHopFeatures_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_new(int64_t offer_id_arg, int64_t invoice_request_arg) {
-       LDKOfferId offer_id_arg_conv;
-       offer_id_arg_conv.inner = untag_ptr(offer_id_arg);
-       offer_id_arg_conv.is_owned = ptr_is_owned(offer_id_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(offer_id_arg_conv);
-       offer_id_arg_conv = OfferId_clone(&offer_id_arg_conv);
-       LDKInvoiceRequestFields invoice_request_arg_conv;
-       invoice_request_arg_conv.inner = untag_ptr(invoice_request_arg);
-       invoice_request_arg_conv.is_owned = ptr_is_owned(invoice_request_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_arg_conv);
-       invoice_request_arg_conv = InvoiceRequestFields_clone(&invoice_request_arg_conv);
-       LDKBolt12OfferContext ret_var = Bolt12OfferContext_new(offer_id_arg_conv, invoice_request_arg_conv);
+int64_t  CS_LDK_BlindedHopFeatures_clone(int64_t orig) {
+       LDKBlindedHopFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt12OfferContext_clone_ptr(LDKBolt12OfferContext *NONNULL_PTR arg) {
-       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(arg);
+static inline uint64_t ChannelTypeFeatures_clone_ptr(LDKChannelTypeFeatures *NONNULL_PTR arg) {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12OfferContext_clone_ptr(int64_t arg) {
-       LDKBolt12OfferContext arg_conv;
+int64_t  CS_LDK_ChannelTypeFeatures_clone_ptr(int64_t arg) {
+       LDKChannelTypeFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12OfferContext_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelTypeFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_clone(int64_t orig) {
-       LDKBolt12OfferContext orig_conv;
+int64_t  CS_LDK_ChannelTypeFeatures_clone(int64_t orig) {
+       LDKChannelTypeFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(&orig_conv);
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12OfferContext_eq(int64_t a, int64_t b) {
-       LDKBolt12OfferContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt12OfferContext b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt12OfferContext_eq(&a_conv, &b_conv);
+int64_t  CS_LDK_InitFeatures_hash(int64_t o) {
+       LDKInitFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = InitFeatures_hash(&o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Bolt12RefundContext_free(int64_t this_obj) {
-       LDKBolt12RefundContext this_obj_conv;
+int64_t  CS_LDK_NodeFeatures_hash(int64_t o) {
+       LDKNodeFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = NodeFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelFeatures_hash(int64_t o) {
+       LDKChannelFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Bolt11InvoiceFeatures_hash(int64_t o) {
+       LDKBolt11InvoiceFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Bolt11InvoiceFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OfferFeatures_hash(int64_t o) {
+       LDKOfferFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = OfferFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_InvoiceRequestFeatures_hash(int64_t o) {
+       LDKInvoiceRequestFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = InvoiceRequestFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Bolt12InvoiceFeatures_hash(int64_t o) {
+       LDKBolt12InvoiceFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Bolt12InvoiceFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_BlindedHopFeatures_hash(int64_t o) {
+       LDKBlindedHopFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedHopFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_hash(int64_t o) {
+       LDKChannelTypeFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelTypeFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_free(int64_t this_obj) {
+       LDKInitFeatures this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12RefundContext_free(this_obj_conv);
+       InitFeatures_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Bolt12RefundContext_new() {
-       LDKBolt12RefundContext ret_var = Bolt12RefundContext_new();
+void  CS_LDK_NodeFeatures_free(int64_t this_obj) {
+       LDKNodeFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_ChannelFeatures_free(int64_t this_obj) {
+       LDKChannelFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_free(int64_t this_obj) {
+       LDKBolt11InvoiceFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt11InvoiceFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_OfferFeatures_free(int64_t this_obj) {
+       LDKOfferFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_InvoiceRequestFeatures_free(int64_t this_obj) {
+       LDKInvoiceRequestFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequestFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_Bolt12InvoiceFeatures_free(int64_t this_obj) {
+       LDKBolt12InvoiceFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12InvoiceFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_BlindedHopFeatures_free(int64_t this_obj) {
+       LDKBlindedHopFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedHopFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_free(int64_t this_obj) {
+       LDKChannelTypeFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelTypeFeatures_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_Bolt11InvoiceFeatures_for_keysend(jboolean allow_mpp) {
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_for_keysend(allow_mpp);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt12RefundContext_clone_ptr(LDKBolt12RefundContext *NONNULL_PTR arg) {
-       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(arg);
+int64_t  CS_LDK_ChannelTypeFeatures_only_static_remote_key() {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_only_static_remote_key();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12RefundContext_clone_ptr(int64_t arg) {
-       LDKBolt12RefundContext arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12RefundContext_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Bolt12RefundContext_clone(int64_t orig) {
-       LDKBolt12RefundContext orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(&orig_conv);
+int64_t  CS_LDK_ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies() {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12RefundContext_eq(int64_t a, int64_t b) {
-       LDKBolt12RefundContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt12RefundContext b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt12RefundContext_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_ForwardTlvs_write(int64_t obj) {
-       LDKForwardTlvs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ForwardTlvs_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InitFeatures_empty() {
+       LDKInitFeatures ret_var = InitFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_ReceiveTlvs_write(int64_t obj) {
-       LDKReceiveTlvs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ReceiveTlvs_write(&obj_conv);
+int8_tArray  CS_LDK_InitFeatures_le_flags(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = InitFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int8_tArray  CS_LDK_PaymentRelay_write(int64_t obj) {
-       LDKPaymentRelay obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentRelay_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_InitFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentRelay_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
-       *ret_conv = PaymentRelay_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_InitFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInitFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_PaymentConstraints_write(int64_t obj) {
-       LDKPaymentConstraints obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentConstraints_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int64_tArray  CS_LDK_InitFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInitFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = InitFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_PaymentConstraints_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
-       *ret_conv = PaymentConstraints_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_InitFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_PaymentContext_write(int64_t obj) {
-       LDKPaymentContext* obj_conv = (LDKPaymentContext*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PaymentContext_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_InitFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentContextDecodeErrorZ), "LDKCResult_PaymentContextDecodeErrorZ");
-       *ret_conv = PaymentContext_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_InitFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_required_feature_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnknownPaymentContext_write(int64_t obj) {
-       LDKUnknownPaymentContext obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UnknownPaymentContext_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InitFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnknownPaymentContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_UnknownPaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnknownPaymentContextDecodeErrorZ), "LDKCResult_UnknownPaymentContextDecodeErrorZ");
-       *ret_conv = UnknownPaymentContext_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_InitFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_required_custom_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_Bolt12OfferContext_write(int64_t obj) {
-       LDKBolt12OfferContext obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12OfferContext_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InitFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_Bolt12OfferContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12OfferContextDecodeErrorZ), "LDKCResult_Bolt12OfferContextDecodeErrorZ");
-       *ret_conv = Bolt12OfferContext_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_NodeFeatures_empty() {
+       LDKNodeFeatures ret_var = NodeFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_Bolt12RefundContext_write(int64_t obj) {
-       LDKBolt12RefundContext obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12RefundContext_write(&obj_conv);
+int8_tArray  CS_LDK_NodeFeatures_le_flags(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = NodeFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Bolt12RefundContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_Bolt12RefundContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12RefundContextDecodeErrorZ), "LDKCResult_Bolt12RefundContextDecodeErrorZ");
-       *ret_conv = Bolt12RefundContext_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_NodeFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_PaymentPurpose_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPaymentPurpose this_ptr_conv = *(LDKPaymentPurpose*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PaymentPurpose_free(this_ptr_conv);
+jboolean  CS_LDK_NodeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_NodeFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = NodeFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
-int64_t  CS_LDK_PaymentPurpose_clone_ptr(int64_t arg) {
-       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)untag_ptr(arg);
-       int64_t ret_conv = PaymentPurpose_clone_ptr(arg_conv);
+
+jboolean  CS_LDK_NodeFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentPurpose_clone(int64_t orig) {
-       LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)untag_ptr(orig);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentPurpose_bolt11_invoice_payment(int64_t payment_preimage, int8_tArray payment_secret) {
-       void* payment_preimage_ptr = untag_ptr(payment_preimage);
-       CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_bolt11_invoice_payment(payment_preimage_conv, payment_secret_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentPurpose_bolt12_offer_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
-       void* payment_preimage_ptr = untag_ptr(payment_preimage);
-       CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKBolt12OfferContext payment_context_conv;
-       payment_context_conv.inner = untag_ptr(payment_context);
-       payment_context_conv.is_owned = ptr_is_owned(payment_context);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
-       payment_context_conv = Bolt12OfferContext_clone(&payment_context_conv);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_bolt12_offer_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentPurpose_bolt12_refund_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
-       void* payment_preimage_ptr = untag_ptr(payment_preimage);
-       CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKBolt12RefundContext payment_context_conv;
-       payment_context_conv.inner = untag_ptr(payment_context);
-       payment_context_conv.is_owned = ptr_is_owned(payment_context);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
-       payment_context_conv = Bolt12RefundContext_clone(&payment_context_conv);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_bolt12_refund_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentPurpose_spontaneous_payment(int8_tArray a) {
-       LDKThirtyTwoBytes a_ref;
-       CHECK(a->arr_len == 32);
-       memcpy(a_ref.data, a->elems, 32); FREE(a);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_spontaneous_payment(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_PaymentPurpose_eq(int64_t a, int64_t b) {
-       LDKPaymentPurpose* a_conv = (LDKPaymentPurpose*)untag_ptr(a);
-       LDKPaymentPurpose* b_conv = (LDKPaymentPurpose*)untag_ptr(b);
-       jboolean ret_conv = PaymentPurpose_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_PaymentPurpose_preimage(int64_t this_arg) {
-       LDKPaymentPurpose* this_arg_conv = (LDKPaymentPurpose*)untag_ptr(this_arg);
-       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
-       *ret_copy = PaymentPurpose_preimage(this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_PaymentPurpose_write(int64_t obj) {
-       LDKPaymentPurpose* obj_conv = (LDKPaymentPurpose*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PaymentPurpose_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_NodeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_PaymentPurpose_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentPurposeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPurposeDecodeErrorZ), "LDKCResult_PaymentPurposeDecodeErrorZ");
-       *ret_conv = PaymentPurpose_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_NodeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_required_custom_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ClaimedHTLC_free(int64_t this_obj) {
-       LDKClaimedHTLC this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ClaimedHTLC_free(this_obj_conv);
+int64_t  CS_LDK_NodeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClaimedHTLC_get_channel_id(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelId ret_var = ClaimedHTLC_get_channel_id(&this_ptr_conv);
+int64_t  CS_LDK_ChannelFeatures_empty() {
+       LDKChannelFeatures ret_var = ChannelFeatures_empty();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ClaimedHTLC_set_channel_id(int64_t this_ptr, int64_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelId_clone(&val_conv);
-       ClaimedHTLC_set_channel_id(&this_ptr_conv, val_conv);
-}
-
-int8_tArray  CS_LDK_ClaimedHTLC_get_user_channel_id(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(16, __LINE__);
-       memcpy(ret_arr->elems, ClaimedHTLC_get_user_channel_id(&this_ptr_conv).le_bytes, 16);
+int8_tArray  CS_LDK_ChannelFeatures_le_flags(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = ChannelFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        return ret_arr;
 }
 
-void  CS_LDK_ClaimedHTLC_set_user_channel_id(int64_t this_ptr, int8_tArray val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKU128 val_ref;
-       CHECK(val->arr_len == 16);
-       memcpy(val_ref.le_bytes, val->elems, 16); FREE(val);
-       ClaimedHTLC_set_user_channel_id(&this_ptr_conv, val_ref);
+jboolean  CS_LDK_ChannelFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int32_t  CS_LDK_ClaimedHTLC_get_cltv_expiry(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = ClaimedHTLC_get_cltv_expiry(&this_ptr_conv);
+jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ClaimedHTLC_set_cltv_expiry(int64_t this_ptr, int32_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ClaimedHTLC_set_cltv_expiry(&this_ptr_conv, val);
+int64_tArray  CS_LDK_ChannelFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = ChannelFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ClaimedHTLC_get_value_msat(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ClaimedHTLC_get_value_msat(&this_ptr_conv);
+jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ClaimedHTLC_set_value_msat(int64_t this_ptr, int64_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ClaimedHTLC_set_value_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ClaimedHTLC_get_counterparty_skimmed_fee_msat(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ClaimedHTLC_get_counterparty_skimmed_fee_msat(&this_ptr_conv);
+jboolean  CS_LDK_ChannelFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_supports_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ClaimedHTLC_set_counterparty_skimmed_fee_msat(int64_t this_ptr, int64_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ClaimedHTLC_set_counterparty_skimmed_fee_msat(&this_ptr_conv, val);
+int64_t  CS_LDK_ChannelFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClaimedHTLC_new(int64_t channel_id_arg, int8_tArray user_channel_id_arg, int32_t cltv_expiry_arg, int64_t value_msat_arg, int64_t counterparty_skimmed_fee_msat_arg) {
-       LDKChannelId channel_id_arg_conv;
-       channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
-       channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
-       channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKU128 user_channel_id_arg_ref;
-       CHECK(user_channel_id_arg->arr_len == 16);
-       memcpy(user_channel_id_arg_ref.le_bytes, user_channel_id_arg->elems, 16); FREE(user_channel_id_arg);
-       LDKClaimedHTLC ret_var = ClaimedHTLC_new(channel_id_arg_conv, user_channel_id_arg_ref, cltv_expiry_arg, value_msat_arg, counterparty_skimmed_fee_msat_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_ChannelFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg) {
-       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_ChannelFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_ClaimedHTLC_clone_ptr(int64_t arg) {
-       LDKClaimedHTLC arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ClaimedHTLC_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_t  CS_LDK_ChannelFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClaimedHTLC_clone(int64_t orig) {
-       LDKClaimedHTLC orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(&orig_conv);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_empty() {
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_empty();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ClaimedHTLC_eq(int64_t a, int64_t b) {
-       LDKClaimedHTLC a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKClaimedHTLC b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ClaimedHTLC_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_ClaimedHTLC_write(int64_t obj) {
-       LDKClaimedHTLC obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ClaimedHTLC_write(&obj_conv);
+int8_tArray  CS_LDK_Bolt11InvoiceFeatures_le_flags(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Bolt11InvoiceFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ClaimedHTLC_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
-       *ret_conv = ClaimedHTLC_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_PathFailure_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPathFailure this_ptr_conv = *(LDKPathFailure*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PathFailure_free(this_ptr_conv);
-}
-
-static inline uint64_t PathFailure_clone_ptr(LDKPathFailure *NONNULL_PTR arg) {
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_PathFailure_clone_ptr(int64_t arg) {
-       LDKPathFailure* arg_conv = (LDKPathFailure*)untag_ptr(arg);
-       int64_t ret_conv = PathFailure_clone_ptr(arg_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_any_optional_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PathFailure_clone(int64_t orig) {
-       LDKPathFailure* orig_conv = (LDKPathFailure*)untag_ptr(orig);
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PathFailure_initial_send(int64_t err) {
-       void* err_ptr = untag_ptr(err);
-       CHECK_ACCESS(err_ptr);
-       LDKAPIError err_conv = *(LDKAPIError*)(err_ptr);
-       err_conv = APIError_clone((LDKAPIError*)untag_ptr(err));
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_initial_send(err_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_Bolt11InvoiceFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = Bolt11InvoiceFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_PathFailure_on_path(int64_t network_update) {
-       void* network_update_ptr = untag_ptr(network_update);
-       CHECK_ACCESS(network_update_ptr);
-       LDKCOption_NetworkUpdateZ network_update_conv = *(LDKCOption_NetworkUpdateZ*)(network_update_ptr);
-       network_update_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)untag_ptr(network_update));
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_on_path(network_update_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_PathFailure_eq(int64_t a, int64_t b) {
-       LDKPathFailure* a_conv = (LDKPathFailure*)untag_ptr(a);
-       LDKPathFailure* b_conv = (LDKPathFailure*)untag_ptr(b);
-       jboolean ret_conv = PathFailure_eq(a_conv, b_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_PathFailure_write(int64_t obj) {
-       LDKPathFailure* obj_conv = (LDKPathFailure*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PathFailure_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_PathFailure_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_PathFailureZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PathFailureZDecodeErrorZ), "LDKCResult_COption_PathFailureZDecodeErrorZ");
-       *ret_conv = PathFailure_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ClosureReason_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKClosureReason this_ptr_conv = *(LDKClosureReason*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ClosureReason_free(this_ptr_conv);
-}
-
-static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_ClosureReason_clone_ptr(int64_t arg) {
-       LDKClosureReason* arg_conv = (LDKClosureReason*)untag_ptr(arg);
-       int64_t ret_conv = ClosureReason_clone_ptr(arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_clone(int64_t orig) {
-       LDKClosureReason* orig_conv = (LDKClosureReason*)untag_ptr(orig);
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_counterparty_force_closed(int64_t peer_msg) {
-       LDKUntrustedString peer_msg_conv;
-       peer_msg_conv.inner = untag_ptr(peer_msg);
-       peer_msg_conv.is_owned = ptr_is_owned(peer_msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_msg_conv);
-       peer_msg_conv = UntrustedString_clone(&peer_msg_conv);
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_counterparty_force_closed(peer_msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_OfferFeatures_empty() {
+       LDKOfferFeatures ret_var = OfferFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ClosureReason_holder_force_closed() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_holder_force_closed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_OfferFeatures_le_flags(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = OfferFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ClosureReason_legacy_cooperative_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_legacy_cooperative_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_counterparty_initiated_cooperative_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_counterparty_initiated_cooperative_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_locally_initiated_cooperative_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_locally_initiated_cooperative_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_OfferFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = OfferFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ClosureReason_commitment_tx_confirmed() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_commitment_tx_confirmed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_funding_timed_out() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_funding_timed_out();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_processing_error(jstring err) {
-       LDKStr err_conv = str_ref_to_owned_c(err);
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_processing_error(err_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_disconnected_peer() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_disconnected_peer();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_outdated_channel_manager() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_outdated_channel_manager();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_counterparty_coop_closed_unfunded_channel() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_counterparty_coop_closed_unfunded_channel();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_funding_batch_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_funding_batch_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_InvoiceRequestFeatures_empty() {
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ClosureReason_htlcs_timed_out() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_htlcs_timed_out();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_InvoiceRequestFeatures_le_flags(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = InvoiceRequestFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_ClosureReason_eq(int64_t a, int64_t b) {
-       LDKClosureReason* a_conv = (LDKClosureReason*)untag_ptr(a);
-       LDKClosureReason* b_conv = (LDKClosureReason*)untag_ptr(b);
-       jboolean ret_conv = ClosureReason_eq(a_conv, b_conv);
+jboolean  CS_LDK_InvoiceRequestFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_supports_any_optional_bits(&this_arg_conv);
        return ret_conv;
 }
 
-jstring  CS_LDK_ClosureReason_to_str(int64_t o) {
-       LDKClosureReason* o_conv = (LDKClosureReason*)untag_ptr(o);
-       LDKStr ret_str = ClosureReason_to_str(o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ClosureReason_write(int64_t obj) {
-       LDKClosureReason* obj_conv = (LDKClosureReason*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = ClosureReason_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int64_tArray  CS_LDK_InvoiceRequestFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = InvoiceRequestFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ClosureReason_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
-       *ret_conv = ClosureReason_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_HTLCDestination_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKHTLCDestination this_ptr_conv = *(LDKHTLCDestination*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       HTLCDestination_free(this_ptr_conv);
-}
-
-static inline uint64_t HTLCDestination_clone_ptr(LDKHTLCDestination *NONNULL_PTR arg) {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_HTLCDestination_clone_ptr(int64_t arg) {
-       LDKHTLCDestination* arg_conv = (LDKHTLCDestination*)untag_ptr(arg);
-       int64_t ret_conv = HTLCDestination_clone_ptr(arg_conv);
+jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_HTLCDestination_clone(int64_t orig) {
-       LDKHTLCDestination* orig_conv = (LDKHTLCDestination*)untag_ptr(orig);
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InvoiceRequestFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_HTLCDestination_next_hop_channel(int8_tArray node_id, int64_t channel_id) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_next_hop_channel(node_id_ref, channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_unknown_next_hop(int64_t requested_forward_scid) {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_unknown_next_hop(requested_forward_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_invalid_forward(int64_t requested_forward_scid) {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_invalid_forward(requested_forward_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_invalid_onion() {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_invalid_onion();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_failed_payment(int8_tArray payment_hash) {
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_failed_payment(payment_hash_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_empty() {
+       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_HTLCDestination_eq(int64_t a, int64_t b) {
-       LDKHTLCDestination* a_conv = (LDKHTLCDestination*)untag_ptr(a);
-       LDKHTLCDestination* b_conv = (LDKHTLCDestination*)untag_ptr(b);
-       jboolean ret_conv = HTLCDestination_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_HTLCDestination_write(int64_t obj) {
-       LDKHTLCDestination* obj_conv = (LDKHTLCDestination*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = HTLCDestination_write(obj_conv);
+int8_tArray  CS_LDK_Bolt12InvoiceFeatures_le_flags(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Bolt12InvoiceFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_HTLCDestination_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_HTLCDestinationZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_HTLCDestinationZDecodeErrorZ), "LDKCResult_COption_HTLCDestinationZDecodeErrorZ");
-       *ret_conv = HTLCDestination_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int32_t  CS_LDK_PaymentFailureReason_clone(int64_t orig) {
-       LDKPaymentFailureReason* orig_conv = (LDKPaymentFailureReason*)untag_ptr(orig);
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_clone(orig_conv));
+jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_supports_any_optional_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_recipient_rejected() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_recipient_rejected());
+jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_user_abandoned() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_user_abandoned());
-       return ret_conv;
+int64_tArray  CS_LDK_Bolt12InvoiceFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = Bolt12InvoiceFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_retries_exhausted() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_retries_exhausted());
+jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_payment_expired() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_payment_expired());
+jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_supports_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_route_not_found() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_route_not_found());
-       return ret_conv;
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int32_t  CS_LDK_PaymentFailureReason_unexpected_error() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_unexpected_error());
-       return ret_conv;
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_PaymentFailureReason_eq(int64_t a, int64_t b) {
-       LDKPaymentFailureReason* a_conv = (LDKPaymentFailureReason*)untag_ptr(a);
-       LDKPaymentFailureReason* b_conv = (LDKPaymentFailureReason*)untag_ptr(b);
-       jboolean ret_conv = PaymentFailureReason_eq(a_conv, b_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_PaymentFailureReason_write(int64_t obj) {
-       LDKPaymentFailureReason* obj_conv = (LDKPaymentFailureReason*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PaymentFailureReason_write(obj_conv);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_BlindedHopFeatures_empty() {
+       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int8_tArray  CS_LDK_BlindedHopFeatures_le_flags(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = BlindedHopFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_PaymentFailureReason_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = PaymentFailureReason_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_BlindedHopFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Event_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEvent this_ptr_conv = *(LDKEvent*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Event_free(this_ptr_conv);
+jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBlindedHopFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_BlindedHopFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBlindedHopFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = BlindedHopFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
-int64_t  CS_LDK_Event_clone_ptr(int64_t arg) {
-       LDKEvent* arg_conv = (LDKEvent*)untag_ptr(arg);
-       int64_t ret_conv = Event_clone_ptr(arg_conv);
+
+jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Event_clone(int64_t orig) {
-       LDKEvent* orig_conv = (LDKEvent*)untag_ptr(orig);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_BlindedHopFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_funding_generation_ready(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t channel_value_satoshis, int8_tArray output_script, int8_tArray user_channel_id) {
-       LDKChannelId temporary_channel_id_conv;
-       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
-       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
-       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKCVec_u8Z output_script_ref;
-       output_script_ref.datalen = output_script->arr_len;
-       output_script_ref.data = MALLOC(output_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(output_script_ref.data, output_script->elems, output_script_ref.datalen); FREE(output_script);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_funding_generation_ready(temporary_channel_id_conv, counterparty_node_id_ref, channel_value_satoshis, output_script_ref, user_channel_id_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_payment_claimable(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int64_t via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
-       LDKPublicKey receiver_node_id_ref;
-       CHECK(receiver_node_id->arr_len == 33);
-       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKRecipientOnionFields onion_fields_conv;
-       onion_fields_conv.inner = untag_ptr(onion_fields);
-       onion_fields_conv.is_owned = ptr_is_owned(onion_fields);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_conv);
-       onion_fields_conv = RecipientOnionFields_clone(&onion_fields_conv);
-       void* purpose_ptr = untag_ptr(purpose);
-       CHECK_ACCESS(purpose_ptr);
-       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
-       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
-       LDKChannelId via_channel_id_conv;
-       via_channel_id_conv.inner = untag_ptr(via_channel_id);
-       via_channel_id_conv.is_owned = ptr_is_owned(via_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(via_channel_id_conv);
-       via_channel_id_conv = ChannelId_clone(&via_channel_id_conv);
-       void* via_user_channel_id_ptr = untag_ptr(via_user_channel_id);
-       CHECK_ACCESS(via_user_channel_id_ptr);
-       LDKCOption_U128Z via_user_channel_id_conv = *(LDKCOption_U128Z*)(via_user_channel_id_ptr);
-       via_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(via_user_channel_id));
-       void* claim_deadline_ptr = untag_ptr(claim_deadline);
-       CHECK_ACCESS(claim_deadline_ptr);
-       LDKCOption_u32Z claim_deadline_conv = *(LDKCOption_u32Z*)(claim_deadline_ptr);
-       claim_deadline_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(claim_deadline));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_conv, via_user_channel_id_conv, claim_deadline_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_payment_claimed(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose, int64_tArray htlcs, int64_t sender_intended_total_msat) {
-       LDKPublicKey receiver_node_id_ref;
-       CHECK(receiver_node_id->arr_len == 33);
-       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* purpose_ptr = untag_ptr(purpose);
-       CHECK_ACCESS(purpose_ptr);
-       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
-       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
-       LDKCVec_ClaimedHTLCZ htlcs_constr;
-       htlcs_constr.datalen = htlcs->arr_len;
-       if (htlcs_constr.datalen > 0)
-               htlcs_constr.data = MALLOC(htlcs_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
-       else
-               htlcs_constr.data = NULL;
-       int64_t* htlcs_vals = htlcs->elems;
-       for (size_t n = 0; n < htlcs_constr.datalen; n++) {
-               int64_t htlcs_conv_13 = htlcs_vals[n];
-               LDKClaimedHTLC htlcs_conv_13_conv;
-               htlcs_conv_13_conv.inner = untag_ptr(htlcs_conv_13);
-               htlcs_conv_13_conv.is_owned = ptr_is_owned(htlcs_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_conv);
-               htlcs_conv_13_conv = ClaimedHTLC_clone(&htlcs_conv_13_conv);
-               htlcs_constr.data[n] = htlcs_conv_13_conv;
-       }
-       FREE(htlcs);
-       void* sender_intended_total_msat_ptr = untag_ptr(sender_intended_total_msat);
-       CHECK_ACCESS(sender_intended_total_msat_ptr);
-       LDKCOption_u64Z sender_intended_total_msat_conv = *(LDKCOption_u64Z*)(sender_intended_total_msat_ptr);
-       sender_intended_total_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(sender_intended_total_msat));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv, htlcs_constr, sender_intended_total_msat_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_connection_needed(int8_tArray node_id, int64_tArray addresses) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKCVec_SocketAddressZ addresses_constr;
-       addresses_constr.datalen = addresses->arr_len;
-       if (addresses_constr.datalen > 0)
-               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
-       else
-               addresses_constr.data = NULL;
-       int64_t* addresses_vals = addresses->elems;
-       for (size_t p = 0; p < addresses_constr.datalen; p++) {
-               int64_t addresses_conv_15 = addresses_vals[p];
-               void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
-               CHECK_ACCESS(addresses_conv_15_ptr);
-               LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
-               addresses_constr.data[p] = addresses_conv_15_conv;
-       }
-       FREE(addresses);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_connection_needed(node_id_ref, addresses_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_invoice_request_failed(int8_tArray payment_id) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_invoice_request_failed(payment_id_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_ChannelTypeFeatures_empty() {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_payment_sent(int64_t payment_id, int8_tArray payment_preimage, int8_tArray payment_hash, int64_t fee_paid_msat) {
-       void* payment_id_ptr = untag_ptr(payment_id);
-       CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
-       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
-       LDKThirtyTwoBytes payment_preimage_ref;
-       CHECK(payment_preimage->arr_len == 32);
-       memcpy(payment_preimage_ref.data, payment_preimage->elems, 32); FREE(payment_preimage);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* fee_paid_msat_ptr = untag_ptr(fee_paid_msat);
-       CHECK_ACCESS(fee_paid_msat_ptr);
-       LDKCOption_u64Z fee_paid_msat_conv = *(LDKCOption_u64Z*)(fee_paid_msat_ptr);
-       fee_paid_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(fee_paid_msat));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_sent(payment_id_conv, payment_preimage_ref, payment_hash_ref, fee_paid_msat_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_ChannelTypeFeatures_le_flags(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = ChannelTypeFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Event_payment_failed(int8_tArray payment_id, int8_tArray payment_hash, int64_t reason) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* reason_ptr = untag_ptr(reason);
-       CHECK_ACCESS(reason_ptr);
-       LDKCOption_PaymentFailureReasonZ reason_conv = *(LDKCOption_PaymentFailureReasonZ*)(reason_ptr);
-       reason_conv = COption_PaymentFailureReasonZ_clone((LDKCOption_PaymentFailureReasonZ*)untag_ptr(reason));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_failed(payment_id_ref, payment_hash_ref, reason_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_payment_path_successful(int8_tArray payment_id, int64_t payment_hash, int64_t path) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       void* payment_hash_ptr = untag_ptr(payment_hash);
-       CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_path_successful(payment_id_ref, payment_hash_conv, path_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_payment_path_failed(int64_t payment_id, int8_tArray payment_hash, jboolean payment_failed_permanently, int64_t failure, int64_t path, int64_t short_channel_id) {
-       void* payment_id_ptr = untag_ptr(payment_id);
-       CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
-       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* failure_ptr = untag_ptr(failure);
-       CHECK_ACCESS(failure_ptr);
-       LDKPathFailure failure_conv = *(LDKPathFailure*)(failure_ptr);
-       failure_conv = PathFailure_clone((LDKPathFailure*)untag_ptr(failure));
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       void* short_channel_id_ptr = untag_ptr(short_channel_id);
-       CHECK_ACCESS(short_channel_id_ptr);
-       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
-       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_path_failed(payment_id_conv, payment_hash_ref, payment_failed_permanently, failure_conv, path_conv, short_channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_ChannelTypeFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = ChannelTypeFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Event_probe_successful(int8_tArray payment_id, int8_tArray payment_hash, int64_t path) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_probe_successful(payment_id_ref, payment_hash_ref, path_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_probe_failed(int8_tArray payment_id, int8_tArray payment_hash, int64_t path, int64_t short_channel_id) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       void* short_channel_id_ptr = untag_ptr(short_channel_id);
-       CHECK_ACCESS(short_channel_id_ptr);
-       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
-       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_probe_failed(payment_id_ref, payment_hash_ref, path_conv, short_channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_pending_htlcs_forwardable(int64_t time_forwardable) {
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_pending_htlcs_forwardable(time_forwardable);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_ChannelTypeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_htlcintercepted(int8_tArray intercept_id, int64_t requested_next_hop_scid, int8_tArray payment_hash, int64_t inbound_amount_msat, int64_t expected_outbound_amount_msat) {
-       LDKThirtyTwoBytes intercept_id_ref;
-       CHECK(intercept_id->arr_len == 32);
-       memcpy(intercept_id_ref.data, intercept_id->elems, 32); FREE(intercept_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_htlcintercepted(intercept_id_ref, requested_next_hop_scid, payment_hash_ref, inbound_amount_msat, expected_outbound_amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_ChannelTypeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_InitFeatures_clear_upfront_shutdown_script(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InitFeatures_clone(&this_arg_conv);
+       LDKInitFeatures ret_var = InitFeatures_clear_upfront_shutdown_script(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_spendable_outputs(int64_tArray outputs, int64_t channel_id) {
-       LDKCVec_SpendableOutputDescriptorZ outputs_constr;
-       outputs_constr.datalen = outputs->arr_len;
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = outputs->elems;
-       for (size_t b = 0; b < outputs_constr.datalen; b++) {
-               int64_t outputs_conv_27 = outputs_vals[b];
-               void* outputs_conv_27_ptr = untag_ptr(outputs_conv_27);
-               CHECK_ACCESS(outputs_conv_27_ptr);
-               LDKSpendableOutputDescriptor outputs_conv_27_conv = *(LDKSpendableOutputDescriptor*)(outputs_conv_27_ptr);
-               outputs_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(outputs_conv_27));
-               outputs_constr.data[b] = outputs_conv_27_conv;
-       }
-       FREE(outputs);
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_spendable_outputs(outputs_constr, channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_NodeFeatures_clear_upfront_shutdown_script(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = NodeFeatures_clone(&this_arg_conv);
+       LDKNodeFeatures ret_var = NodeFeatures_clear_upfront_shutdown_script(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_payment_forwarded(int64_t prev_channel_id, int64_t next_channel_id, int64_t prev_user_channel_id, int64_t next_user_channel_id, int64_t total_fee_earned_msat, int64_t skimmed_fee_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
-       LDKChannelId prev_channel_id_conv;
-       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
-       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
-       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
-       LDKChannelId next_channel_id_conv;
-       next_channel_id_conv.inner = untag_ptr(next_channel_id);
-       next_channel_id_conv.is_owned = ptr_is_owned(next_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(next_channel_id_conv);
-       next_channel_id_conv = ChannelId_clone(&next_channel_id_conv);
-       void* prev_user_channel_id_ptr = untag_ptr(prev_user_channel_id);
-       CHECK_ACCESS(prev_user_channel_id_ptr);
-       LDKCOption_U128Z prev_user_channel_id_conv = *(LDKCOption_U128Z*)(prev_user_channel_id_ptr);
-       prev_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(prev_user_channel_id));
-       void* next_user_channel_id_ptr = untag_ptr(next_user_channel_id);
-       CHECK_ACCESS(next_user_channel_id_ptr);
-       LDKCOption_U128Z next_user_channel_id_conv = *(LDKCOption_U128Z*)(next_user_channel_id_ptr);
-       next_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(next_user_channel_id));
-       void* total_fee_earned_msat_ptr = untag_ptr(total_fee_earned_msat);
-       CHECK_ACCESS(total_fee_earned_msat_ptr);
-       LDKCOption_u64Z total_fee_earned_msat_conv = *(LDKCOption_u64Z*)(total_fee_earned_msat_ptr);
-       total_fee_earned_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(total_fee_earned_msat));
-       void* skimmed_fee_msat_ptr = untag_ptr(skimmed_fee_msat);
-       CHECK_ACCESS(skimmed_fee_msat_ptr);
-       LDKCOption_u64Z skimmed_fee_msat_conv = *(LDKCOption_u64Z*)(skimmed_fee_msat_ptr);
-       skimmed_fee_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(skimmed_fee_msat));
-       void* outbound_amount_forwarded_msat_ptr = untag_ptr(outbound_amount_forwarded_msat);
-       CHECK_ACCESS(outbound_amount_forwarded_msat_ptr);
-       LDKCOption_u64Z outbound_amount_forwarded_msat_conv = *(LDKCOption_u64Z*)(outbound_amount_forwarded_msat_ptr);
-       outbound_amount_forwarded_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(outbound_amount_forwarded_msat));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_forwarded(prev_channel_id_conv, next_channel_id_conv, prev_user_channel_id_conv, next_user_channel_id_conv, total_fee_earned_msat_conv, skimmed_fee_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_InitFeatures_clear_shutdown_anysegwit(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InitFeatures_clone(&this_arg_conv);
+       LDKInitFeatures ret_var = InitFeatures_clear_shutdown_anysegwit(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_channel_pending(int64_t channel_id, int8_tArray user_channel_id, int64_t former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo, int64_t channel_type) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       LDKChannelId former_temporary_channel_id_conv;
-       former_temporary_channel_id_conv.inner = untag_ptr(former_temporary_channel_id);
-       former_temporary_channel_id_conv.is_owned = ptr_is_owned(former_temporary_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_conv);
-       former_temporary_channel_id_conv = ChannelId_clone(&former_temporary_channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKOutPoint funding_txo_conv;
-       funding_txo_conv.inner = untag_ptr(funding_txo);
-       funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
-       funding_txo_conv = OutPoint_clone(&funding_txo_conv);
-       LDKChannelTypeFeatures channel_type_conv;
-       channel_type_conv.inner = untag_ptr(channel_type);
-       channel_type_conv.is_owned = ptr_is_owned(channel_type);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
-       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_pending(channel_id_conv, user_channel_id_ref, former_temporary_channel_id_conv, counterparty_node_id_ref, funding_txo_conv, channel_type_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_NodeFeatures_clear_shutdown_anysegwit(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = NodeFeatures_clone(&this_arg_conv);
+       LDKNodeFeatures ret_var = NodeFeatures_clear_shutdown_anysegwit(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_channel_ready(int64_t channel_id, int8_tArray user_channel_id, int8_tArray counterparty_node_id, int64_t channel_type) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKChannelTypeFeatures channel_type_conv;
-       channel_type_conv.inner = untag_ptr(channel_type);
-       channel_type_conv.is_owned = ptr_is_owned(channel_type);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
-       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_ready(channel_id_conv, user_channel_id_ref, counterparty_node_id_ref, channel_type_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_InitFeatures_clear_wumbo(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InitFeatures_clone(&this_arg_conv);
+       LDKInitFeatures ret_var = InitFeatures_clear_wumbo(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_channel_closed(int64_t channel_id, int8_tArray user_channel_id, int64_t reason, int8_tArray counterparty_node_id, int64_t channel_capacity_sats, int64_t channel_funding_txo) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       void* reason_ptr = untag_ptr(reason);
-       CHECK_ACCESS(reason_ptr);
-       LDKClosureReason reason_conv = *(LDKClosureReason*)(reason_ptr);
-       reason_conv = ClosureReason_clone((LDKClosureReason*)untag_ptr(reason));
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       void* channel_capacity_sats_ptr = untag_ptr(channel_capacity_sats);
-       CHECK_ACCESS(channel_capacity_sats_ptr);
-       LDKCOption_u64Z channel_capacity_sats_conv = *(LDKCOption_u64Z*)(channel_capacity_sats_ptr);
-       channel_capacity_sats_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(channel_capacity_sats));
-       LDKOutPoint channel_funding_txo_conv;
-       channel_funding_txo_conv.inner = untag_ptr(channel_funding_txo);
-       channel_funding_txo_conv.is_owned = ptr_is_owned(channel_funding_txo);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_txo_conv);
-       channel_funding_txo_conv = OutPoint_clone(&channel_funding_txo_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_closed(channel_id_conv, user_channel_id_ref, reason_conv, counterparty_node_id_ref, channel_capacity_sats_conv, channel_funding_txo_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_NodeFeatures_clear_wumbo(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = NodeFeatures_clone(&this_arg_conv);
+       LDKNodeFeatures ret_var = NodeFeatures_clear_wumbo(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_discard_funding(int64_t channel_id, int8_tArray transaction) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKTransaction transaction_ref;
-       transaction_ref.datalen = transaction->arr_len;
-       transaction_ref.data = MALLOC(transaction_ref.datalen, "LDKTransaction Bytes");
-       memcpy(transaction_ref.data, transaction->elems, transaction_ref.datalen); FREE(transaction);
-       transaction_ref.data_is_owned = true;
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_discard_funding(channel_id_conv, transaction_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_clear_scid_privacy(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_clear_scid_privacy(&this_arg_conv);
 }
 
-int64_t  CS_LDK_Event_open_channel_request(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_satoshis, int64_t push_msat, int64_t channel_type) {
-       LDKChannelId temporary_channel_id_conv;
-       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
-       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
-       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKChannelTypeFeatures channel_type_conv;
-       channel_type_conv.inner = untag_ptr(channel_type);
-       channel_type_conv.is_owned = ptr_is_owned(channel_type);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
-       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_open_channel_request(temporary_channel_id_conv, counterparty_node_id_ref, funding_satoshis, push_msat, channel_type_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_clear_scid_privacy(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_clear_scid_privacy(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_clear_scid_privacy(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_clear_scid_privacy(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_clear_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_clear_anchors_zero_fee_htlc_tx(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_clear_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_clear_anchors_zero_fee_htlc_tx(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_clear_route_blinding(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_clear_route_blinding(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_clear_route_blinding(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_clear_route_blinding(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_data_loss_protect_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_data_loss_protect_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_data_loss_protect_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_data_loss_protect_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_data_loss_protect(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_data_loss_protect_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_data_loss_protect_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_data_loss_protect_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_data_loss_protect_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_data_loss_protect(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_data_loss_protect(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_data_loss_protect(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_initial_routing_sync_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_initial_routing_sync_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_initial_routing_sync_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_initial_routing_sync_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_initial_routing_sync(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_initial_routing_sync(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_gossip_queries_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_gossip_queries_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_gossip_queries_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_gossip_queries_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_gossip_queries(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_gossip_queries_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_gossip_queries_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_gossip_queries_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_gossip_queries_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_gossip_queries(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_gossip_queries(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_gossip_queries(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_variable_length_onion_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_variable_length_onion_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_variable_length_onion_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_variable_length_onion_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_variable_length_onion(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_variable_length_onion_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_variable_length_onion_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_variable_length_onion_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_variable_length_onion_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_variable_length_onion(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_variable_length_onion_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_variable_length_onion_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_variable_length_onion(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_variable_length_onion(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_variable_length_onion(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_variable_length_onion(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_static_remote_key_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_static_remote_key_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_static_remote_key_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_static_remote_key_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_static_remote_key(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_static_remote_key_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_static_remote_key_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_static_remote_key_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_static_remote_key_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_static_remote_key(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_static_remote_key_optional(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_static_remote_key_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_supports_static_remote_key(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_static_remote_key(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_static_remote_key(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_requires_static_remote_key(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_payment_secret_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_payment_secret_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_payment_secret_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_payment_secret_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_payment_secret(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_payment_secret_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_payment_secret_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_payment_secret_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_payment_secret_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_payment_secret(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_secret_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_secret_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_secret(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_payment_secret(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_payment_secret(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_secret(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt12InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt12InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_wumbo_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_wumbo_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_wumbo_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_wumbo_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_wumbo(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_wumbo_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_wumbo_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_wumbo_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_wumbo_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_wumbo(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_wumbo(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_wumbo(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_route_blinding_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_route_blinding_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_route_blinding_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_route_blinding_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_route_blinding(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_route_blinding_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_route_blinding_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_route_blinding_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_route_blinding_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_route_blinding(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_route_blinding(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_route_blinding(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_htlchandling_failed(int64_t prev_channel_id, int64_t failed_next_destination) {
-       LDKChannelId prev_channel_id_conv;
-       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
-       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
-       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
-       void* failed_next_destination_ptr = untag_ptr(failed_next_destination);
-       CHECK_ACCESS(failed_next_destination_ptr);
-       LDKHTLCDestination failed_next_destination_conv = *(LDKHTLCDestination*)(failed_next_destination_ptr);
-       failed_next_destination_conv = HTLCDestination_clone((LDKHTLCDestination*)untag_ptr(failed_next_destination));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_htlchandling_failed(prev_channel_id_conv, failed_next_destination_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_bump_transaction(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKBumpTransactionEvent a_conv = *(LDKBumpTransactionEvent*)(a_ptr);
-       a_conv = BumpTransactionEvent_clone((LDKBumpTransactionEvent*)untag_ptr(a));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_bump_transaction(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_taproot_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_optional(&this_arg_conv);
 }
 
-jboolean  CS_LDK_Event_eq(int64_t a, int64_t b) {
-       LDKEvent* a_conv = (LDKEvent*)untag_ptr(a);
-       LDKEvent* b_conv = (LDKEvent*)untag_ptr(b);
-       jboolean ret_conv = Event_eq(a_conv, b_conv);
+void  CS_LDK_InitFeatures_set_taproot_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_taproot(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_taproot(&this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Event_write(int64_t obj) {
-       LDKEvent* obj_conv = (LDKEvent*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = Event_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_NodeFeatures_set_taproot_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_Event_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
-       *ret_conv = Event_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_NodeFeatures_set_taproot_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_required(&this_arg_conv);
 }
 
-void  CS_LDK_MessageSendEvent_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageSendEvent_free(this_ptr_conv);
+jboolean  CS_LDK_NodeFeatures_supports_taproot(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_taproot_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_optional(&this_arg_conv);
 }
-int64_t  CS_LDK_MessageSendEvent_clone_ptr(int64_t arg) {
-       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)untag_ptr(arg);
-       int64_t ret_conv = MessageSendEvent_clone_ptr(arg_conv);
-       return ret_conv;
+
+void  CS_LDK_ChannelTypeFeatures_set_taproot_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_clone(int64_t orig) {
-       LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)untag_ptr(orig);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_taproot(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_accept_channel(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKAcceptChannel msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = AcceptChannel_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_taproot(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_accept_channel_v2(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKAcceptChannelV2 msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = AcceptChannelV2_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_accept_channel_v2(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_taproot(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_open_channel(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKOpenChannel msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = OpenChannel_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_taproot(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_open_channel_v2(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKOpenChannelV2 msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = OpenChannelV2_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_open_channel_v2(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_onion_messages_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_onion_messages_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_funding_created(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKFundingCreated msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = FundingCreated_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_onion_messages_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_onion_messages_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_funding_signed(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKFundingSigned msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = FundingSigned_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_supports_onion_messages(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_stfu(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKStfu msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = Stfu_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_stfu(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_onion_messages_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_onion_messages_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_splice(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKSplice msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = Splice_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_splice(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_onion_messages_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_onion_messages_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_splice_ack(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKSpliceAck msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = SpliceAck_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_splice_ack(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_onion_messages(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_splice_locked(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKSpliceLocked msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = SpliceLocked_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_splice_locked(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_onion_messages(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_add_input(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAddInput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAddInput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_add_input(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_onion_messages(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_add_output(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAddOutput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAddOutput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_add_output(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_channel_type_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_channel_type_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_remove_input(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxRemoveInput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxRemoveInput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_remove_input(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_channel_type_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_channel_type_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_remove_output(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxRemoveOutput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxRemoveOutput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_remove_output(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_supports_channel_type(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_channel_type(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_complete(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxComplete msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxComplete_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_complete(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_channel_type_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_channel_type_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_signatures(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxSignatures msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxSignatures_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_signatures(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_channel_type_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_channel_type_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_init_rbf(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxInitRbf msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxInitRbf_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_init_rbf(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_channel_type(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_channel_type(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_ack_rbf(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAckRbf msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAckRbf_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_ack_rbf(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_channel_type(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_channel_type(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_channel_type(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_channel_type(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_abort(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAbort msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAbort_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_abort(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_scid_privacy_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_scid_privacy_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_ready(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelReady msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelReady_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_ready(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_scid_privacy_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_scid_privacy_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_announcement_signatures(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKAnnouncementSignatures msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = AnnouncementSignatures_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_supports_scid_privacy(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_update_htlcs(int8_tArray node_id, int64_t updates) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKCommitmentUpdate updates_conv;
-       updates_conv.inner = untag_ptr(updates);
-       updates_conv.is_owned = ptr_is_owned(updates);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
-       updates_conv = CommitmentUpdate_clone(&updates_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_scid_privacy_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_scid_privacy_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_revoke_and_ack(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKRevokeAndACK msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = RevokeAndACK_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_scid_privacy_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_scid_privacy_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_closing_signed(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKClosingSigned msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ClosingSigned_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_scid_privacy(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_shutdown(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKShutdown msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = Shutdown_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_scid_privacy_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_reestablish(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelReestablish msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelReestablish_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_scid_privacy_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_announcement(int8_tArray node_id, int64_t msg, int64_t update_msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelAnnouncement_clone(&msg_conv);
-       LDKChannelUpdate update_msg_conv;
-       update_msg_conv.inner = untag_ptr(update_msg);
-       update_msg_conv.is_owned = ptr_is_owned(update_msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
-       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_announcement(node_id_ref, msg_conv, update_msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_scid_privacy(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_broadcast_channel_announcement(int64_t msg, int64_t update_msg) {
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelAnnouncement_clone(&msg_conv);
-       LDKChannelUpdate update_msg_conv;
-       update_msg_conv.inner = untag_ptr(update_msg);
-       update_msg_conv.is_owned = ptr_is_owned(update_msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
-       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_scid_privacy(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_broadcast_channel_update(int64_t msg) {
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_scid_privacy(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_broadcast_node_announcement(int64_t msg) {
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = NodeAnnouncement_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_scid_privacy(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_update(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_metadata_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_handle_error(int8_tArray node_id, int64_t action) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       void* action_ptr = untag_ptr(action);
-       CHECK_ACCESS(action_ptr);
-       LDKErrorAction action_conv = *(LDKErrorAction*)(action_ptr);
-       action_conv = ErrorAction_clone((LDKErrorAction*)untag_ptr(action));
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_handle_error(node_id_ref, action_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_metadata_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_range_query(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKQueryChannelRange msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = QueryChannelRange_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_metadata(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_metadata(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_short_ids_query(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKQueryShortChannelIds msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = QueryShortChannelIds_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_metadata(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_metadata(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_reply_channel_range(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKReplyChannelRange msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ReplyChannelRange_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_zero_conf_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_zero_conf_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_gossip_timestamp_filter(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKGossipTimestampFilter msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = GossipTimestampFilter_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_gossip_timestamp_filter(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_zero_conf_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_zero_conf_required(&this_arg_conv);
 }
 
-void  CS_LDK_MessageSendEventsProvider_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageSendEventsProvider_free(this_ptr_conv);
+jboolean  CS_LDK_InitFeatures_supports_zero_conf(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_EventsProvider_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EventsProvider_free(this_ptr_conv);
+void  CS_LDK_NodeFeatures_set_zero_conf_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_zero_conf_optional(&this_arg_conv);
 }
 
-void  CS_LDK_EventHandler_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEventHandler this_ptr_conv = *(LDKEventHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EventHandler_free(this_ptr_conv);
+void  CS_LDK_NodeFeatures_set_zero_conf_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_zero_conf_required(&this_arg_conv);
 }
 
-void  CS_LDK_AnchorDescriptor_free(int64_t this_obj) {
-       LDKAnchorDescriptor this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       AnchorDescriptor_free(this_obj_conv);
+jboolean  CS_LDK_NodeFeatures_supports_zero_conf(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_AnchorDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters ret_var = AnchorDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_zero_conf_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_zero_conf_optional(&this_arg_conv);
 }
 
-void  CS_LDK_AnchorDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelDerivationParameters_clone(&val_conv);
-       AnchorDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
+void  CS_LDK_ChannelTypeFeatures_set_zero_conf_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_zero_conf_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_get_outpoint(int64_t this_ptr) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = AnchorDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_zero_conf(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_AnchorDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       AnchorDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_InitFeatures_requires_zero_conf(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_zero_conf(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_zero_conf(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_AnchorDescriptor_new(int64_t channel_derivation_parameters_arg, int64_t outpoint_arg) {
-       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
-       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
-       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
-       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       LDKAnchorDescriptor ret_var = AnchorDescriptor_new(channel_derivation_parameters_arg_conv, outpoint_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_zero_conf(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t AnchorDescriptor_clone_ptr(LDKAnchorDescriptor *NONNULL_PTR arg) {
-       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_keysend_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_keysend_optional(&this_arg_conv);
 }
-int64_t  CS_LDK_AnchorDescriptor_clone_ptr(int64_t arg) {
-       LDKAnchorDescriptor arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = AnchorDescriptor_clone_ptr(&arg_conv);
-       return ret_conv;
+
+void  CS_LDK_NodeFeatures_set_keysend_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_keysend_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_clone(int64_t orig) {
-       LDKAnchorDescriptor orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_keysend(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_keysend(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_AnchorDescriptor_eq(int64_t a, int64_t b) {
-       LDKAnchorDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKAnchorDescriptor b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = AnchorDescriptor_eq(&a_conv, &b_conv);
+jboolean  CS_LDK_NodeFeatures_requires_keysend(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_keysend(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_AnchorDescriptor_previous_utxo(int64_t this_arg) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_InitFeatures_set_trampoline_routing_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = AnchorDescriptor_previous_utxo(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+       InitFeatures_set_trampoline_routing_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_unsigned_tx_input(int64_t this_arg) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_InitFeatures_set_trampoline_routing_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
-       *ret_ref = AnchorDescriptor_unsigned_tx_input(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+       InitFeatures_set_trampoline_routing_required(&this_arg_conv);
 }
 
-int8_tArray  CS_LDK_AnchorDescriptor_witness_script(int64_t this_arg) {
-       LDKAnchorDescriptor this_arg_conv;
+jboolean  CS_LDK_InitFeatures_supports_trampoline_routing(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = AnchorDescriptor_witness_script(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       jboolean ret_conv = InitFeatures_supports_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_AnchorDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_NodeFeatures_set_trampoline_routing_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKECDSASignature signature_ref;
-       CHECK(signature->arr_len == 64);
-       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
-       LDKWitness ret_var = AnchorDescriptor_tx_input_witness(&this_arg_conv, signature_ref);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       Witness_free(ret_var);
-       return ret_arr;
+       NodeFeatures_set_trampoline_routing_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_NodeFeatures_set_trampoline_routing_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
-       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = AnchorDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
-       return tag_ptr(ret_ret, true);
+       NodeFeatures_set_trampoline_routing_required(&this_arg_conv);
 }
 
-void  CS_LDK_BumpTransactionEvent_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKBumpTransactionEvent this_ptr_conv = *(LDKBumpTransactionEvent*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       BumpTransactionEvent_free(this_ptr_conv);
+jboolean  CS_LDK_NodeFeatures_supports_trampoline_routing(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t BumpTransactionEvent_clone_ptr(LDKBumpTransactionEvent *NONNULL_PTR arg) {
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_trampoline_routing_optional(&this_arg_conv);
 }
-int64_t  CS_LDK_BumpTransactionEvent_clone_ptr(int64_t arg) {
-       LDKBumpTransactionEvent* arg_conv = (LDKBumpTransactionEvent*)untag_ptr(arg);
-       int64_t ret_conv = BumpTransactionEvent_clone_ptr(arg_conv);
-       return ret_conv;
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_trampoline_routing_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_BumpTransactionEvent_clone(int64_t orig) {
-       LDKBumpTransactionEvent* orig_conv = (LDKBumpTransactionEvent*)untag_ptr(orig);
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_trampoline_routing(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_BumpTransactionEvent_channel_close(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t package_target_feerate_sat_per_1000_weight, int8_tArray commitment_tx, int64_t commitment_tx_fee_satoshis, int64_t anchor_descriptor, int64_tArray pending_htlcs) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKThirtyTwoBytes claim_id_ref;
-       CHECK(claim_id->arr_len == 32);
-       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
-       LDKTransaction commitment_tx_ref;
-       commitment_tx_ref.datalen = commitment_tx->arr_len;
-       commitment_tx_ref.data = MALLOC(commitment_tx_ref.datalen, "LDKTransaction Bytes");
-       memcpy(commitment_tx_ref.data, commitment_tx->elems, commitment_tx_ref.datalen); FREE(commitment_tx);
-       commitment_tx_ref.data_is_owned = true;
-       LDKAnchorDescriptor anchor_descriptor_conv;
-       anchor_descriptor_conv.inner = untag_ptr(anchor_descriptor);
-       anchor_descriptor_conv.is_owned = ptr_is_owned(anchor_descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(anchor_descriptor_conv);
-       anchor_descriptor_conv = AnchorDescriptor_clone(&anchor_descriptor_conv);
-       LDKCVec_HTLCOutputInCommitmentZ pending_htlcs_constr;
-       pending_htlcs_constr.datalen = pending_htlcs->arr_len;
-       if (pending_htlcs_constr.datalen > 0)
-               pending_htlcs_constr.data = MALLOC(pending_htlcs_constr.datalen * sizeof(LDKHTLCOutputInCommitment), "LDKCVec_HTLCOutputInCommitmentZ Elements");
-       else
-               pending_htlcs_constr.data = NULL;
-       int64_t* pending_htlcs_vals = pending_htlcs->elems;
-       for (size_t y = 0; y < pending_htlcs_constr.datalen; y++) {
-               int64_t pending_htlcs_conv_24 = pending_htlcs_vals[y];
-               LDKHTLCOutputInCommitment pending_htlcs_conv_24_conv;
-               pending_htlcs_conv_24_conv.inner = untag_ptr(pending_htlcs_conv_24);
-               pending_htlcs_conv_24_conv.is_owned = ptr_is_owned(pending_htlcs_conv_24);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(pending_htlcs_conv_24_conv);
-               pending_htlcs_conv_24_conv = HTLCOutputInCommitment_clone(&pending_htlcs_conv_24_conv);
-               pending_htlcs_constr.data[y] = pending_htlcs_conv_24_conv;
-       }
-       FREE(pending_htlcs);
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_channel_close(channel_id_conv, counterparty_node_id_ref, claim_id_ref, package_target_feerate_sat_per_1000_weight, commitment_tx_ref, commitment_tx_fee_satoshis, anchor_descriptor_conv, pending_htlcs_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_trampoline_routing(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_BumpTransactionEvent_htlcresolution(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t target_feerate_sat_per_1000_weight, int64_tArray htlc_descriptors, int32_t tx_lock_time) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKThirtyTwoBytes claim_id_ref;
-       CHECK(claim_id->arr_len == 32);
-       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
-       LDKCVec_HTLCDescriptorZ htlc_descriptors_constr;
-       htlc_descriptors_constr.datalen = htlc_descriptors->arr_len;
-       if (htlc_descriptors_constr.datalen > 0)
-               htlc_descriptors_constr.data = MALLOC(htlc_descriptors_constr.datalen * sizeof(LDKHTLCDescriptor), "LDKCVec_HTLCDescriptorZ Elements");
-       else
-               htlc_descriptors_constr.data = NULL;
-       int64_t* htlc_descriptors_vals = htlc_descriptors->elems;
-       for (size_t q = 0; q < htlc_descriptors_constr.datalen; q++) {
-               int64_t htlc_descriptors_conv_16 = htlc_descriptors_vals[q];
-               LDKHTLCDescriptor htlc_descriptors_conv_16_conv;
-               htlc_descriptors_conv_16_conv.inner = untag_ptr(htlc_descriptors_conv_16);
-               htlc_descriptors_conv_16_conv.is_owned = ptr_is_owned(htlc_descriptors_conv_16);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_descriptors_conv_16_conv);
-               htlc_descriptors_conv_16_conv = HTLCDescriptor_clone(&htlc_descriptors_conv_16_conv);
-               htlc_descriptors_constr.data[q] = htlc_descriptors_conv_16_conv;
-       }
-       FREE(htlc_descriptors);
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_htlcresolution(channel_id_conv, counterparty_node_id_ref, claim_id_ref, target_feerate_sat_per_1000_weight, htlc_descriptors_constr, tx_lock_time);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_trampoline_routing(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_BumpTransactionEvent_eq(int64_t a, int64_t b) {
-       LDKBumpTransactionEvent* a_conv = (LDKBumpTransactionEvent*)untag_ptr(a);
-       LDKBumpTransactionEvent* b_conv = (LDKBumpTransactionEvent*)untag_ptr(b);
-       jboolean ret_conv = BumpTransactionEvent_eq(a_conv, b_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_trampoline_routing(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_trampoline_routing(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Input_free(int64_t this_obj) {
-       LDKInput this_obj_conv;
+void  CS_LDK_RoutingFees_free(int64_t this_obj) {
+       LDKRoutingFees this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Input_free(this_obj_conv);
+       RoutingFees_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Input_get_outpoint(int64_t this_ptr) {
-       LDKInput this_ptr_conv;
+int32_t  CS_LDK_RoutingFees_get_base_msat(int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = Input_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Input_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKInput this_ptr_conv;
+void  CS_LDK_RoutingFees_set_base_msat(int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       Input_set_outpoint(&this_ptr_conv, val_conv);
+       RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Input_get_previous_utxo(int64_t this_ptr) {
-       LDKInput this_ptr_conv;
+int32_t  CS_LDK_RoutingFees_get_proportional_millionths(int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = Input_get_previous_utxo(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Input_set_previous_utxo(int64_t this_ptr, int64_t val) {
-       LDKInput this_ptr_conv;
+void  CS_LDK_RoutingFees_set_proportional_millionths(int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       Input_set_previous_utxo(&this_ptr_conv, val_conv);
+       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Input_get_satisfaction_weight(int64_t this_ptr) {
-       LDKInput this_ptr_conv;
+int64_t  CS_LDK_RoutingFees_new(int32_t base_msat_arg, int32_t proportional_millionths_arg) {
+       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_RoutingFees_eq(int64_t a, int64_t b) {
+       LDKRoutingFees a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRoutingFees b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_RoutingFees_clone_ptr(int64_t arg) {
+       LDKRoutingFees arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_RoutingFees_clone(int64_t orig) {
+       LDKRoutingFees orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_RoutingFees_hash(int64_t o) {
+       LDKRoutingFees o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RoutingFees_hash(&o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHint_free(int64_t this_obj) {
+       LDKRouteHint this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RouteHint_free(this_obj_conv);
+}
+
+int64_tArray  CS_LDK_RouteHint_get_a(int64_t this_ptr) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = Input_get_satisfaction_weight(&this_ptr_conv);
-       return ret_conv;
+       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t o = 0; o < ret_var.datalen; o++) {
+               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
+               int64_t ret_conv_14_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
+               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
+               ret_arr_ptr[o] = ret_conv_14_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_Input_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
-       LDKInput this_ptr_conv;
+void  CS_LDK_RouteHint_set_a(int64_t this_ptr, int64_tArray val) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Input_set_satisfaction_weight(&this_ptr_conv, val);
+       LDKCVec_RouteHintHopZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t o = 0; o < val_constr.datalen; o++) {
+               int64_t val_conv_14 = val_vals[o];
+               LDKRouteHintHop val_conv_14_conv;
+               val_conv_14_conv.inner = untag_ptr(val_conv_14);
+               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
+               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
+               val_constr.data[o] = val_conv_14_conv;
+       }
+       FREE(val);
+       RouteHint_set_a(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_Input_new(int64_t outpoint_arg, int64_t previous_utxo_arg, int64_t satisfaction_weight_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* previous_utxo_arg_ptr = untag_ptr(previous_utxo_arg);
-       CHECK_ACCESS(previous_utxo_arg_ptr);
-       LDKTxOut previous_utxo_arg_conv = *(LDKTxOut*)(previous_utxo_arg_ptr);
-       previous_utxo_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(previous_utxo_arg));
-       LDKInput ret_var = Input_new(outpoint_arg_conv, previous_utxo_arg_conv, satisfaction_weight_arg);
+int64_t  CS_LDK_RouteHint_new(int64_tArray a_arg) {
+       LDKCVec_RouteHintHopZ a_arg_constr;
+       a_arg_constr.datalen = a_arg->arr_len;
+       if (a_arg_constr.datalen > 0)
+               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               a_arg_constr.data = NULL;
+       int64_t* a_arg_vals = a_arg->elems;
+       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
+               int64_t a_arg_conv_14 = a_arg_vals[o];
+               LDKRouteHintHop a_arg_conv_14_conv;
+               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
+               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
+               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
+               a_arg_constr.data[o] = a_arg_conv_14_conv;
+       }
+       FREE(a_arg);
+       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Input_clone_ptr(LDKInput *NONNULL_PTR arg) {
-       LDKInput ret_var = Input_clone(arg);
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Input_clone_ptr(int64_t arg) {
-       LDKInput arg_conv;
+int64_t  CS_LDK_RouteHint_clone_ptr(int64_t arg) {
+       LDKRouteHint arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Input_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Input_clone(int64_t orig) {
-       LDKInput orig_conv;
+int64_t  CS_LDK_RouteHint_clone(int64_t orig) {
+       LDKRouteHint orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInput ret_var = Input_clone(&orig_conv);
+       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Input_hash(int64_t o) {
-       LDKInput o_conv;
+int64_t  CS_LDK_RouteHint_hash(int64_t o) {
+       LDKRouteHint o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Input_hash(&o_conv);
+       int64_t ret_conv = RouteHint_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Input_eq(int64_t a, int64_t b) {
-       LDKInput a_conv;
+jboolean  CS_LDK_RouteHint_eq(int64_t a, int64_t b) {
+       LDKRouteHint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKInput b_conv;
+       LDKRouteHint b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Input_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Utxo_free(int64_t this_obj) {
-       LDKUtxo this_obj_conv;
+void  CS_LDK_RouteHintHop_free(int64_t this_obj) {
+       LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Utxo_free(this_obj_conv);
+       RouteHintHop_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Utxo_get_outpoint(int64_t this_ptr) {
-       LDKUtxo this_ptr_conv;
+int8_tArray  CS_LDK_RouteHintHop_get_src_node_id(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = Utxo_get_outpoint(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_RouteHintHop_set_src_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_RouteHintHop_get_short_channel_id(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHintHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHintHop_get_fees(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Utxo_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKUtxo this_ptr_conv;
+void  CS_LDK_RouteHintHop_set_fees(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
+       LDKRoutingFees val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       Utxo_set_outpoint(&this_ptr_conv, val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Utxo_get_output(int64_t this_ptr) {
-       LDKUtxo this_ptr_conv;
+int16_t  CS_LDK_RouteHintHop_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = Utxo_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Utxo_set_output(int64_t this_ptr, int64_t val) {
-       LDKUtxo this_ptr_conv;
+void  CS_LDK_RouteHintHop_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHintHop_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_RouteHintHop_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       Utxo_set_output(&this_ptr_conv, val_conv);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Utxo_get_satisfaction_weight(int64_t this_ptr) {
-       LDKUtxo this_ptr_conv;
+int64_t  CS_LDK_RouteHintHop_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = Utxo_get_satisfaction_weight(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Utxo_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
-       LDKUtxo this_ptr_conv;
+void  CS_LDK_RouteHintHop_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Utxo_set_satisfaction_weight(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Utxo_new(int64_t outpoint_arg, int64_t output_arg, int64_t satisfaction_weight_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKUtxo ret_var = Utxo_new(outpoint_arg_conv, output_arg_conv, satisfaction_weight_arg);
+int64_t  CS_LDK_RouteHintHop_new(int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
+       LDKPublicKey src_node_id_arg_ref;
+       CHECK(src_node_id_arg->arr_len == 33);
+       memcpy(src_node_id_arg_ref.compressed_form, src_node_id_arg->elems, 33); FREE(src_node_id_arg);
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
+       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
+       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
+       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
+       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
+       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
+       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Utxo_clone_ptr(LDKUtxo *NONNULL_PTR arg) {
-       LDKUtxo ret_var = Utxo_clone(arg);
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Utxo_clone_ptr(int64_t arg) {
-       LDKUtxo arg_conv;
+int64_t  CS_LDK_RouteHintHop_clone_ptr(int64_t arg) {
+       LDKRouteHintHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Utxo_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Utxo_clone(int64_t orig) {
-       LDKUtxo orig_conv;
+int64_t  CS_LDK_RouteHintHop_clone(int64_t orig) {
+       LDKRouteHintHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUtxo ret_var = Utxo_clone(&orig_conv);
+       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Utxo_hash(int64_t o) {
-       LDKUtxo o_conv;
+int64_t  CS_LDK_RouteHintHop_hash(int64_t o) {
+       LDKRouteHintHop o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Utxo_hash(&o_conv);
+       int64_t ret_conv = RouteHintHop_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Utxo_eq(int64_t a, int64_t b) {
-       LDKUtxo a_conv;
+jboolean  CS_LDK_RouteHintHop_eq(int64_t a, int64_t b) {
+       LDKRouteHintHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKUtxo b_conv;
+       LDKRouteHintHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Utxo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Utxo_new_p2pkh(int64_t outpoint, int64_t value, int8_tArray pubkey_hash) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       LDKUtxo ret_var = Utxo_new_p2pkh(outpoint_conv, value, pubkey_hash_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_CoinSelection_free(int64_t this_obj) {
-       LDKCoinSelection this_obj_conv;
+void  CS_LDK_UntrustedString_free(int64_t this_obj) {
+       LDKUntrustedString this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       CoinSelection_free(this_obj_conv);
-}
-
-int64_tArray  CS_LDK_CoinSelection_get_confirmed_utxos(int64_t this_ptr) {
-       LDKCoinSelection this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_UtxoZ ret_var = CoinSelection_get_confirmed_utxos(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               LDKUtxo ret_conv_6_var = ret_var.data[g];
-               int64_t ret_conv_6_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
-               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
-               ret_arr_ptr[g] = ret_conv_6_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-void  CS_LDK_CoinSelection_set_confirmed_utxos(int64_t this_ptr, int64_tArray val) {
-       LDKCoinSelection this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_UtxoZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               LDKUtxo val_conv_6_conv;
-               val_conv_6_conv.inner = untag_ptr(val_conv_6);
-               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
-               val_conv_6_conv = Utxo_clone(&val_conv_6_conv);
-               val_constr.data[g] = val_conv_6_conv;
-       }
-       FREE(val);
-       CoinSelection_set_confirmed_utxos(&this_ptr_conv, val_constr);
+       UntrustedString_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_CoinSelection_get_change_output(int64_t this_ptr) {
-       LDKCoinSelection this_ptr_conv;
+jstring  CS_LDK_UntrustedString_get_a(int64_t this_ptr) {
+       LDKUntrustedString this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_TxOutZ *ret_copy = MALLOC(sizeof(LDKCOption_TxOutZ), "LDKCOption_TxOutZ");
-       *ret_copy = CoinSelection_get_change_output(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKStr ret_str = UntrustedString_get_a(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-void  CS_LDK_CoinSelection_set_change_output(int64_t this_ptr, int64_t val) {
-       LDKCoinSelection this_ptr_conv;
+void  CS_LDK_UntrustedString_set_a(int64_t this_ptr, jstring val) {
+       LDKUntrustedString this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_TxOutZ val_conv = *(LDKCOption_TxOutZ*)(val_ptr);
-       val_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(val));
-       CoinSelection_set_change_output(&this_ptr_conv, val_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       UntrustedString_set_a(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_CoinSelection_new(int64_tArray confirmed_utxos_arg, int64_t change_output_arg) {
-       LDKCVec_UtxoZ confirmed_utxos_arg_constr;
-       confirmed_utxos_arg_constr.datalen = confirmed_utxos_arg->arr_len;
-       if (confirmed_utxos_arg_constr.datalen > 0)
-               confirmed_utxos_arg_constr.data = MALLOC(confirmed_utxos_arg_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
-       else
-               confirmed_utxos_arg_constr.data = NULL;
-       int64_t* confirmed_utxos_arg_vals = confirmed_utxos_arg->elems;
-       for (size_t g = 0; g < confirmed_utxos_arg_constr.datalen; g++) {
-               int64_t confirmed_utxos_arg_conv_6 = confirmed_utxos_arg_vals[g];
-               LDKUtxo confirmed_utxos_arg_conv_6_conv;
-               confirmed_utxos_arg_conv_6_conv.inner = untag_ptr(confirmed_utxos_arg_conv_6);
-               confirmed_utxos_arg_conv_6_conv.is_owned = ptr_is_owned(confirmed_utxos_arg_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(confirmed_utxos_arg_conv_6_conv);
-               confirmed_utxos_arg_conv_6_conv = Utxo_clone(&confirmed_utxos_arg_conv_6_conv);
-               confirmed_utxos_arg_constr.data[g] = confirmed_utxos_arg_conv_6_conv;
-       }
-       FREE(confirmed_utxos_arg);
-       void* change_output_arg_ptr = untag_ptr(change_output_arg);
-       CHECK_ACCESS(change_output_arg_ptr);
-       LDKCOption_TxOutZ change_output_arg_conv = *(LDKCOption_TxOutZ*)(change_output_arg_ptr);
-       change_output_arg_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(change_output_arg));
-       LDKCoinSelection ret_var = CoinSelection_new(confirmed_utxos_arg_constr, change_output_arg_conv);
+int64_t  CS_LDK_UntrustedString_new(jstring a_arg) {
+       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
+       LDKUntrustedString ret_var = UntrustedString_new(a_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t CoinSelection_clone_ptr(LDKCoinSelection *NONNULL_PTR arg) {
-       LDKCoinSelection ret_var = CoinSelection_clone(arg);
+static inline uint64_t UntrustedString_clone_ptr(LDKUntrustedString *NONNULL_PTR arg) {
+       LDKUntrustedString ret_var = UntrustedString_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_CoinSelection_clone_ptr(int64_t arg) {
-       LDKCoinSelection arg_conv;
+int64_t  CS_LDK_UntrustedString_clone_ptr(int64_t arg) {
+       LDKUntrustedString arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = CoinSelection_clone_ptr(&arg_conv);
+       int64_t ret_conv = UntrustedString_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CoinSelection_clone(int64_t orig) {
-       LDKCoinSelection orig_conv;
+int64_t  CS_LDK_UntrustedString_clone(int64_t orig) {
+       LDKUntrustedString orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKCoinSelection ret_var = CoinSelection_clone(&orig_conv);
+       LDKUntrustedString ret_var = UntrustedString_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_CoinSelectionSource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCoinSelectionSource this_ptr_conv = *(LDKCoinSelectionSource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CoinSelectionSource_free(this_ptr_conv);
+jboolean  CS_LDK_UntrustedString_eq(int64_t a, int64_t b) {
+       LDKUntrustedString a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKUntrustedString b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = UntrustedString_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_WalletSource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWalletSource this_ptr_conv = *(LDKWalletSource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WalletSource_free(this_ptr_conv);
+int64_t  CS_LDK_UntrustedString_hash(int64_t o) {
+       LDKUntrustedString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = UntrustedString_hash(&o_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Wallet_free(int64_t this_obj) {
-       LDKWallet this_obj_conv;
+jstring  CS_LDK_UntrustedString_to_str(int64_t o) {
+       LDKUntrustedString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = UntrustedString_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  CS_LDK_PrintableString_free(int64_t this_obj) {
+       LDKPrintableString this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Wallet_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_Wallet_new(int64_t source, int64_t logger) {
-       void* source_ptr = untag_ptr(source);
-       CHECK_ACCESS(source_ptr);
-       LDKWalletSource source_conv = *(LDKWalletSource*)(source_ptr);
-       if (source_conv.free == LDKWalletSource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKWalletSource_JCalls_cloned(&source_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKWallet ret_var = Wallet_new(source_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       PrintableString_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Wallet_as_CoinSelectionSource(int64_t this_arg) {
-       LDKWallet this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCoinSelectionSource* ret_ret = MALLOC(sizeof(LDKCoinSelectionSource), "LDKCoinSelectionSource");
-       *ret_ret = Wallet_as_CoinSelectionSource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jstring  CS_LDK_PrintableString_get_a(int64_t this_ptr) {
+       LDKPrintableString this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKStr ret_str = PrintableString_get_a(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-void  CS_LDK_BumpTransactionEventHandler_free(int64_t this_obj) {
-       LDKBumpTransactionEventHandler this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BumpTransactionEventHandler_free(this_obj_conv);
+void  CS_LDK_PrintableString_set_a(int64_t this_ptr, jstring val) {
+       LDKPrintableString this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       PrintableString_set_a(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_BumpTransactionEventHandler_new(int64_t broadcaster, int64_t utxo_source, int64_t signer_provider, int64_t logger) {
-       void* broadcaster_ptr = untag_ptr(broadcaster);
-       CHECK_ACCESS(broadcaster_ptr);
-       LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(broadcaster_ptr);
-       if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKBroadcasterInterface_JCalls_cloned(&broadcaster_conv);
-       }
-       void* utxo_source_ptr = untag_ptr(utxo_source);
-       CHECK_ACCESS(utxo_source_ptr);
-       LDKCoinSelectionSource utxo_source_conv = *(LDKCoinSelectionSource*)(utxo_source_ptr);
-       if (utxo_source_conv.free == LDKCoinSelectionSource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCoinSelectionSource_JCalls_cloned(&utxo_source_conv);
-       }
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       CHECK_ACCESS(signer_provider_ptr);
-       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
-       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKBumpTransactionEventHandler ret_var = BumpTransactionEventHandler_new(broadcaster_conv, utxo_source_conv, signer_provider_conv, logger_conv);
+int64_t  CS_LDK_PrintableString_new(jstring a_arg) {
+       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
+       LDKPrintableString ret_var = PrintableString_new(a_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_BumpTransactionEventHandler_handle_event(int64_t this_arg, int64_t event) {
-       LDKBumpTransactionEventHandler this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBumpTransactionEvent* event_conv = (LDKBumpTransactionEvent*)untag_ptr(event);
-       BumpTransactionEventHandler_handle_event(&this_arg_conv, event_conv);
+jstring  CS_LDK_PrintableString_to_str(int64_t o) {
+       LDKPrintableString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = PrintableString_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
 void  CS_LDK_FilesystemStore_free(int64_t this_obj) {
@@ -83054,7 +88302,7 @@ int64_t  CS_LDK_GossipSync_none() {
        return ret_ref;
 }
 
-int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handler, int64_t chain_monitor, int64_t channel_manager, int64_t gossip_sync, int64_t peer_manager, int64_t logger, int64_t scorer) {
+int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handler, int64_t chain_monitor, int64_t channel_manager, int64_t onion_messenger, int64_t gossip_sync, int64_t peer_manager, int64_t logger, int64_t scorer) {
        void* persister_ptr = untag_ptr(persister);
        CHECK_ACCESS(persister_ptr);
        LDKPersister persister_conv = *(LDKPersister*)(persister_ptr);
@@ -83079,6 +88327,11 @@ int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handl
        channel_manager_conv.is_owned = ptr_is_owned(channel_manager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        channel_manager_conv.is_owned = false;
+       LDKOnionMessenger onion_messenger_conv;
+       onion_messenger_conv.inner = untag_ptr(onion_messenger);
+       onion_messenger_conv.is_owned = ptr_is_owned(onion_messenger);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_messenger_conv);
+       onion_messenger_conv.is_owned = false;
        void* gossip_sync_ptr = untag_ptr(gossip_sync);
        CHECK_ACCESS(gossip_sync_ptr);
        LDKGossipSync gossip_sync_conv = *(LDKGossipSync*)(gossip_sync_ptr);
@@ -83106,7 +88359,7 @@ int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handl
                        LDKWriteableScore_JCalls_cloned(&scorer_conv.some);
                }
        }
-       LDKBackgroundProcessor ret_var = BackgroundProcessor_start(persister_conv, event_handler_conv, &chain_monitor_conv, &channel_manager_conv, gossip_sync_conv, &peer_manager_conv, logger_conv, scorer_conv);
+       LDKBackgroundProcessor ret_var = BackgroundProcessor_start(persister_conv, event_handler_conv, &chain_monitor_conv, &channel_manager_conv, &onion_messenger_conv, gossip_sync_conv, &peer_manager_conv, logger_conv, scorer_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -84290,6 +89543,40 @@ void  CS_LDK_Bolt11InvoiceSignature_free(int64_t this_obj) {
        Bolt11InvoiceSignature_free(this_obj_conv);
 }
 
+int8_tArray  CS_LDK_Bolt11InvoiceSignature_get_a(int64_t this_ptr) {
+       LDKBolt11InvoiceSignature this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(68, __LINE__);
+       memcpy(ret_arr->elems, Bolt11InvoiceSignature_get_a(&this_ptr_conv).serialized_form, 68);
+       return ret_arr;
+}
+
+void  CS_LDK_Bolt11InvoiceSignature_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKBolt11InvoiceSignature this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRecoverableSignature val_ref;
+       CHECK(val->arr_len == 68);
+       memcpy(val_ref.serialized_form, val->elems, 68); FREE(val);
+       Bolt11InvoiceSignature_set_a(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_Bolt11InvoiceSignature_new(int8_tArray a_arg) {
+       LDKRecoverableSignature a_arg_ref;
+       CHECK(a_arg->arr_len == 68);
+       memcpy(a_arg_ref.serialized_form, a_arg->elems, 68); FREE(a_arg);
+       LDKBolt11InvoiceSignature ret_var = Bolt11InvoiceSignature_new(a_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline uint64_t Bolt11InvoiceSignature_clone_ptr(LDKBolt11InvoiceSignature *NONNULL_PTR arg) {
        LDKBolt11InvoiceSignature ret_var = Bolt11InvoiceSignature_clone(arg);
        int64_t ret_ref = 0;
@@ -85020,6 +90307,19 @@ int64_t  CS_LDK_Description_into_inner(int64_t this_arg) {
        return ret_ref;
 }
 
+int64_t  CS_LDK_Description_as_inner(int64_t this_arg) {
+       LDKDescription this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKUntrustedString ret_var = Description_as_inner(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 jstring  CS_LDK_Description_to_str(int64_t o) {
        LDKDescription o_conv;
        o_conv.inner = untag_ptr(o);
@@ -85273,334 +90573,6 @@ jstring  CS_LDK_SignOrCreationError_to_str(int64_t o) {
        return ret_conv;
 }
 
-int64_t  CS_LDK_payment_parameters_from_zero_amount_invoice(int64_t invoice, int64_t amount_msat) {
-       LDKBolt11Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = payment_parameters_from_zero_amount_invoice(&invoice_conv, amount_msat);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_payment_parameters_from_invoice(int64_t invoice) {
-       LDKBolt11Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = payment_parameters_from_invoice(&invoice_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_phantom_invoice(int64_t amt_msat, int64_t payment_hash, jstring description, int32_t invoice_expiry_delta_secs, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       void* payment_hash_ptr = untag_ptr(payment_hash);
-       CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
-       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
-       if (phantom_route_hints_constr.datalen > 0)
-               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
-       else
-               phantom_route_hints_constr.data = NULL;
-       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
-       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
-               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
-               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
-               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
-               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
-               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
-               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
-       }
-       FREE(phantom_route_hints);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_phantom_invoice(amt_msat_conv, payment_hash_conv, description_conv, invoice_expiry_delta_secs, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_phantom_invoice_with_description_hash(int64_t amt_msat, int64_t payment_hash, int32_t invoice_expiry_delta_secs, int64_t description_hash, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       void* payment_hash_ptr = untag_ptr(payment_hash);
-       CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
-       LDKSha256 description_hash_conv;
-       description_hash_conv.inner = untag_ptr(description_hash);
-       description_hash_conv.is_owned = ptr_is_owned(description_hash);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
-       description_hash_conv = Sha256_clone(&description_hash_conv);
-       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
-       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
-       if (phantom_route_hints_constr.datalen > 0)
-               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
-       else
-               phantom_route_hints_constr.data = NULL;
-       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
-       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
-               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
-               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
-               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
-               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
-               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
-               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
-       }
-       FREE(phantom_route_hints);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_phantom_invoice_with_description_hash(amt_msat_conv, payment_hash_conv, invoice_expiry_delta_secs, description_hash_conv, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKSha256 description_hash_conv;
-       description_hash_conv.inner = untag_ptr(description_hash);
-       description_hash_conv.is_owned = ptr_is_owned(description_hash);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
-       description_hash_conv = Sha256_clone(&description_hash_conv);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_with_description_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKSha256 description_hash_conv;
-       description_hash_conv.inner = untag_ptr(description_hash);
-       description_hash_conv.is_owned = ptr_is_owned(description_hash);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
-       description_hash_conv = Sha256_clone(&description_hash_conv);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int8_tArray payment_hash, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, payment_hash_ref, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_SiPrefix_from_str(jstring s) {
        LDKStr s_conv = str_ref_to_owned_c(s);
        LDKCResult_SiPrefixBolt11ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixBolt11ParseErrorZ), "LDKCResult_SiPrefixBolt11ParseErrorZ");
index e50bf7d10b938c6e84aff64575d051fb0c92aba2..224be09215f9077610be26905bef1b4d0a38e42f 100644 (file)
@@ -180,10 +180,10 @@ int CS_LDK_register_l_Recipientll_invoker(invoker_l_Recipientll invoker) {
        return 0;
 }
 
-typedef int64_t (*invoker_l_llRecipient)(int obj_ptr, int fn_id, int64_t a, int64_t b, int32_t c);
-static invoker_l_llRecipient js_invoke_function_l_llRecipient;
-int CS_LDK_register_l_llRecipient_invoker(invoker_l_llRecipient invoker) {
-       js_invoke_function_l_llRecipient = invoker;
+typedef int64_t (*invoker_l_lRecipient)(int obj_ptr, int fn_id, int64_t a, int32_t b);
+static invoker_l_lRecipient js_invoke_function_l_lRecipient;
+int CS_LDK_register_l_lRecipient_invoker(invoker_l_lRecipient invoker) {
+       js_invoke_function_l_lRecipient = invoker;
        return 0;
 }
 
@@ -236,13 +236,6 @@ int CS_LDK_register_ChannelMonitorUpdateStatus_lll_invoker(invoker_ChannelMonito
        return 0;
 }
 
-typedef int32_t (*invoker_ChannelMonitorUpdateStatus_llll)(int obj_ptr, int fn_id, int64_t a, int64_t b, int64_t c, int64_t d);
-static invoker_ChannelMonitorUpdateStatus_llll js_invoke_function_ChannelMonitorUpdateStatus_llll;
-int CS_LDK_register_ChannelMonitorUpdateStatus_llll_invoker(invoker_ChannelMonitorUpdateStatus_llll invoker) {
-       js_invoke_function_ChannelMonitorUpdateStatus_llll = invoker;
-       return 0;
-}
-
 typedef void (*invoker_void_lli)(int obj_ptr, int fn_id, int64_t a, int64_t b, int32_t c);
 static invoker_void_lli js_invoke_function_void_lli;
 int CS_LDK_register_void_lli_invoker(invoker_void_lli invoker) {
@@ -362,6 +355,24 @@ static inline uint64_t tag_ptr(const void* ptr, bool is_owned) {
        }
 }
 
+static inline LDKBalanceSource LDKBalanceSource_from_cs(int32_t ord) {
+       switch (ord) {
+               case 0: return LDKBalanceSource_HolderForceClosed;
+               case 1: return LDKBalanceSource_CounterpartyForceClosed;
+               case 2: return LDKBalanceSource_CoopClose;
+               case 3: return LDKBalanceSource_Htlc;
+               default: abort();
+       }
+}
+static inline int32_t LDKBalanceSource_to_cs(LDKBalanceSource val) {
+       switch (val) {
+               case LDKBalanceSource_HolderForceClosed: return 0;
+               case LDKBalanceSource_CounterpartyForceClosed: return 1;
+               case LDKBalanceSource_CoopClose: return 2;
+               case LDKBalanceSource_Htlc: return 3;
+               default: abort();
+       }
+}
 static inline LDKBlindedFailure LDKBlindedFailure_from_cs(int32_t ord) {
        switch (ord) {
                case 0: return LDKBlindedFailure_FromIntroductionNode;
@@ -435,7 +446,8 @@ static inline LDKBolt12SemanticError LDKBolt12SemanticError_from_cs(int32_t ord)
                case 24: return LDKBolt12SemanticError_InvalidPayInfo;
                case 25: return LDKBolt12SemanticError_MissingCreationTime;
                case 26: return LDKBolt12SemanticError_MissingPaymentHash;
-               case 27: return LDKBolt12SemanticError_MissingSignature;
+               case 27: return LDKBolt12SemanticError_UnexpectedPaymentHash;
+               case 28: return LDKBolt12SemanticError_MissingSignature;
                default: abort();
        }
 }
@@ -468,7 +480,8 @@ static inline int32_t LDKBolt12SemanticError_to_cs(LDKBolt12SemanticError val) {
                case LDKBolt12SemanticError_InvalidPayInfo: return 24;
                case LDKBolt12SemanticError_MissingCreationTime: return 25;
                case LDKBolt12SemanticError_MissingPaymentHash: return 26;
-               case LDKBolt12SemanticError_MissingSignature: return 27;
+               case LDKBolt12SemanticError_UnexpectedPaymentHash: return 27;
+               case LDKBolt12SemanticError_MissingSignature: return 28;
                default: abort();
        }
 }
@@ -524,25 +537,27 @@ static inline int32_t LDKChannelShutdownState_to_cs(LDKChannelShutdownState val)
 }
 static inline LDKConfirmationTarget LDKConfirmationTarget_from_cs(int32_t ord) {
        switch (ord) {
-               case 0: return LDKConfirmationTarget_OnChainSweep;
-               case 1: return LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee;
-               case 2: return LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee;
-               case 3: return LDKConfirmationTarget_AnchorChannelFee;
-               case 4: return LDKConfirmationTarget_NonAnchorChannelFee;
-               case 5: return LDKConfirmationTarget_ChannelCloseMinimum;
-               case 6: return LDKConfirmationTarget_OutputSpendingFee;
+               case 0: return LDKConfirmationTarget_MaximumFeeEstimate;
+               case 1: return LDKConfirmationTarget_UrgentOnChainSweep;
+               case 2: return LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee;
+               case 3: return LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee;
+               case 4: return LDKConfirmationTarget_AnchorChannelFee;
+               case 5: return LDKConfirmationTarget_NonAnchorChannelFee;
+               case 6: return LDKConfirmationTarget_ChannelCloseMinimum;
+               case 7: return LDKConfirmationTarget_OutputSpendingFee;
                default: abort();
        }
 }
 static inline int32_t LDKConfirmationTarget_to_cs(LDKConfirmationTarget val) {
        switch (val) {
-               case LDKConfirmationTarget_OnChainSweep: return 0;
-               case LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee: return 1;
-               case LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee: return 2;
-               case LDKConfirmationTarget_AnchorChannelFee: return 3;
-               case LDKConfirmationTarget_NonAnchorChannelFee: return 4;
-               case LDKConfirmationTarget_ChannelCloseMinimum: return 5;
-               case LDKConfirmationTarget_OutputSpendingFee: return 6;
+               case LDKConfirmationTarget_MaximumFeeEstimate: return 0;
+               case LDKConfirmationTarget_UrgentOnChainSweep: return 1;
+               case LDKConfirmationTarget_MinAllowedAnchorChannelRemoteFee: return 2;
+               case LDKConfirmationTarget_MinAllowedNonAnchorChannelRemoteFee: return 3;
+               case LDKConfirmationTarget_AnchorChannelFee: return 4;
+               case LDKConfirmationTarget_NonAnchorChannelFee: return 5;
+               case LDKConfirmationTarget_ChannelCloseMinimum: return 6;
+               case LDKConfirmationTarget_OutputSpendingFee: return 7;
                default: abort();
        }
 }
@@ -752,6 +767,9 @@ static inline LDKPaymentFailureReason LDKPaymentFailureReason_from_cs(int32_t or
                case 3: return LDKPaymentFailureReason_PaymentExpired;
                case 4: return LDKPaymentFailureReason_RouteNotFound;
                case 5: return LDKPaymentFailureReason_UnexpectedError;
+               case 6: return LDKPaymentFailureReason_UnknownRequiredFeatures;
+               case 7: return LDKPaymentFailureReason_InvoiceRequestExpired;
+               case 8: return LDKPaymentFailureReason_InvoiceRequestRejected;
                default: abort();
        }
 }
@@ -763,6 +781,9 @@ static inline int32_t LDKPaymentFailureReason_to_cs(LDKPaymentFailureReason val)
                case LDKPaymentFailureReason_PaymentExpired: return 3;
                case LDKPaymentFailureReason_RouteNotFound: return 4;
                case LDKPaymentFailureReason_UnexpectedError: return 5;
+               case LDKPaymentFailureReason_UnknownRequiredFeatures: return 6;
+               case LDKPaymentFailureReason_InvoiceRequestExpired: return 7;
+               case LDKPaymentFailureReason_InvoiceRequestRejected: return 8;
                default: abort();
        }
 }
@@ -785,6 +806,7 @@ static inline LDKRetryableSendFailure LDKRetryableSendFailure_from_cs(int32_t or
                case 0: return LDKRetryableSendFailure_PaymentExpired;
                case 1: return LDKRetryableSendFailure_RouteNotFound;
                case 2: return LDKRetryableSendFailure_DuplicatePayment;
+               case 3: return LDKRetryableSendFailure_OnionPacketSizeExceeded;
                default: abort();
        }
 }
@@ -793,6 +815,7 @@ static inline int32_t LDKRetryableSendFailure_to_cs(LDKRetryableSendFailure val)
                case LDKRetryableSendFailure_PaymentExpired: return 0;
                case LDKRetryableSendFailure_RouteNotFound: return 1;
                case LDKRetryableSendFailure_DuplicatePayment: return 2;
+               case LDKRetryableSendFailure_OnionPacketSizeExceeded: return 3;
                default: abort();
        }
 }
@@ -809,6 +832,7 @@ static inline LDKSecp256k1Error LDKSecp256k1Error_from_cs(int32_t ord) {
                case 8: return LDKSecp256k1Error_NotEnoughMemory;
                case 9: return LDKSecp256k1Error_InvalidPublicKeySum;
                case 10: return LDKSecp256k1Error_InvalidParityValue;
+               case 11: return LDKSecp256k1Error_InvalidEllSwift;
                default: abort();
        }
 }
@@ -825,6 +849,7 @@ static inline int32_t LDKSecp256k1Error_to_cs(LDKSecp256k1Error val) {
                case LDKSecp256k1Error_NotEnoughMemory: return 8;
                case LDKSecp256k1Error_InvalidPublicKeySum: return 9;
                case LDKSecp256k1Error_InvalidParityValue: return 10;
+               case LDKSecp256k1Error_InvalidEllSwift: return 11;
                default: abort();
        }
 }
@@ -1007,13 +1032,59 @@ int64_t CS_LDK_LDKCOption_u64Z_Some_get_some(int64_t ptr) {
        int64_t some_conv = obj->some;
        return some_conv;
 }
-static inline LDKCVec_BlindedPathZ CVec_BlindedPathZ_clone(const LDKCVec_BlindedPathZ *orig) {
-       LDKCVec_BlindedPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPath) * orig->datalen, "LDKCVec_BlindedPathZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_BlindedMessagePathZ CVec_BlindedMessagePathZ_clone(const LDKCVec_BlindedMessagePathZ *orig) {
+       LDKCVec_BlindedMessagePathZ ret = { .data = MALLOC(sizeof(LDKBlindedMessagePath) * orig->datalen, "LDKCVec_BlindedMessagePathZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = BlindedPath_clone(&orig->data[i]);
+               ret.data[i] = BlindedMessagePath_clone(&orig->data[i]);
+       }
+       return ret;
+}
+uint32_t CS_LDK_LDKDecodeError_ty_from_ptr(int64_t ptr) {
+       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKDecodeError_UnknownVersion: return 0;
+               case LDKDecodeError_UnknownRequiredFeature: return 1;
+               case LDKDecodeError_InvalidValue: return 2;
+               case LDKDecodeError_ShortRead: return 3;
+               case LDKDecodeError_BadLengthDescriptor: return 4;
+               case LDKDecodeError_Io: return 5;
+               case LDKDecodeError_UnsupportedCompression: return 6;
+               case LDKDecodeError_DangerousValue: return 7;
+               default: abort();
        }
+}
+int32_t CS_LDK_LDKDecodeError_Io_get_io(int64_t ptr) {
+       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKDecodeError_Io);
+       int32_t io_conv = LDKIOError_to_cs(obj->io);
+       return io_conv;
+}
+static inline struct LDKRefund CResult_RefundDecodeErrorZ_get_ok(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR owner){
+       LDKRefund ret = *owner->contents.result;
+       ret.is_owned = false;
        return ret;
 }
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_RefundDecodeErrorZ* owner_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(owner);
+       LDKRefund ret_var = CResult_RefundDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_RefundDecodeErrorZ_get_err(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_RefundDecodeErrorZ* owner_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_RefundDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKRefund CResult_RefundBolt12ParseErrorZ_get_ok(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKRefund ret = *owner->contents.result;
        ret.is_owned = false;
@@ -1062,26 +1133,6 @@ int64_t CS_LDK_LDKRetry_Timeout_get_timeout(int64_t ptr) {
        int64_t timeout_conv = obj->timeout;
        return timeout_conv;
 }
-uint32_t CS_LDK_LDKDecodeError_ty_from_ptr(int64_t ptr) {
-       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKDecodeError_UnknownVersion: return 0;
-               case LDKDecodeError_UnknownRequiredFeature: return 1;
-               case LDKDecodeError_InvalidValue: return 2;
-               case LDKDecodeError_ShortRead: return 3;
-               case LDKDecodeError_BadLengthDescriptor: return 4;
-               case LDKDecodeError_Io: return 5;
-               case LDKDecodeError_UnsupportedCompression: return 6;
-               case LDKDecodeError_DangerousValue: return 7;
-               default: abort();
-       }
-}
-int32_t CS_LDK_LDKDecodeError_Io_get_io(int64_t ptr) {
-       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKDecodeError_Io);
-       int32_t io_conv = LDKIOError_to_cs(obj->io);
-       return io_conv;
-}
 static inline struct LDKRetry CResult_RetryDecodeErrorZ_get_ok(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return Retry_clone(&*owner->contents.result);
@@ -1492,28 +1543,28 @@ void  CS_LDK_CResult_ThirtyTwoBytesNoneZ_get_err(int64_t owner) {
        CResult_ThirtyTwoBytesNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
-       LDKBlindedPayInfo ret = *owner->contents.result;
+static inline struct LDKBolt12Invoice CResult_Bolt12InvoiceDecodeErrorZ_get_ok(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR owner){
+       LDKBolt12Invoice ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
-       LDKBlindedPayInfo ret_var = CResult_BlindedPayInfoDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* owner_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(owner);
+       LDKBolt12Invoice ret_var = CResult_Bolt12InvoiceDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_Bolt12InvoiceDecodeErrorZ_get_err(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* owner_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_BlindedPayInfoDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_Bolt12InvoiceDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -1764,24 +1815,6 @@ int64_t  CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return *owner->contents.result;
-}
-void  CS_LDK_CResult_NoneNoneZ_get_ok(int64_t owner) {
-       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
-       CResult_NoneNoneZ_get_ok(owner_conv);
-}
-
-static inline void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-void  CS_LDK_CResult_NoneNoneZ_get_err(int64_t owner) {
-       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
-       CResult_NoneNoneZ_get_err(owner_conv);
-}
-
 static inline struct LDKPublicKey CResult_PublicKeyNoneZ_get_ok(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -1802,6 +1835,44 @@ void  CS_LDK_CResult_PublicKeyNoneZ_get_err(int64_t owner) {
        CResult_PublicKeyNoneZ_get_err(owner_conv);
 }
 
+static inline struct LDKThirtyTwoBytes CResult__u832NoneZ_get_ok(LDKCResult__u832NoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return ThirtyTwoBytes_clone(&*owner->contents.result);
+}
+int8_tArray  CS_LDK_CResult__u832NoneZ_get_ok(int64_t owner) {
+       LDKCResult__u832NoneZ* owner_conv = (LDKCResult__u832NoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, CResult__u832NoneZ_get_ok(owner_conv).data, 32);
+       return ret_arr;
+}
+
+static inline void CResult__u832NoneZ_get_err(LDKCResult__u832NoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult__u832NoneZ_get_err(int64_t owner) {
+       LDKCResult__u832NoneZ* owner_conv = (LDKCResult__u832NoneZ*)untag_ptr(owner);
+       CResult__u832NoneZ_get_err(owner_conv);
+}
+
+static inline void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return *owner->contents.result;
+}
+void  CS_LDK_CResult_NoneNoneZ_get_ok(int64_t owner) {
+       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
+       CResult_NoneNoneZ_get_ok(owner_conv);
+}
+
+static inline void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_NoneNoneZ_get_err(int64_t owner) {
+       LDKCResult_NoneNoneZ* owner_conv = (LDKCResult_NoneNoneZ*)untag_ptr(owner);
+       CResult_NoneNoneZ_get_err(owner_conv);
+}
+
 uint32_t CS_LDK_LDKCOption_BigEndianScalarZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_BigEndianScalarZ *obj = (LDKCOption_BigEndianScalarZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -1935,23 +2006,25 @@ static void LDKChannelSigner_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKPublicKey get_per_commitment_point_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
+LDKCResult_PublicKeyNoneZ get_per_commitment_point_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 0, idx_conv);
-       LDKPublicKey ret_ref;
-       CHECK(ret->arr_len == 33);
-       memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
-       return ret_ref;
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 0, idx_conv);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_PublicKeyNoneZ ret_conv = *(LDKCResult_PublicKeyNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
 }
-LDKThirtyTwoBytes release_commitment_secret_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
+LDKCResult__u832NoneZ release_commitment_secret_LDKChannelSigner_jcall(const void* this_arg, uint64_t idx) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
        int64_t idx_conv = idx;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 1, idx_conv);
-       LDKThirtyTwoBytes ret_ref;
-       CHECK(ret->arr_len == 32);
-       memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
-       return ret_ref;
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 1, idx_conv);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult__u832NoneZ ret_conv = *(LDKCResult__u832NoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
 }
 LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * holder_tx, LDKCVec_ThirtyTwoBytesZ outbound_htlc_preimages) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
@@ -2040,22 +2113,22 @@ uint64_t  CS_LDK_LDKChannelSigner_new(int32_t o, int64_t pubkeys) {
        *res_ptr = LDKChannelSigner_init(o, pubkeys);
        return tag_ptr(res_ptr, true);
 }
-int8_tArray  CS_LDK_ChannelSigner_get_per_commitment_point(int64_t this_arg, int64_t idx) {
+int64_t  CS_LDK_ChannelSigner_get_per_commitment_point(int64_t this_arg, int64_t idx) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKChannelSigner* this_arg_conv = (LDKChannelSigner*)this_arg_ptr;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, (this_arg_conv->get_per_commitment_point)(this_arg_conv->this_arg, idx).compressed_form, 33);
-       return ret_arr;
+       LDKCResult_PublicKeyNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyNoneZ), "LDKCResult_PublicKeyNoneZ");
+       *ret_conv = (this_arg_conv->get_per_commitment_point)(this_arg_conv->this_arg, idx);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_ChannelSigner_release_commitment_secret(int64_t this_arg, int64_t idx) {
+int64_t  CS_LDK_ChannelSigner_release_commitment_secret(int64_t this_arg, int64_t idx) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKChannelSigner* this_arg_conv = (LDKChannelSigner*)this_arg_ptr;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, (this_arg_conv->release_commitment_secret)(this_arg_conv->this_arg, idx).data, 32);
-       return ret_arr;
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = (this_arg_conv->release_commitment_secret)(this_arg_conv->this_arg, idx);
+       return tag_ptr(ret_conv, true);
 }
 
 int64_t  CS_LDK_ChannelSigner_validate_holder_commitment(int64_t this_arg, int64_t holder_tx, ptrArray outbound_htlc_preimages) {
@@ -2346,6 +2419,7 @@ static inline LDKEcdsaChannelSigner LDKEcdsaChannelSigner_init (int64_t o, int64
                .sign_closing_transaction = sign_closing_transaction_LDKEcdsaChannelSigner_jcall,
                .sign_holder_anchor_input = sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall,
                .sign_channel_announcement_with_funding_key = sign_channel_announcement_with_funding_key_LDKEcdsaChannelSigner_jcall,
+               .cloned = LDKEcdsaChannelSigner_JCalls_cloned,
                .free = LDKEcdsaChannelSigner_JCalls_free,
                .ChannelSigner = LDKChannelSigner_init(ChannelSigner, pubkeys),
        };
@@ -2539,89 +2613,25 @@ int64_t  CS_LDK_EcdsaChannelSigner_sign_channel_announcement_with_funding_key(in
        return tag_ptr(ret_conv, true);
 }
 
-typedef struct LDKWriteableEcdsaChannelSigner_JCalls {
-       atomic_size_t refcnt;
-       uint32_t instance_ptr;
-       LDKEcdsaChannelSigner_JCalls* EcdsaChannelSigner;
-       LDKChannelSigner_JCalls* ChannelSigner;
-} LDKWriteableEcdsaChannelSigner_JCalls;
-static void LDKWriteableEcdsaChannelSigner_JCalls_free(void* this_arg) {
-       LDKWriteableEcdsaChannelSigner_JCalls *j_calls = (LDKWriteableEcdsaChannelSigner_JCalls*) this_arg;
-       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
-               FREE(j_calls);
-       }
-}
-LDKCVec_u8Z write_LDKWriteableEcdsaChannelSigner_jcall(const void* this_arg) {
-       LDKWriteableEcdsaChannelSigner_JCalls *j_calls = (LDKWriteableEcdsaChannelSigner_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 15);
-       LDKCVec_u8Z ret_ref;
-       ret_ref.datalen = ret->arr_len;
-       ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(ret_ref.data, ret->elems, ret_ref.datalen); FREE(ret);
-       return ret_ref;
-}
-static void LDKWriteableEcdsaChannelSigner_JCalls_cloned(LDKWriteableEcdsaChannelSigner* new_obj) {
-       LDKWriteableEcdsaChannelSigner_JCalls *j_calls = (LDKWriteableEcdsaChannelSigner_JCalls*) new_obj->this_arg;
-       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
-       atomic_fetch_add_explicit(&j_calls->EcdsaChannelSigner->refcnt, 1, memory_order_release);
-       atomic_fetch_add_explicit(&j_calls->EcdsaChannelSigner->ChannelSigner->refcnt, 1, memory_order_release);
-}
-static inline LDKWriteableEcdsaChannelSigner LDKWriteableEcdsaChannelSigner_init (int64_t o, int64_t EcdsaChannelSigner, int64_t ChannelSigner, int64_t pubkeys) {
-       LDKWriteableEcdsaChannelSigner_JCalls *calls = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner_JCalls), "LDKWriteableEcdsaChannelSigner_JCalls");
-       atomic_init(&calls->refcnt, 1);
-       calls->instance_ptr = o;
-
-       LDKChannelPublicKeys pubkeys_conv;
-       pubkeys_conv.inner = untag_ptr(pubkeys);
-       pubkeys_conv.is_owned = ptr_is_owned(pubkeys);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
-
-       LDKWriteableEcdsaChannelSigner ret = {
-               .this_arg = (void*) calls,
-               .write = write_LDKWriteableEcdsaChannelSigner_jcall,
-               .cloned = LDKWriteableEcdsaChannelSigner_JCalls_cloned,
-               .free = LDKWriteableEcdsaChannelSigner_JCalls_free,
-               .EcdsaChannelSigner = LDKEcdsaChannelSigner_init(EcdsaChannelSigner, ChannelSigner, pubkeys),
-       };
-       calls->EcdsaChannelSigner = ret.EcdsaChannelSigner.this_arg;
-       calls->ChannelSigner = ret.EcdsaChannelSigner.ChannelSigner.this_arg;
-       return ret;
-}
-uint64_t  CS_LDK_LDKWriteableEcdsaChannelSigner_new(int32_t o, int32_t EcdsaChannelSigner, int32_t ChannelSigner, int64_t pubkeys) {
-       LDKWriteableEcdsaChannelSigner *res_ptr = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *res_ptr = LDKWriteableEcdsaChannelSigner_init(o, EcdsaChannelSigner, ChannelSigner, pubkeys);
-       return tag_ptr(res_ptr, true);
-}
-int8_tArray  CS_LDK_WriteableEcdsaChannelSigner_write(int64_t this_arg) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKWriteableEcdsaChannelSigner* this_arg_conv = (LDKWriteableEcdsaChannelSigner*)this_arg_ptr;
-       LDKCVec_u8Z ret_var = (this_arg_conv->write)(this_arg_conv->this_arg);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-static inline struct LDKWriteableEcdsaChannelSigner CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKEcdsaChannelSigner CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return WriteableEcdsaChannelSigner_clone(&*owner->contents.result);
+       return EcdsaChannelSigner_clone(&*owner->contents.result);
 }
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(owner_conv);
        return tag_ptr(ret_ret, true);
 }
 
-static inline struct LDKDecodeError CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_EcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* owner_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_EcdsaChannelSignerDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -2827,7 +2837,7 @@ uint64_t channel_penalty_msat_LDKScoreLookUp_jcall(const void* this_arg, const L
        score_params_var = ProbabilisticScoringFeeParameters_clone(&score_params_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_var);
        score_params_ref = tag_ptr(score_params_var.inner, score_params_var.is_owned);
-       return js_invoke_function_l_lll(j_calls->instance_ptr, 16, ref_candidate, usage_ref, score_params_ref);
+       return js_invoke_function_l_lll(j_calls->instance_ptr, 15, ref_candidate, usage_ref, score_params_ref);
 }
 static void LDKScoreLookUp_JCalls_cloned(LDKScoreLookUp* new_obj) {
        LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) new_obj->this_arg;
@@ -2888,7 +2898,7 @@ void payment_path_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * pa
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t short_channel_id_conv = short_channel_id;
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_lll(j_calls->instance_ptr, 17, path_ref, short_channel_id_conv, duration_since_epoch_conv);
+       js_invoke_function_void_lll(j_calls->instance_ptr, 16, path_ref, short_channel_id_conv, duration_since_epoch_conv);
 }
 void payment_path_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
@@ -2898,7 +2908,7 @@ void payment_path_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath
        CHECK_INNER_FIELD_ACCESS_OR_NULL(path_var);
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_ll(j_calls->instance_ptr, 18, path_ref, duration_since_epoch_conv);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 17, path_ref, duration_since_epoch_conv);
 }
 void probe_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
@@ -2909,7 +2919,7 @@ void probe_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uin
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t short_channel_id_conv = short_channel_id;
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_lll(j_calls->instance_ptr, 19, path_ref, short_channel_id_conv, duration_since_epoch_conv);
+       js_invoke_function_void_lll(j_calls->instance_ptr, 18, path_ref, short_channel_id_conv, duration_since_epoch_conv);
 }
 void probe_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
@@ -2919,12 +2929,12 @@ void probe_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path,
        CHECK_INNER_FIELD_ACCESS_OR_NULL(path_var);
        path_ref = tag_ptr(path_var.inner, path_var.is_owned);
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_ll(j_calls->instance_ptr, 20, path_ref, duration_since_epoch_conv);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 19, path_ref, duration_since_epoch_conv);
 }
 void time_passed_LDKScoreUpdate_jcall(void* this_arg, uint64_t duration_since_epoch) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        int64_t duration_since_epoch_conv = duration_since_epoch;
-       js_invoke_function_void_l(j_calls->instance_ptr, 21, duration_since_epoch_conv);
+       js_invoke_function_void_l(j_calls->instance_ptr, 20, duration_since_epoch_conv);
 }
 static void LDKScoreUpdate_JCalls_cloned(LDKScoreUpdate* new_obj) {
        LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) new_obj->this_arg;
@@ -3018,7 +3028,7 @@ static void LDKLockableScore_JCalls_free(void* this_arg) {
 }
 LDKScoreLookUp read_lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 22);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 21);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKScoreLookUp ret_conv = *(LDKScoreLookUp*)(ret_ptr);
@@ -3031,7 +3041,7 @@ LDKScoreLookUp read_lock_LDKLockableScore_jcall(const void* this_arg) {
 }
 LDKScoreUpdate write_lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 23);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 22);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKScoreUpdate ret_conv = *(LDKScoreUpdate*)(ret_ptr);
@@ -3095,7 +3105,7 @@ static void LDKWriteableScore_JCalls_free(void* this_arg) {
 }
 LDKCVec_u8Z write_LDKWriteableScore_jcall(const void* this_arg) {
        LDKWriteableScore_JCalls *j_calls = (LDKWriteableScore_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 24);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 23);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -3176,103 +3186,135 @@ int32_t  CS_LDK_CResult_NoneIOErrorZ_get_err(int64_t owner) {
        return ret_conv;
 }
 
-static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
-       LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ChannelDetails_clone(&orig->data[i]);
-       }
-       return ret;
+static inline struct LDKThirtyTwoBytes C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
+       return ThirtyTwoBytes_clone(&owner->a);
 }
-static inline struct LDKRoute CResult_RouteLightningErrorZ_get_ok(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
-       LDKRoute ret = *owner->contents.result;
+int8_tArray  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(int64_t owner) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(owner_conv).data, 32);
+       return ret_arr;
+}
+
+static inline struct LDKRecipientOnionFields C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
+       LDKRecipientOnionFields ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_ok(int64_t owner) {
-       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
-       LDKRoute ret_var = CResult_RouteLightningErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(int64_t owner) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
+       LDKRecipientOnionFields ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKLightningError CResult_RouteLightningErrorZ_get_err(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
-       LDKLightningError ret = *owner->contents.err;
+static inline struct LDKRouteParameters C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
+       LDKRouteParameters ret = owner->c;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_err(int64_t owner) {
-       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
-       LDKLightningError ret_var = CResult_RouteLightningErrorZ_get_err(owner_conv);
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(int64_t owner) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
+       LDKRouteParameters ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPayInfo C2Tuple_BlindedPayInfoBlindedPathZ_get_a(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPayInfo ret = owner->a;
+static inline struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(int64_t owner) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(int64_t owner) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
+       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(owner_conv);
+}
+
+static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
+       LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = ChannelDetails_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKRoute CResult_RouteLightningErrorZ_get_ok(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
+       LDKRoute ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_get_a(int64_t owner) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* owner_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPayInfo ret_var = C2Tuple_BlindedPayInfoBlindedPathZ_get_a(owner_conv);
+int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_ok(int64_t owner) {
+       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
+       LDKRoute ret_var = CResult_RouteLightningErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath C2Tuple_BlindedPayInfoBlindedPathZ_get_b(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = owner->b;
+static inline struct LDKLightningError CResult_RouteLightningErrorZ_get_err(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner){
+       LDKLightningError ret = *owner->contents.err;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_get_b(int64_t owner) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* owner_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = C2Tuple_BlindedPayInfoBlindedPathZ_get_b(owner_conv);
+int64_t  CS_LDK_CResult_RouteLightningErrorZ_get_err(int64_t owner) {
+       LDKCResult_RouteLightningErrorZ* owner_conv = (LDKCResult_RouteLightningErrorZ*)untag_ptr(owner);
+       LDKLightningError ret_var = CResult_RouteLightningErrorZ_get_err(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_clone(const LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ *orig) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ) * orig->datalen, "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_BlindedPaymentPathZ CVec_BlindedPaymentPathZ_clone(const LDKCVec_BlindedPaymentPathZ *orig) {
+       LDKCVec_BlindedPaymentPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPaymentPath) * orig->datalen, "LDKCVec_BlindedPaymentPathZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_BlindedPayInfoBlindedPathZ_clone(&orig->data[i]);
+               ret.data[i] = BlindedPaymentPath_clone(&orig->data[i]);
        }
        return ret;
 }
-static inline struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_BlindedPaymentPathZ CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_clone(&*owner->contents.result);
+       return CVec_BlindedPaymentPathZ_clone(&*owner->contents.result);
 }
-int64_tArray  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ ret_var = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(owner_conv);
+int64_tArray  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(int64_t owner) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(owner);
+       LDKCVec_BlindedPaymentPathZ ret_var = CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(owner_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t l = 0; l < ret_var.datalen; l++) {
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv_37_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-               *ret_conv_37_conv = ret_var.data[l];
-               ret_arr_ptr[l] = tag_ptr(ret_conv_37_conv, true);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedPaymentPath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline void CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_BlindedPaymentPathZNoneZ_get_err(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-void  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(owner);
-       CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(owner_conv);
+void  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_get_err(int64_t owner) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(owner);
+       CResult_CVec_BlindedPaymentPathZNoneZ_get_err(owner_conv);
 }
 
 static inline struct LDKOnionMessagePath CResult_OnionMessagePathNoneZ_get_ok(LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR owner){
@@ -3298,37 +3340,44 @@ void  CS_LDK_CResult_OnionMessagePathNoneZ_get_err(int64_t owner) {
        CResult_OnionMessagePathNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKCVec_BlindedPathZ CResult_CVec_BlindedPathZNoneZ_get_ok(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_BlindedMessagePathZ CResult_CVec_BlindedMessagePathZNoneZ_get_ok(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return CVec_BlindedPathZ_clone(&*owner->contents.result);
+       return CVec_BlindedMessagePathZ_clone(&*owner->contents.result);
 }
-int64_tArray  CS_LDK_CResult_CVec_BlindedPathZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_CVec_BlindedPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(owner);
-       LDKCVec_BlindedPathZ ret_var = CResult_CVec_BlindedPathZNoneZ_get_ok(owner_conv);
+int64_tArray  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_get_ok(int64_t owner) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(owner);
+       LDKCVec_BlindedMessagePathZ ret_var = CResult_CVec_BlindedMessagePathZNoneZ_get_ok(owner_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline void CResult_CVec_BlindedPathZNoneZ_get_err(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_BlindedMessagePathZNoneZ_get_err(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-void  CS_LDK_CResult_CVec_BlindedPathZNoneZ_get_err(int64_t owner) {
-       LDKCResult_CVec_BlindedPathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(owner);
-       CResult_CVec_BlindedPathZNoneZ_get_err(owner_conv);
+void  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_get_err(int64_t owner) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* owner_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(owner);
+       CResult_CVec_BlindedMessagePathZNoneZ_get_err(owner_conv);
 }
 
+static inline LDKCVec_MessageForwardNodeZ CVec_MessageForwardNodeZ_clone(const LDKCVec_MessageForwardNodeZ *orig) {
+       LDKCVec_MessageForwardNodeZ ret = { .data = MALLOC(sizeof(LDKMessageForwardNode) * orig->datalen, "LDKCVec_MessageForwardNodeZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = MessageForwardNode_clone(&orig->data[i]);
+       }
+       return ret;
+}
 static inline struct LDKInFlightHtlcs CResult_InFlightHtlcsDecodeErrorZ_get_ok(LDKCResult_InFlightHtlcsDecodeErrorZ *NONNULL_PTR owner){
        LDKInFlightHtlcs ret = *owner->contents.result;
        ret.is_owned = false;
@@ -3518,13 +3567,6 @@ static inline LDKCVec_RouteHintZ CVec_RouteHintZ_clone(const LDKCVec_RouteHintZ
        }
        return ret;
 }
-static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
-       LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = RouteHintHop_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static inline struct LDKRouteHint CResult_RouteHintDecodeErrorZ_get_ok(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR owner){
        LDKRouteHint ret = *owner->contents.result;
        ret.is_owned = false;
@@ -3729,7 +3771,7 @@ void log_LDKLogger_jcall(const void* this_arg, LDKRecord record) {
        int64_t record_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(record_var);
        record_ref = tag_ptr(record_var.inner, record_var.is_owned);
-       js_invoke_function_void_l(j_calls->instance_ptr, 25, record_ref);
+       js_invoke_function_void_l(j_calls->instance_ptr, 24, record_ref);
 }
 static void LDKLogger_JCalls_cloned(LDKLogger* new_obj) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) new_obj->this_arg;
@@ -3903,6 +3945,7 @@ uint32_t CS_LDK_LDKClosureReason_ty_from_ptr(int64_t ptr) {
                case LDKClosureReason_CounterpartyCoopClosedUnfundedChannel: return 10;
                case LDKClosureReason_FundingBatchClosure: return 11;
                case LDKClosureReason_HTLCsTimedOut: return 12;
+               case LDKClosureReason_PeerFeerateTooLow: return 13;
                default: abort();
        }
 }
@@ -3915,6 +3958,12 @@ int64_t CS_LDK_LDKClosureReason_CounterpartyForceClosed_get_peer_msg(int64_t ptr
                        peer_msg_ref = tag_ptr(peer_msg_var.inner, false);
        return peer_msg_ref;
 }
+int64_t CS_LDK_LDKClosureReason_HolderForceClosed_get_broadcasted_latest_txn(int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKClosureReason_HolderForceClosed);
+       int64_t broadcasted_latest_txn_ref = tag_ptr(&obj->holder_force_closed.broadcasted_latest_txn, false);
+       return broadcasted_latest_txn_ref;
+}
 jstring CS_LDK_LDKClosureReason_ProcessingError_get_err(int64_t ptr) {
        LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
        CHECK(obj->tag == LDKClosureReason_ProcessingError);
@@ -3922,6 +3971,18 @@ jstring CS_LDK_LDKClosureReason_ProcessingError_get_err(int64_t ptr) {
                        jstring err_conv = str_ref_to_cs(err_str.chars, err_str.len);
        return err_conv;
 }
+int32_t CS_LDK_LDKClosureReason_PeerFeerateTooLow_get_peer_feerate_sat_per_kw(int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKClosureReason_PeerFeerateTooLow);
+       int32_t peer_feerate_sat_per_kw_conv = obj->peer_feerate_too_low.peer_feerate_sat_per_kw;
+       return peer_feerate_sat_per_kw_conv;
+}
+int32_t CS_LDK_LDKClosureReason_PeerFeerateTooLow_get_required_feerate_sat_per_kw(int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKClosureReason_PeerFeerateTooLow);
+       int32_t required_feerate_sat_per_kw_conv = obj->peer_feerate_too_low.required_feerate_sat_per_kw;
+       return required_feerate_sat_per_kw_conv;
+}
 uint32_t CS_LDK_LDKMonitorEvent_ty_from_ptr(int64_t ptr) {
        LDKMonitorEvent *obj = (LDKMonitorEvent*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -4369,6 +4430,32 @@ int32_t  CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticEr
        return ret_conv;
 }
 
+static inline struct LDKOffer CResult_OfferDecodeErrorZ_get_ok(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR owner){
+       LDKOffer ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_OfferDecodeErrorZ* owner_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(owner);
+       LDKOffer ret_var = CResult_OfferDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_OfferDecodeErrorZ_get_err(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_OfferDecodeErrorZ* owner_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_OfferDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKOffer CResult_OfferBolt12ParseErrorZ_get_ok(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKOffer ret = *owner->contents.result;
        ret.is_owned = false;
@@ -4447,21 +4534,11 @@ int32_t  CS_LDK_CResult_PublicKeySecp256k1ErrorZ_get_err(int64_t owner) {
 uint32_t CS_LDK_LDKNetworkUpdate_ty_from_ptr(int64_t ptr) {
        LDKNetworkUpdate *obj = (LDKNetworkUpdate*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKNetworkUpdate_ChannelUpdateMessage: return 0;
-               case LDKNetworkUpdate_ChannelFailure: return 1;
-               case LDKNetworkUpdate_NodeFailure: return 2;
+               case LDKNetworkUpdate_ChannelFailure: return 0;
+               case LDKNetworkUpdate_NodeFailure: return 1;
                default: abort();
        }
 }
-int64_t CS_LDK_LDKNetworkUpdate_ChannelUpdateMessage_get_msg(int64_t ptr) {
-       LDKNetworkUpdate *obj = (LDKNetworkUpdate*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKNetworkUpdate_ChannelUpdateMessage);
-       LDKChannelUpdate msg_var = obj->channel_update_message.msg;
-                       int64_t msg_ref = 0;
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
-                       msg_ref = tag_ptr(msg_var.inner, false);
-       return msg_ref;
-}
 int64_t CS_LDK_LDKNetworkUpdate_ChannelFailure_get_short_channel_id(int64_t ptr) {
        LDKNetworkUpdate *obj = (LDKNetworkUpdate*)untag_ptr(ptr);
        CHECK(obj->tag == LDKNetworkUpdate_ChannelFailure);
@@ -4586,7 +4663,7 @@ LDKUtxoResult get_utxo_LDKUtxoLookup_jcall(const void* this_arg, const uint8_t (
        int8_tArray chain_hash_arr = init_int8_tArray(32, __LINE__);
        memcpy(chain_hash_arr->elems, *chain_hash, 32);
        int64_t short_channel_id_conv = short_channel_id;
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 26, (int64_t)chain_hash_arr, short_channel_id_conv);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 25, (int64_t)chain_hash_arr, short_channel_id_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKUtxoResult ret_conv = *(LDKUtxoResult*)(ret_ptr);
@@ -4824,7 +4901,7 @@ uint32_t CS_LDK_LDKMessageSendEvent_ty_from_ptr(int64_t ptr) {
                case LDKMessageSendEvent_SendFundingCreated: return 4;
                case LDKMessageSendEvent_SendFundingSigned: return 5;
                case LDKMessageSendEvent_SendStfu: return 6;
-               case LDKMessageSendEvent_SendSplice: return 7;
+               case LDKMessageSendEvent_SendSpliceInit: return 7;
                case LDKMessageSendEvent_SendSpliceAck: return 8;
                case LDKMessageSendEvent_SendSpliceLocked: return 9;
                case LDKMessageSendEvent_SendTxAddInput: return 10;
@@ -4968,17 +5045,17 @@ int64_t CS_LDK_LDKMessageSendEvent_SendStfu_get_msg(int64_t ptr) {
                        msg_ref = tag_ptr(msg_var.inner, false);
        return msg_ref;
 }
-int8_tArray CS_LDK_LDKMessageSendEvent_SendSplice_get_node_id(int64_t ptr) {
+int8_tArray CS_LDK_LDKMessageSendEvent_SendSpliceInit_get_node_id(int64_t ptr) {
        LDKMessageSendEvent *obj = (LDKMessageSendEvent*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKMessageSendEvent_SendSplice);
+       CHECK(obj->tag == LDKMessageSendEvent_SendSpliceInit);
        int8_tArray node_id_arr = init_int8_tArray(33, __LINE__);
-       memcpy(node_id_arr->elems, obj->send_splice.node_id.compressed_form, 33);
+       memcpy(node_id_arr->elems, obj->send_splice_init.node_id.compressed_form, 33);
        return node_id_arr;
 }
-int64_t CS_LDK_LDKMessageSendEvent_SendSplice_get_msg(int64_t ptr) {
+int64_t CS_LDK_LDKMessageSendEvent_SendSpliceInit_get_msg(int64_t ptr) {
        LDKMessageSendEvent *obj = (LDKMessageSendEvent*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKMessageSendEvent_SendSplice);
-       LDKSplice msg_var = obj->send_splice.msg;
+       CHECK(obj->tag == LDKMessageSendEvent_SendSpliceInit);
+       LDKSpliceInit msg_var = obj->send_splice_init.msg;
                        int64_t msg_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = tag_ptr(msg_var.inner, false);
@@ -5602,17 +5679,41 @@ static inline LDKCVec_SocketAddressZ CVec_SocketAddressZ_clone(const LDKCVec_Soc
        }
        return ret;
 }
+uint32_t CS_LDK_LDKNodeAnnouncementInfo_ty_from_ptr(int64_t ptr) {
+       LDKNodeAnnouncementInfo *obj = (LDKNodeAnnouncementInfo*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKNodeAnnouncementInfo_Relayed: return 0;
+               case LDKNodeAnnouncementInfo_Local: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKNodeAnnouncementInfo_Relayed_get_relayed(int64_t ptr) {
+       LDKNodeAnnouncementInfo *obj = (LDKNodeAnnouncementInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKNodeAnnouncementInfo_Relayed);
+       LDKNodeAnnouncement relayed_var = obj->relayed;
+                       int64_t relayed_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(relayed_var);
+                       relayed_ref = tag_ptr(relayed_var.inner, false);
+       return relayed_ref;
+}
+int64_t CS_LDK_LDKNodeAnnouncementInfo_Local_get_local(int64_t ptr) {
+       LDKNodeAnnouncementInfo *obj = (LDKNodeAnnouncementInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKNodeAnnouncementInfo_Local);
+       LDKNodeAnnouncementDetails local_var = obj->local;
+                       int64_t local_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(local_var);
+                       local_ref = tag_ptr(local_var.inner, false);
+       return local_ref;
+}
 static inline struct LDKNodeAnnouncementInfo CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR owner){
-       LDKNodeAnnouncementInfo ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
+CHECK(owner->result_ok);
+       return NodeAnnouncementInfo_clone(&*owner->contents.result);
 }
 int64_t  CS_LDK_CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(int64_t owner) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* owner_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)untag_ptr(owner);
-       LDKNodeAnnouncementInfo ret_var = CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
@@ -5654,6 +5755,20 @@ int64_t  CS_LDK_CResult_NodeAliasDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+uint32_t CS_LDK_LDKCOption_NodeAnnouncementInfoZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_NodeAnnouncementInfoZ *obj = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_NodeAnnouncementInfoZ_Some: return 0;
+               case LDKCOption_NodeAnnouncementInfoZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_NodeAnnouncementInfoZ_Some_get_some(int64_t ptr) {
+       LDKCOption_NodeAnnouncementInfoZ *obj = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_NodeAnnouncementInfoZ_Some);
+       int64_t some_ref = tag_ptr(&obj->some, false);
+       return some_ref;
+}
 static inline struct LDKNodeInfo CResult_NodeInfoDecodeErrorZ_get_ok(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR owner){
        LDKNodeInfo ret = *owner->contents.result;
        ret.is_owned = false;
@@ -6432,6 +6547,68 @@ int64_t  CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+uint32_t CS_LDK_LDKOffersContext_ty_from_ptr(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKOffersContext_InvoiceRequest: return 0;
+               case LDKOffersContext_OutboundPayment: return 1;
+               case LDKOffersContext_InboundPayment: return 2;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKOffersContext_InvoiceRequest_get_nonce(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_InvoiceRequest);
+       LDKNonce nonce_var = obj->invoice_request.nonce;
+                       int64_t nonce_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_var);
+                       nonce_ref = tag_ptr(nonce_var.inner, false);
+       return nonce_ref;
+}
+int8_tArray CS_LDK_LDKOffersContext_OutboundPayment_get_payment_id(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_OutboundPayment);
+       int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
+       memcpy(payment_id_arr->elems, obj->outbound_payment.payment_id.data, 32);
+       return payment_id_arr;
+}
+int64_t CS_LDK_LDKOffersContext_OutboundPayment_get_nonce(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_OutboundPayment);
+       LDKNonce nonce_var = obj->outbound_payment.nonce;
+                       int64_t nonce_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_var);
+                       nonce_ref = tag_ptr(nonce_var.inner, false);
+       return nonce_ref;
+}
+int8_tArray CS_LDK_LDKOffersContext_OutboundPayment_get_hmac(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_OutboundPayment);
+       int8_tArray hmac_arr = init_int8_tArray(32, __LINE__);
+       memcpy(hmac_arr->elems, obj->outbound_payment.hmac.data, 32);
+       return hmac_arr;
+}
+int8_tArray CS_LDK_LDKOffersContext_InboundPayment_get_payment_hash(int64_t ptr) {
+       LDKOffersContext *obj = (LDKOffersContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKOffersContext_InboundPayment);
+       int8_tArray payment_hash_arr = init_int8_tArray(32, __LINE__);
+       memcpy(payment_hash_arr->elems, obj->inbound_payment.payment_hash.data, 32);
+       return payment_hash_arr;
+}
+uint32_t CS_LDK_LDKCOption_OffersContextZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_OffersContextZ *obj = (LDKCOption_OffersContextZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_OffersContextZ_Some: return 0;
+               case LDKCOption_OffersContextZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_OffersContextZ_Some_get_some(int64_t ptr) {
+       LDKCOption_OffersContextZ *obj = (LDKCOption_OffersContextZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_OffersContextZ_Some);
+       int64_t some_ref = tag_ptr(&obj->some, false);
+       return some_ref;
+}
 uint32_t CS_LDK_LDKOffersMessage_ty_from_ptr(int64_t ptr) {
        LDKOffersMessage *obj = (LDKOffersMessage*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -6468,19 +6645,46 @@ int64_t CS_LDK_LDKOffersMessage_InvoiceError_get_invoice_error(int64_t ptr) {
                        invoice_error_ref = tag_ptr(invoice_error_var.inner, false);
        return invoice_error_ref;
 }
-uint32_t CS_LDK_LDKCOption_OffersMessageZ_ty_from_ptr(int64_t ptr) {
-       LDKCOption_OffersMessageZ *obj = (LDKCOption_OffersMessageZ*)untag_ptr(ptr);
+static inline struct LDKOffersMessage C2Tuple_OffersMessageResponseInstructionZ_get_a(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR owner){
+       return OffersMessage_clone(&owner->a);
+}
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_get_a(int64_t owner) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* owner_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(owner);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = C2Tuple_OffersMessageResponseInstructionZ_get_a(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKResponseInstruction C2Tuple_OffersMessageResponseInstructionZ_get_b(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR owner){
+       LDKResponseInstruction ret = owner->b;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_get_b(int64_t owner) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* owner_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(owner);
+       LDKResponseInstruction ret_var = C2Tuple_OffersMessageResponseInstructionZ_get_b(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+uint32_t CS_LDK_LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_OffersMessageZ_Some: return 0;
-               case LDKCOption_OffersMessageZ_None: return 1;
+               case LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some: return 0;
+               case LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_None: return 1;
                default: abort();
        }
 }
-int64_t CS_LDK_LDKCOption_OffersMessageZ_Some_get_some(int64_t ptr) {
-       LDKCOption_OffersMessageZ *obj = (LDKCOption_OffersMessageZ*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKCOption_OffersMessageZ_Some);
-       int64_t some_ref = tag_ptr(&obj->some, false);
-       return some_ref;
+int64_t CS_LDK_LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some_get_some(int64_t ptr) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some);
+       LDKC2Tuple_OffersMessageResponseInstructionZ* some_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *some_conv = obj->some;
+                       *some_conv = C2Tuple_OffersMessageResponseInstructionZ_clone(some_conv);
+       return tag_ptr(some_conv, true);
 }
 uint32_t CS_LDK_LDKDestination_ty_from_ptr(int64_t ptr) {
        LDKDestination *obj = (LDKDestination*)untag_ptr(ptr);
@@ -6500,52 +6704,211 @@ int8_tArray CS_LDK_LDKDestination_Node_get_node(int64_t ptr) {
 int64_t CS_LDK_LDKDestination_BlindedPath_get_blinded_path(int64_t ptr) {
        LDKDestination *obj = (LDKDestination*)untag_ptr(ptr);
        CHECK(obj->tag == LDKDestination_BlindedPath);
-       LDKBlindedPath blinded_path_var = obj->blinded_path;
+       LDKBlindedMessagePath blinded_path_var = obj->blinded_path;
                        int64_t blinded_path_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_path_var);
                        blinded_path_ref = tag_ptr(blinded_path_var.inner, false);
        return blinded_path_ref;
 }
-static inline struct LDKOffersMessage C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner){
+uint32_t CS_LDK_LDKMessageContext_ty_from_ptr(int64_t ptr) {
+       LDKMessageContext *obj = (LDKMessageContext*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKMessageContext_Offers: return 0;
+               case LDKMessageContext_Custom: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKMessageContext_Offers_get_offers(int64_t ptr) {
+       LDKMessageContext *obj = (LDKMessageContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageContext_Offers);
+       int64_t offers_ref = tag_ptr(&obj->offers, false);
+       return offers_ref;
+}
+int8_tArray CS_LDK_LDKMessageContext_Custom_get_custom(int64_t ptr) {
+       LDKMessageContext *obj = (LDKMessageContext*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageContext_Custom);
+       LDKCVec_u8Z custom_var = obj->custom;
+                       int8_tArray custom_arr = init_int8_tArray(custom_var.datalen, __LINE__);
+                       memcpy(custom_arr->elems, custom_var.data, custom_var.datalen);
+       return custom_arr;
+}
+uint32_t CS_LDK_LDKMessageSendInstructions_ty_from_ptr(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKMessageSendInstructions_WithSpecifiedReplyPath: return 0;
+               case LDKMessageSendInstructions_WithReplyPath: return 1;
+               case LDKMessageSendInstructions_WithoutReplyPath: return 2;
+               case LDKMessageSendInstructions_ForReply: return 3;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithSpecifiedReplyPath_get_destination(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithSpecifiedReplyPath);
+       int64_t destination_ref = tag_ptr(&obj->with_specified_reply_path.destination, false);
+       return destination_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithSpecifiedReplyPath_get_reply_path(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithSpecifiedReplyPath);
+       LDKBlindedMessagePath reply_path_var = obj->with_specified_reply_path.reply_path;
+                       int64_t reply_path_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_var);
+                       reply_path_ref = tag_ptr(reply_path_var.inner, false);
+       return reply_path_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithReplyPath_get_destination(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithReplyPath);
+       int64_t destination_ref = tag_ptr(&obj->with_reply_path.destination, false);
+       return destination_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithReplyPath_get_context(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithReplyPath);
+       int64_t context_ref = tag_ptr(&obj->with_reply_path.context, false);
+       return context_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_WithoutReplyPath_get_destination(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_WithoutReplyPath);
+       int64_t destination_ref = tag_ptr(&obj->without_reply_path.destination, false);
+       return destination_ref;
+}
+int64_t CS_LDK_LDKMessageSendInstructions_ForReply_get_instructions(int64_t ptr) {
+       LDKMessageSendInstructions *obj = (LDKMessageSendInstructions*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKMessageSendInstructions_ForReply);
+       LDKResponseInstruction instructions_var = obj->for_reply.instructions;
+                       int64_t instructions_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(instructions_var);
+                       instructions_ref = tag_ptr(instructions_var.inner, false);
+       return instructions_ref;
+}
+static inline struct LDKOffersMessage C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR owner){
        return OffersMessage_clone(&owner->a);
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(int64_t owner) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(owner);
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(int64_t owner) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(owner);
        LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(owner_conv);
+       *ret_copy = C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKDestination C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner){
-       return Destination_clone(&owner->b);
+static inline struct LDKMessageSendInstructions C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR owner){
+       return MessageSendInstructions_clone(&owner->b);
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(int64_t owner) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(owner_conv);
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(int64_t owner) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = owner->c;
+static inline LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_clone(const LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ *orig) {
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ) * orig->datalen, "LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_OffersMessageMessageSendInstructionsZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKReleaseHeldHtlc C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR owner){
+       LDKReleaseHeldHtlc ret = owner->a;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(int64_t owner) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* owner_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(owner);
+       LDKReleaseHeldHtlc ret_var = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKResponseInstruction C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR owner){
+       LDKResponseInstruction ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(int64_t owner) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(owner_conv);
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(int64_t owner) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* owner_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(owner);
+       LDKResponseInstruction ret_var = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_clone(const LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ *orig) {
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ) * orig->datalen, "LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ clone bytes"), .datalen = orig->datalen };
+uint32_t CS_LDK_LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *obj = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some: return 0;
+               case LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some_get_some(int64_t ptr) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *obj = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* some_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *some_conv = obj->some;
+                       *some_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(some_conv);
+       return tag_ptr(some_conv, true);
+}
+uint32_t CS_LDK_LDKAsyncPaymentsMessage_ty_from_ptr(int64_t ptr) {
+       LDKAsyncPaymentsMessage *obj = (LDKAsyncPaymentsMessage*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKAsyncPaymentsMessage_HeldHtlcAvailable: return 0;
+               case LDKAsyncPaymentsMessage_ReleaseHeldHtlc: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKAsyncPaymentsMessage_HeldHtlcAvailable_get_held_htlc_available(int64_t ptr) {
+       LDKAsyncPaymentsMessage *obj = (LDKAsyncPaymentsMessage*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKAsyncPaymentsMessage_HeldHtlcAvailable);
+       LDKHeldHtlcAvailable held_htlc_available_var = obj->held_htlc_available;
+                       int64_t held_htlc_available_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(held_htlc_available_var);
+                       held_htlc_available_ref = tag_ptr(held_htlc_available_var.inner, false);
+       return held_htlc_available_ref;
+}
+int64_t CS_LDK_LDKAsyncPaymentsMessage_ReleaseHeldHtlc_get_release_held_htlc(int64_t ptr) {
+       LDKAsyncPaymentsMessage *obj = (LDKAsyncPaymentsMessage*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKAsyncPaymentsMessage_ReleaseHeldHtlc);
+       LDKReleaseHeldHtlc release_held_htlc_var = obj->release_held_htlc;
+                       int64_t release_held_htlc_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(release_held_htlc_var);
+                       release_held_htlc_ref = tag_ptr(release_held_htlc_var.inner, false);
+       return release_held_htlc_ref;
+}
+static inline struct LDKAsyncPaymentsMessage C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR owner){
+       return AsyncPaymentsMessage_clone(&owner->a);
+}
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(int64_t owner) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKMessageSendInstructions C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR owner){
+       return MessageSendInstructions_clone(&owner->b);
+}
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(int64_t owner) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_clone(const LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ *orig) {
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ) * orig->datalen, "LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C3Tuple_OffersMessageDestinationBlindedPathZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -6839,7 +7202,7 @@ LDKCResult_ChannelMonitorUpdateStatusNoneZ watch_channel_LDKWatch_jcall(const vo
        int64_t monitor_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
        monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 27, funding_txo_ref, monitor_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 26, funding_txo_ref, monitor_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ChannelMonitorUpdateStatusNoneZ ret_conv = *(LDKCResult_ChannelMonitorUpdateStatusNoneZ*)(ret_ptr);
@@ -6857,13 +7220,13 @@ LDKChannelMonitorUpdateStatus update_channel_LDKWatch_jcall(const void* this_arg
        update_var = ChannelMonitorUpdate_clone(&update_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
        update_ref = tag_ptr(update_var.inner, update_var.is_owned);
-       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_ll(j_calls->instance_ptr, 28, funding_txo_ref, update_ref);
+       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_ll(j_calls->instance_ptr, 27, funding_txo_ref, update_ref);
        LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_cs(ret);
        return ret_conv;
 }
 LDKCVec_C4Tuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZZ release_pending_monitor_events_LDKWatch_jcall(const void* this_arg) {
        LDKWatch_JCalls *j_calls = (LDKWatch_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 29);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 28);
        LDKCVec_C4Tuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -6985,7 +7348,7 @@ void broadcast_transactions_LDKBroadcasterInterface_jcall(const void* this_arg,
        }
        
        FREE(txs_var.data);
-       js_invoke_function_void_l(j_calls->instance_ptr, 30, (int64_t)txs_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 29, (int64_t)txs_arr);
 }
 static void LDKBroadcasterInterface_JCalls_cloned(LDKBroadcasterInterface* new_obj) {
        LDKBroadcasterInterface_JCalls *j_calls = (LDKBroadcasterInterface_JCalls*) new_obj->this_arg;
@@ -7044,7 +7407,7 @@ static void LDKEntropySource_JCalls_free(void* this_arg) {
 }
 LDKThirtyTwoBytes get_secure_random_bytes_LDKEntropySource_jcall(const void* this_arg) {
        LDKEntropySource_JCalls *j_calls = (LDKEntropySource_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 31);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 30);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -7128,7 +7491,7 @@ static void LDKNodeSigner_JCalls_free(void* this_arg) {
 }
 LDKThirtyTwoBytes get_inbound_payment_key_material_LDKNodeSigner_jcall(const void* this_arg) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 32);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 31);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
@@ -7137,7 +7500,7 @@ LDKThirtyTwoBytes get_inbound_payment_key_material_LDKNodeSigner_jcall(const voi
 LDKCResult_PublicKeyNoneZ get_node_id_LDKNodeSigner_jcall(const void* this_arg, LDKRecipient recipient) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
        int32_t recipient_conv = LDKRecipient_to_cs(recipient);
-       uint64_t ret = js_invoke_function_l_Recipient(j_calls->instance_ptr, 33, recipient_conv);
+       uint64_t ret = js_invoke_function_l_Recipient(j_calls->instance_ptr, 32, recipient_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PublicKeyNoneZ ret_conv = *(LDKCResult_PublicKeyNoneZ*)(ret_ptr);
@@ -7152,30 +7515,22 @@ LDKCResult_ThirtyTwoBytesNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LD
        LDKCOption_BigEndianScalarZ *tweak_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
        *tweak_copy = tweak;
        int64_t tweak_ref = tag_ptr(tweak_copy, true);
-       uint64_t ret = js_invoke_function_l_Recipientll(j_calls->instance_ptr, 34, recipient_conv, (int64_t)other_key_arr, tweak_ref);
+       uint64_t ret = js_invoke_function_l_Recipientll(j_calls->instance_ptr, 33, recipient_conv, (int64_t)other_key_arr, tweak_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ThirtyTwoBytesNoneZ ret_conv = *(LDKCResult_ThirtyTwoBytesNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKNodeSigner_jcall(const void* this_arg, LDKu8slice hrp_bytes, LDKCVec_U5Z invoice_data, LDKRecipient recipient) {
+LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKNodeSigner_jcall(const void* this_arg, const LDKRawBolt11Invoice * invoice, LDKRecipient recipient) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
-       LDKu8slice hrp_bytes_var = hrp_bytes;
-       int8_tArray hrp_bytes_arr = init_int8_tArray(hrp_bytes_var.datalen, __LINE__);
-       memcpy(hrp_bytes_arr->elems, hrp_bytes_var.data, hrp_bytes_var.datalen);
-       LDKCVec_U5Z invoice_data_var = invoice_data;
-       ptrArray invoice_data_arr = NULL;
-       invoice_data_arr = init_ptrArray(invoice_data_var.datalen, __LINE__);
-       int8_t *invoice_data_arr_ptr = (int8_t*)(((uint8_t*)invoice_data_arr) + 8);
-       for (size_t h = 0; h < invoice_data_var.datalen; h++) {
-               uint8_t invoice_data_conv_7_val = invoice_data_var.data[h]._0;
-               invoice_data_arr_ptr[h] = invoice_data_conv_7_val;
-       }
-       
-       FREE(invoice_data_var.data);
+       LDKRawBolt11Invoice invoice_var = *invoice;
+       int64_t invoice_ref = 0;
+       invoice_var = RawBolt11Invoice_clone(&invoice_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
+       invoice_ref = tag_ptr(invoice_var.inner, invoice_var.is_owned);
        int32_t recipient_conv = LDKRecipient_to_cs(recipient);
-       uint64_t ret = js_invoke_function_l_llRecipient(j_calls->instance_ptr, 35, (int64_t)hrp_bytes_arr, (int64_t)invoice_data_arr, recipient_conv);
+       uint64_t ret = js_invoke_function_l_lRecipient(j_calls->instance_ptr, 34, invoice_ref, recipient_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
@@ -7189,7 +7544,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_request_LDKNodeSigner_jcall
        invoice_request_var = UnsignedInvoiceRequest_clone(&invoice_request_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_var);
        invoice_request_ref = tag_ptr(invoice_request_var.inner, invoice_request_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 36, invoice_request_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 35, invoice_request_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -7203,7 +7558,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_LDKNodeSigner_jcall(const v
        invoice_var = UnsignedBolt12Invoice_clone(&invoice_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
        invoice_ref = tag_ptr(invoice_var.inner, invoice_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 37, invoice_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 36, invoice_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -7215,7 +7570,7 @@ LDKCResult_ECDSASignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const voi
        LDKUnsignedGossipMessage *msg_copy = MALLOC(sizeof(LDKUnsignedGossipMessage), "LDKUnsignedGossipMessage");
        *msg_copy = msg;
        int64_t msg_ref = tag_ptr(msg_copy, true);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 38, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 37, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
@@ -7285,30 +7640,18 @@ int64_t  CS_LDK_NodeSigner_ecdh(int64_t this_arg, int32_t recipient, int8_tArray
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_NodeSigner_sign_invoice(int64_t this_arg, int8_tArray hrp_bytes, ptrArray invoice_data, int32_t recipient) {
+int64_t  CS_LDK_NodeSigner_sign_invoice(int64_t this_arg, int64_t invoice, int32_t recipient) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKNodeSigner* this_arg_conv = (LDKNodeSigner*)this_arg_ptr;
-       LDKu8slice hrp_bytes_ref;
-       hrp_bytes_ref.datalen = hrp_bytes->arr_len;
-       hrp_bytes_ref.data = hrp_bytes->elems;
-       LDKCVec_U5Z invoice_data_constr;
-       invoice_data_constr.datalen = invoice_data->arr_len;
-       if (invoice_data_constr.datalen > 0)
-               invoice_data_constr.data = MALLOC(invoice_data_constr.datalen * sizeof(LDKU5), "LDKCVec_U5Z Elements");
-       else
-               invoice_data_constr.data = NULL;
-       int8_t* invoice_data_vals = (void*) invoice_data->elems;
-       for (size_t h = 0; h < invoice_data_constr.datalen; h++) {
-               int8_t invoice_data_conv_7 = invoice_data_vals[h];
-               
-               invoice_data_constr.data[h] = (LDKU5){ ._0 = invoice_data_conv_7 };
-       }
-       FREE(invoice_data);
+       LDKRawBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
        LDKRecipient recipient_conv = LDKRecipient_from_cs(recipient);
        LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
-       *ret_conv = (this_arg_conv->sign_invoice)(this_arg_conv->this_arg, hrp_bytes_ref, invoice_data_constr, recipient_conv);
-       FREE(hrp_bytes);
+       *ret_conv = (this_arg_conv->sign_invoice)(this_arg_conv->this_arg, &invoice_conv, recipient_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -7369,33 +7712,33 @@ LDKThirtyTwoBytes generate_channel_keys_id_LDKSignerProvider_jcall(const void* t
        int64_t channel_value_satoshis_conv = channel_value_satoshis;
        int8_tArray user_channel_id_arr = init_int8_tArray(16, __LINE__);
        memcpy(user_channel_id_arr->elems, user_channel_id.le_bytes, 16);
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_bll(j_calls->instance_ptr, 39, inbound_conv, channel_value_satoshis_conv, (int64_t)user_channel_id_arr);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_bll(j_calls->instance_ptr, 38, inbound_conv, channel_value_satoshis_conv, (int64_t)user_channel_id_arr);
        LDKThirtyTwoBytes ret_ref;
        CHECK(ret->arr_len == 32);
        memcpy(ret_ref.data, ret->elems, 32); FREE(ret);
        return ret_ref;
 }
-LDKWriteableEcdsaChannelSigner derive_channel_signer_LDKSignerProvider_jcall(const void* this_arg, uint64_t channel_value_satoshis, LDKThirtyTwoBytes channel_keys_id) {
+LDKEcdsaChannelSigner derive_channel_signer_LDKSignerProvider_jcall(const void* this_arg, uint64_t channel_value_satoshis, LDKThirtyTwoBytes channel_keys_id) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        int64_t channel_value_satoshis_conv = channel_value_satoshis;
        int8_tArray channel_keys_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(channel_keys_id_arr->elems, channel_keys_id.data, 32);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 40, channel_value_satoshis_conv, (int64_t)channel_keys_id_arr);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 39, channel_value_satoshis_conv, (int64_t)channel_keys_id_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKWriteableEcdsaChannelSigner ret_conv = *(LDKWriteableEcdsaChannelSigner*)(ret_ptr);
+       LDKEcdsaChannelSigner ret_conv = *(LDKEcdsaChannelSigner*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ read_chan_signer_LDKSignerProvider_jcall(const void* this_arg, LDKu8slice reader) {
+LDKCResult_EcdsaChannelSignerDecodeErrorZ read_chan_signer_LDKSignerProvider_jcall(const void* this_arg, LDKu8slice reader) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        LDKu8slice reader_var = reader;
        int8_tArray reader_arr = init_int8_tArray(reader_var.datalen, __LINE__);
        memcpy(reader_arr->elems, reader_var.data, reader_var.datalen);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 41, (int64_t)reader_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 40, (int64_t)reader_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ ret_conv = *(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)(ret_ptr);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ ret_conv = *(LDKCResult_EcdsaChannelSignerDecodeErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -7403,7 +7746,7 @@ LDKCResult_CVec_u8ZNoneZ get_destination_script_LDKSignerProvider_jcall(const vo
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        int8_tArray channel_keys_id_arr = init_int8_tArray(32, __LINE__);
        memcpy(channel_keys_id_arr->elems, channel_keys_id.data, 32);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 42, (int64_t)channel_keys_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 41, (int64_t)channel_keys_id_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
@@ -7412,7 +7755,7 @@ LDKCResult_CVec_u8ZNoneZ get_destination_script_LDKSignerProvider_jcall(const vo
 }
 LDKCResult_ShutdownScriptNoneZ get_shutdown_scriptpubkey_LDKSignerProvider_jcall(const void* this_arg) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 43);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 42);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_ShutdownScriptNoneZ ret_conv = *(LDKCResult_ShutdownScriptNoneZ*)(ret_ptr);
@@ -7463,7 +7806,7 @@ int64_t  CS_LDK_SignerProvider_derive_channel_signer(int64_t this_arg, int64_t c
        LDKThirtyTwoBytes channel_keys_id_ref;
        CHECK(channel_keys_id->arr_len == 32);
        memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
        *ret_ret = (this_arg_conv->derive_channel_signer)(this_arg_conv->this_arg, channel_value_satoshis, channel_keys_id_ref);
        return tag_ptr(ret_ret, true);
 }
@@ -7475,7 +7818,7 @@ int64_t  CS_LDK_SignerProvider_read_chan_signer(int64_t this_arg, int8_tArray re
        LDKu8slice reader_ref;
        reader_ref.datalen = reader->arr_len;
        reader_ref.data = reader->elems;
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
        *ret_conv = (this_arg_conv->read_chan_signer)(this_arg_conv->this_arg, reader_ref);
        FREE(reader);
        return tag_ptr(ret_conv, true);
@@ -7515,7 +7858,7 @@ static void LDKFeeEstimator_JCalls_free(void* this_arg) {
 uint32_t get_est_sat_per_1000_weight_LDKFeeEstimator_jcall(const void* this_arg, LDKConfirmationTarget confirmation_target) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) this_arg;
        int32_t confirmation_target_conv = LDKConfirmationTarget_to_cs(confirmation_target);
-       return js_invoke_function_i_ConfirmationTarget(j_calls->instance_ptr, 44, confirmation_target_conv);
+       return js_invoke_function_i_ConfirmationTarget(j_calls->instance_ptr, 43, confirmation_target_conv);
 }
 static void LDKFeeEstimator_JCalls_cloned(LDKFeeEstimator* new_obj) {
        LDKFeeEstimator_JCalls *j_calls = (LDKFeeEstimator_JCalls*) new_obj->this_arg;
@@ -7575,17 +7918,20 @@ LDKCResult_OnionMessagePathNoneZ find_path_LDKMessageRouter_jcall(const void* th
        LDKDestination *destination_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
        *destination_copy = destination;
        int64_t destination_ref = tag_ptr(destination_copy, true);
-       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 45, (int64_t)sender_arr, (int64_t)peers_arr, destination_ref);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 44, (int64_t)sender_arr, (int64_t)peers_arr, destination_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_OnionMessagePathNoneZ ret_conv = *(LDKCResult_OnionMessagePathNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_CVec_BlindedPathZNoneZ create_blinded_paths_LDKMessageRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKCVec_PublicKeyZ peers) {
+LDKCResult_CVec_BlindedMessagePathZNoneZ create_blinded_paths_LDKMessageRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKMessageContext context, LDKCVec_PublicKeyZ peers) {
        LDKMessageRouter_JCalls *j_calls = (LDKMessageRouter_JCalls*) this_arg;
        int8_tArray recipient_arr = init_int8_tArray(33, __LINE__);
        memcpy(recipient_arr->elems, recipient.compressed_form, 33);
+       LDKMessageContext *context_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
        LDKCVec_PublicKeyZ peers_var = peers;
        ptrArray peers_arr = NULL;
        peers_arr = init_ptrArray(peers_var.datalen, __LINE__);
@@ -7597,10 +7943,37 @@ LDKCResult_CVec_BlindedPathZNoneZ create_blinded_paths_LDKMessageRouter_jcall(co
        }
        
        FREE(peers_var.data);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 46, (int64_t)recipient_arr, (int64_t)peers_arr);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 45, (int64_t)recipient_arr, context_ref, (int64_t)peers_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_CVec_BlindedPathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedPathZNoneZ*)(ret_ptr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedMessagePathZNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
+}
+LDKCResult_CVec_BlindedMessagePathZNoneZ create_compact_blinded_paths_LDKMessageRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKMessageContext context, LDKCVec_MessageForwardNodeZ peers) {
+       LDKMessageRouter_JCalls *j_calls = (LDKMessageRouter_JCalls*) this_arg;
+       int8_tArray recipient_arr = init_int8_tArray(33, __LINE__);
+       memcpy(recipient_arr->elems, recipient.compressed_form, 33);
+       LDKMessageContext *context_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
+       LDKCVec_MessageForwardNodeZ peers_var = peers;
+       int64_tArray peers_arr = NULL;
+       peers_arr = init_int64_tArray(peers_var.datalen, __LINE__);
+       int64_t *peers_arr_ptr = (int64_t*)(((uint8_t*)peers_arr) + 8);
+       for (size_t u = 0; u < peers_var.datalen; u++) {
+               LDKMessageForwardNode peers_conv_20_var = peers_var.data[u];
+               int64_t peers_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(peers_conv_20_var);
+               peers_conv_20_ref = tag_ptr(peers_conv_20_var.inner, peers_conv_20_var.is_owned);
+               peers_arr_ptr[u] = peers_conv_20_ref;
+       }
+       
+       FREE(peers_var.data);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 46, (int64_t)recipient_arr, context_ref, (int64_t)peers_arr);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedMessagePathZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -7617,6 +7990,7 @@ static inline LDKMessageRouter LDKMessageRouter_init (int64_t o) {
                .this_arg = (void*) calls,
                .find_path = find_path_LDKMessageRouter_jcall,
                .create_blinded_paths = create_blinded_paths_LDKMessageRouter_jcall,
+               .create_compact_blinded_paths = create_compact_blinded_paths_LDKMessageRouter_jcall,
                .free = LDKMessageRouter_JCalls_free,
        };
        return ret;
@@ -7657,13 +8031,17 @@ int64_t  CS_LDK_MessageRouter_find_path(int64_t this_arg, int8_tArray sender, pt
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_MessageRouter_create_blinded_paths(int64_t this_arg, int8_tArray recipient, ptrArray peers) {
+int64_t  CS_LDK_MessageRouter_create_blinded_paths(int64_t this_arg, int8_tArray recipient, int64_t context, ptrArray peers) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKMessageRouter* this_arg_conv = (LDKMessageRouter*)this_arg_ptr;
        LDKPublicKey recipient_ref;
        CHECK(recipient->arr_len == 33);
        memcpy(recipient_ref.compressed_form, recipient->elems, 33); FREE(recipient);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
        LDKCVec_PublicKeyZ peers_constr;
        peers_constr.datalen = peers->arr_len;
        if (peers_constr.datalen > 0)
@@ -7679,8 +8057,41 @@ int64_t  CS_LDK_MessageRouter_create_blinded_paths(int64_t this_arg, int8_tArray
                peers_constr.data[i] = peers_conv_8_ref;
        }
        FREE(peers);
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = (this_arg_conv->create_blinded_paths)(this_arg_conv->this_arg, recipient_ref, peers_constr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = (this_arg_conv->create_blinded_paths)(this_arg_conv->this_arg, recipient_ref, context_conv, peers_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_MessageRouter_create_compact_blinded_paths(int64_t this_arg, int8_tArray recipient, int64_t context, int64_tArray peers) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKMessageRouter* this_arg_conv = (LDKMessageRouter*)this_arg_ptr;
+       LDKPublicKey recipient_ref;
+       CHECK(recipient->arr_len == 33);
+       memcpy(recipient_ref.compressed_form, recipient->elems, 33); FREE(recipient);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       LDKCVec_MessageForwardNodeZ peers_constr;
+       peers_constr.datalen = peers->arr_len;
+       if (peers_constr.datalen > 0)
+               peers_constr.data = MALLOC(peers_constr.datalen * sizeof(LDKMessageForwardNode), "LDKCVec_MessageForwardNodeZ Elements");
+       else
+               peers_constr.data = NULL;
+       int64_t* peers_vals = peers->elems;
+       for (size_t u = 0; u < peers_constr.datalen; u++) {
+               int64_t peers_conv_20 = peers_vals[u];
+               LDKMessageForwardNode peers_conv_20_conv;
+               peers_conv_20_conv.inner = untag_ptr(peers_conv_20);
+               peers_conv_20_conv.is_owned = ptr_is_owned(peers_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(peers_conv_20_conv);
+               peers_conv_20_conv = MessageForwardNode_clone(&peers_conv_20_conv);
+               peers_constr.data[u] = peers_conv_20_conv;
+       }
+       FREE(peers);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = (this_arg_conv->create_compact_blinded_paths)(this_arg_conv->this_arg, recipient_ref, context_conv, peers_constr);
        return tag_ptr(ret_conv, true);
 }
 
@@ -7769,7 +8180,7 @@ LDKCResult_RouteLightningErrorZ find_route_with_id_LDKRouter_jcall(const void* t
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ create_blinded_payment_paths_LDKRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKCVec_ChannelDetailsZ first_hops, LDKReceiveTlvs tlvs, uint64_t amount_msats) {
+LDKCResult_CVec_BlindedPaymentPathZNoneZ create_blinded_payment_paths_LDKRouter_jcall(const void* this_arg, LDKPublicKey recipient, LDKCVec_ChannelDetailsZ first_hops, LDKReceiveTlvs tlvs, uint64_t amount_msats) {
        LDKRouter_JCalls *j_calls = (LDKRouter_JCalls*) this_arg;
        int8_tArray recipient_arr = init_int8_tArray(33, __LINE__);
        memcpy(recipient_arr->elems, recipient.compressed_form, 33);
@@ -7794,7 +8205,7 @@ LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ create_blinded_payment_
        uint64_t ret = js_invoke_function_l_llll(j_calls->instance_ptr, 49, (int64_t)recipient_arr, (int64_t)first_hops_arr, tlvs_ref, amount_msats_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret_conv = *(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)(ret_ptr);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ ret_conv = *(LDKCResult_CVec_BlindedPaymentPathZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -7947,7 +8358,7 @@ int64_t  CS_LDK_Router_create_blinded_payment_paths(int64_t this_arg, int8_tArra
        tlvs_conv.is_owned = ptr_is_owned(tlvs);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_conv);
        tlvs_conv = ReceiveTlvs_clone(&tlvs_conv);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
        *ret_conv = (this_arg_conv->create_blinded_payment_paths)(this_arg_conv->this_arg, recipient_ref, first_hops_constr, tlvs_conv, amount_msats);
        return tag_ptr(ret_conv, true);
 }
@@ -8300,6 +8711,29 @@ static inline LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ CVec_C2
        }
        return ret;
 }
+static inline void CResult_NoneReplayEventZ_get_ok(LDKCResult_NoneReplayEventZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return *owner->contents.result;
+}
+void  CS_LDK_CResult_NoneReplayEventZ_get_ok(int64_t owner) {
+       LDKCResult_NoneReplayEventZ* owner_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(owner);
+       CResult_NoneReplayEventZ_get_ok(owner_conv);
+}
+
+static inline struct LDKReplayEvent CResult_NoneReplayEventZ_get_err(LDKCResult_NoneReplayEventZ *NONNULL_PTR owner){
+       LDKReplayEvent ret = *owner->contents.err;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_NoneReplayEventZ_get_err(int64_t owner) {
+       LDKCResult_NoneReplayEventZ* owner_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(owner);
+       LDKReplayEvent ret_var = CResult_NoneReplayEventZ_get_err(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline LDKCVec_CommitmentTransactionZ CVec_CommitmentTransactionZ_clone(const LDKCVec_CommitmentTransactionZ *orig) {
        LDKCVec_CommitmentTransactionZ ret = { .data = MALLOC(sizeof(LDKCommitmentTransaction) * orig->datalen, "LDKCVec_CommitmentTransactionZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -8387,6 +8821,36 @@ int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_amount_satoshis(int64_t pt
        int64_t amount_satoshis_conv = obj->claimable_on_channel_close.amount_satoshis;
        return amount_satoshis_conv;
 }
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_transaction_fee_satoshis(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t transaction_fee_satoshis_conv = obj->claimable_on_channel_close.transaction_fee_satoshis;
+       return transaction_fee_satoshis_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_outbound_payment_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t outbound_payment_htlc_rounded_msat_conv = obj->claimable_on_channel_close.outbound_payment_htlc_rounded_msat;
+       return outbound_payment_htlc_rounded_msat_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_outbound_forwarded_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t outbound_forwarded_htlc_rounded_msat_conv = obj->claimable_on_channel_close.outbound_forwarded_htlc_rounded_msat;
+       return outbound_forwarded_htlc_rounded_msat_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_inbound_claiming_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t inbound_claiming_htlc_rounded_msat_conv = obj->claimable_on_channel_close.inbound_claiming_htlc_rounded_msat;
+       return inbound_claiming_htlc_rounded_msat_conv;
+}
+int64_t CS_LDK_LDKBalance_ClaimableOnChannelClose_get_inbound_htlc_rounded_msat(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableOnChannelClose);
+       int64_t inbound_htlc_rounded_msat_conv = obj->claimable_on_channel_close.inbound_htlc_rounded_msat;
+       return inbound_htlc_rounded_msat_conv;
+}
 int64_t CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_amount_satoshis(int64_t ptr) {
        LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
        CHECK(obj->tag == LDKBalance_ClaimableAwaitingConfirmations);
@@ -8399,6 +8863,12 @@ int32_t CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_confirmation_height
        int32_t confirmation_height_conv = obj->claimable_awaiting_confirmations.confirmation_height;
        return confirmation_height_conv;
 }
+int32_t CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_source(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_ClaimableAwaitingConfirmations);
+       int32_t source_conv = LDKBalanceSource_to_cs(obj->claimable_awaiting_confirmations.source);
+       return source_conv;
+}
 int64_t CS_LDK_LDKBalance_ContentiousClaimable_get_amount_satoshis(int64_t ptr) {
        LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
        CHECK(obj->tag == LDKBalance_ContentiousClaimable);
@@ -8444,6 +8914,12 @@ int8_tArray CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_payment_hash(int64_t
        memcpy(payment_hash_arr->elems, obj->maybe_timeout_claimable_htlc.payment_hash.data, 32);
        return payment_hash_arr;
 }
+jboolean CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_outbound_payment(int64_t ptr) {
+       LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBalance_MaybeTimeoutClaimableHTLC);
+       jboolean outbound_payment_conv = obj->maybe_timeout_claimable_htlc.outbound_payment;
+       return outbound_payment_conv;
+}
 int64_t CS_LDK_LDKBalance_MaybePreimageClaimableHTLC_get_amount_satoshis(int64_t ptr) {
        LDKBalance *obj = (LDKBalance*)untag_ptr(ptr);
        CHECK(obj->tag == LDKBalance_MaybePreimageClaimableHTLC);
@@ -8632,43 +9108,6 @@ static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone
        }
        return ret;
 }
-static inline struct LDKPublicKey C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR owner){
-       return owner->a;
-}
-int8_tArray  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(int64_t owner) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(owner);
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(owner_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-static inline struct LDKCVec_SocketAddressZ C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR owner){
-       return CVec_SocketAddressZ_clone(&owner->b);
-}
-int64_tArray  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(int64_t owner) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(owner);
-       LDKCVec_SocketAddressZ ret_var = C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(owner_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t p = 0; p < ret_var.datalen; p++) {
-               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
-               *ret_conv_15_copy = ret_var.data[p];
-               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
-               ret_arr_ptr[p] = ret_conv_15_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-static inline LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_clone(const LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ *orig) {
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(&orig->data[i]);
-       }
-       return ret;
-}
 typedef struct LDKOnionMessageContents_JCalls {
        atomic_size_t refcnt;
        uint32_t instance_ptr;
@@ -8683,9 +9122,15 @@ uint64_t tlv_type_LDKOnionMessageContents_jcall(const void* this_arg) {
        LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
        return js_invoke_function_l_(j_calls->instance_ptr, 53);
 }
+LDKStr msg_type_LDKOnionMessageContents_jcall(const void* this_arg) {
+       LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
+       jstring ret = (jstring)js_invoke_function_l_(j_calls->instance_ptr, 54);
+       LDKStr ret_conv = str_ref_to_owned_c(ret);
+       return ret_conv;
+}
 LDKCVec_u8Z write_LDKOnionMessageContents_jcall(const void* this_arg) {
        LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 54);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 55);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -8694,7 +9139,7 @@ LDKCVec_u8Z write_LDKOnionMessageContents_jcall(const void* this_arg) {
 }
 LDKStr debug_str_LDKOnionMessageContents_jcall(const void* this_arg) {
        LDKOnionMessageContents_JCalls *j_calls = (LDKOnionMessageContents_JCalls*) this_arg;
-       jstring ret = (jstring)js_invoke_function_l_(j_calls->instance_ptr, 55);
+       jstring ret = (jstring)js_invoke_function_l_(j_calls->instance_ptr, 56);
        LDKStr ret_conv = str_ref_to_owned_c(ret);
        return ret_conv;
 }
@@ -8710,6 +9155,7 @@ static inline LDKOnionMessageContents LDKOnionMessageContents_init (int64_t o) {
        LDKOnionMessageContents ret = {
                .this_arg = (void*) calls,
                .tlv_type = tlv_type_LDKOnionMessageContents_jcall,
+               .msg_type = msg_type_LDKOnionMessageContents_jcall,
                .write = write_LDKOnionMessageContents_jcall,
                .debug_str = debug_str_LDKOnionMessageContents_jcall,
                .cloned = LDKOnionMessageContents_JCalls_cloned,
@@ -8730,6 +9176,16 @@ int64_t  CS_LDK_OnionMessageContents_tlv_type(int64_t this_arg) {
        return ret_conv;
 }
 
+jstring  CS_LDK_OnionMessageContents_msg_type(int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKOnionMessageContents* this_arg_conv = (LDKOnionMessageContents*)this_arg_ptr;
+       LDKStr ret_str = (this_arg_conv->msg_type)(this_arg_conv->this_arg);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
 int8_tArray  CS_LDK_OnionMessageContents_write(int64_t this_arg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -8751,6 +9207,46 @@ jstring  CS_LDK_OnionMessageContents_debug_str(int64_t this_arg) {
        return ret_conv;
 }
 
+static inline struct LDKOnionMessageContents C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR owner){
+       return OnionMessageContents_clone(&owner->a);
+}
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* owner_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(owner);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(owner_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+static inline struct LDKResponseInstruction C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR owner){
+       LDKResponseInstruction ret = owner->b;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* owner_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(owner);
+       LDKResponseInstruction ret_var = C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+uint32_t CS_LDK_LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some: return 0;
+               case LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_None: return 1;
+               default: abort();
+       }
+}
+int64_t CS_LDK_LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some_get_some(int64_t ptr) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *obj = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* some_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *some_conv = obj->some;
+                       *some_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone(some_conv);
+       return tag_ptr(some_conv, true);
+}
 uint32_t CS_LDK_LDKCOption_OnionMessageContentsZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_OnionMessageContentsZ *obj = (LDKCOption_OnionMessageContentsZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -8790,45 +9286,31 @@ int64_t  CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_get_err(int64_
        return ret_ref;
 }
 
-static inline struct LDKOnionMessageContents C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner){
+static inline struct LDKOnionMessageContents C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR owner){
        return OnionMessageContents_clone(&owner->a);
 }
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(int64_t owner) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(owner);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(owner);
        LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(owner_conv);
+       *ret_ret = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(owner_conv);
        return tag_ptr(ret_ret, true);
 }
 
-static inline struct LDKDestination C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner){
-       return Destination_clone(&owner->b);
+static inline struct LDKMessageSendInstructions C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR owner){
+       return MessageSendInstructions_clone(&owner->b);
 }
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(int64_t owner) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(owner_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(int64_t owner) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* owner_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(owner);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = owner->c;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(int64_t owner) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* owner_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_clone(const LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ *orig) {
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ) * orig->datalen, "LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_clone(const LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ *orig) {
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ) * orig->datalen, "LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -9162,21 +9644,6 @@ int32_t  CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_get_err(int64_t owner
        return ret_conv;
 }
 
-uint32_t CS_LDK_LDKCOption_SecretKeyZ_ty_from_ptr(int64_t ptr) {
-       LDKCOption_SecretKeyZ *obj = (LDKCOption_SecretKeyZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_SecretKeyZ_Some: return 0;
-               case LDKCOption_SecretKeyZ_None: return 1;
-               default: abort();
-       }
-}
-int8_tArray CS_LDK_LDKCOption_SecretKeyZ_Some_get_some(int64_t ptr) {
-       LDKCOption_SecretKeyZ *obj = (LDKCOption_SecretKeyZ*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKCOption_SecretKeyZ_Some);
-       int8_tArray some_arr = init_int8_tArray(32, __LINE__);
-       memcpy(some_arr->elems, obj->some.bytes, 32);
-       return some_arr;
-}
 static inline struct LDKInvoiceWithExplicitSigningPubkeyBuilder CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_get_ok(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ *NONNULL_PTR owner){
        LDKInvoiceWithExplicitSigningPubkeyBuilder ret = *owner->contents.result;
        ret.is_owned = false;
@@ -9462,28 +9929,28 @@ int64_t  CS_LDK_CResult_StfuDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline struct LDKSplice CResult_SpliceDecodeErrorZ_get_ok(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR owner){
-       LDKSplice ret = *owner->contents.result;
+static inline struct LDKSpliceInit CResult_SpliceInitDecodeErrorZ_get_ok(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR owner){
+       LDKSpliceInit ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_SpliceDecodeErrorZ* owner_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(owner);
-       LDKSplice ret_var = CResult_SpliceDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_SpliceInitDecodeErrorZ* owner_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(owner);
+       LDKSpliceInit ret_var = CResult_SpliceInitDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_SpliceDecodeErrorZ_get_err(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_SpliceInitDecodeErrorZ_get_err(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_SpliceDecodeErrorZ* owner_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_SpliceInitDecodeErrorZ* owner_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_SpliceDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_SpliceInitDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -9878,6 +10345,32 @@ int64_t  CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_get_err(int64_t owner)
        return ret_ref;
 }
 
+static inline struct LDKCommitmentSignedBatch CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR owner){
+       LDKCommitmentSignedBatch ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* owner_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(owner);
+       LDKCommitmentSignedBatch ret_var = CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_CommitmentSignedBatchDecodeErrorZ_get_err(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* owner_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_CommitmentSignedBatchDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKCommitmentSigned CResult_CommitmentSignedDecodeErrorZ_get_ok(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR owner){
        LDKCommitmentSigned ret = *owner->contents.result;
        ret.is_owned = false;
@@ -10710,53 +11203,6 @@ int64_t  CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_get_err(int64_t owner)
        return ret_ref;
 }
 
-static inline LDKCVec_PhantomRouteHintsZ CVec_PhantomRouteHintsZ_clone(const LDKCVec_PhantomRouteHintsZ *orig) {
-       LDKCVec_PhantomRouteHintsZ ret = { .data = MALLOC(sizeof(LDKPhantomRouteHints) * orig->datalen, "LDKCVec_PhantomRouteHintsZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = PhantomRouteHints_clone(&orig->data[i]);
-       }
-       return ret;
-}
-uint32_t CS_LDK_LDKSignOrCreationError_ty_from_ptr(int64_t ptr) {
-       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKSignOrCreationError_SignError: return 0;
-               case LDKSignOrCreationError_CreationError: return 1;
-               default: abort();
-       }
-}
-int32_t CS_LDK_LDKSignOrCreationError_CreationError_get_creation_error(int64_t ptr) {
-       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKSignOrCreationError_CreationError);
-       int32_t creation_error_conv = LDKCreationError_to_cs(obj->creation_error);
-       return creation_error_conv;
-}
-static inline struct LDKBolt11Invoice CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
-       LDKBolt11Invoice ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(int64_t owner) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
-       LDKBolt11Invoice ret_var = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline struct LDKSignOrCreationError CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return SignOrCreationError_clone(&*owner->contents.err);
-}
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(int64_t owner) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
-       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
-       *ret_copy = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 uint32_t CS_LDK_LDKCOption_InboundHTLCStateDetailsZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_InboundHTLCStateDetailsZ *obj = (LDKCOption_InboundHTLCStateDetailsZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -11013,6 +11459,82 @@ int64_t  CS_LDK_CResult_ChannelShutdownStateDecodeErrorZ_get_err(int64_t owner)
        return ret_ref;
 }
 
+static inline struct LDKHeldHtlcAvailable CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR owner){
+       LDKHeldHtlcAvailable ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* owner_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(owner);
+       LDKHeldHtlcAvailable ret_var = CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_HeldHtlcAvailableDecodeErrorZ_get_err(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* owner_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_HeldHtlcAvailableDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKReleaseHeldHtlc CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR owner){
+       LDKReleaseHeldHtlc ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* owner_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(owner);
+       LDKReleaseHeldHtlc ret_var = CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* owner_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKAsyncPaymentsMessage CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return AsyncPaymentsMessage_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* owner_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(owner);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* owner_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKOffersMessage CResult_OffersMessageDecodeErrorZ_get_ok(LDKCResult_OffersMessageDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return OffersMessage_clone(&*owner->contents.result);
@@ -11427,6 +11949,55 @@ int64_t  CS_LDK_CResult_ShutdownScriptInvalidShutdownScriptZ_get_err(int64_t own
        return ret_ref;
 }
 
+uint32_t CS_LDK_LDKFundingInfo_ty_from_ptr(int64_t ptr) {
+       LDKFundingInfo *obj = (LDKFundingInfo*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKFundingInfo_Tx: return 0;
+               case LDKFundingInfo_OutPoint: return 1;
+               default: abort();
+       }
+}
+int8_tArray CS_LDK_LDKFundingInfo_Tx_get_transaction(int64_t ptr) {
+       LDKFundingInfo *obj = (LDKFundingInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKFundingInfo_Tx);
+       LDKTransaction transaction_var = obj->tx.transaction;
+                       int8_tArray transaction_arr = init_int8_tArray(transaction_var.datalen, __LINE__);
+                       memcpy(transaction_arr->elems, transaction_var.data, transaction_var.datalen);
+       return transaction_arr;
+}
+int64_t CS_LDK_LDKFundingInfo_OutPoint_get_outpoint(int64_t ptr) {
+       LDKFundingInfo *obj = (LDKFundingInfo*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKFundingInfo_OutPoint);
+       LDKOutPoint outpoint_var = obj->out_point.outpoint;
+                       int64_t outpoint_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_var);
+                       outpoint_ref = tag_ptr(outpoint_var.inner, false);
+       return outpoint_ref;
+}
+static inline struct LDKFundingInfo CResult_FundingInfoDecodeErrorZ_get_ok(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return FundingInfo_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_FundingInfoDecodeErrorZ* owner_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = CResult_FundingInfoDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_FundingInfoDecodeErrorZ_get_err(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_FundingInfoDecodeErrorZ* owner_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_FundingInfoDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 uint32_t CS_LDK_LDKPaymentPurpose_ty_from_ptr(int64_t ptr) {
        LDKPaymentPurpose *obj = (LDKPaymentPurpose*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -11731,24 +12302,40 @@ int64_t  CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_get_err(int64_t own
        return ret_ref;
 }
 
-static inline enum LDKPaymentFailureReason CResult_PaymentFailureReasonDecodeErrorZ_get_ok(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner){
+uint32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_PaymentFailureReasonZ_Some: return 0;
+               case LDKCOption_PaymentFailureReasonZ_None: return 1;
+               default: abort();
+       }
+}
+int32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_Some_get_some(int64_t ptr) {
+       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_PaymentFailureReasonZ_Some);
+       int32_t some_conv = LDKPaymentFailureReason_to_cs(obj->some);
+       return some_conv;
+}
+static inline struct LDKCOption_PaymentFailureReasonZ CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return PaymentFailureReason_clone(&*owner->contents.result);
+       return COption_PaymentFailureReasonZ_clone(&*owner->contents.result);
 }
-int32_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* owner_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(owner);
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(CResult_PaymentFailureReasonDecodeErrorZ_get_ok(owner_conv));
-       return ret_conv;
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* owner_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(owner);
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_PaymentFailureReasonDecodeErrorZ_get_err(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* owner_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* owner_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_PaymentFailureReasonDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -11775,20 +12362,6 @@ static inline LDKCVec_ClaimedHTLCZ CVec_ClaimedHTLCZ_clone(const LDKCVec_Claimed
        }
        return ret;
 }
-uint32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_ty_from_ptr(int64_t ptr) {
-       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentFailureReasonZ_Some: return 0;
-               case LDKCOption_PaymentFailureReasonZ_None: return 1;
-               default: abort();
-       }
-}
-int32_t CS_LDK_LDKCOption_PaymentFailureReasonZ_Some_get_some(int64_t ptr) {
-       LDKCOption_PaymentFailureReasonZ *obj = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKCOption_PaymentFailureReasonZ_Some);
-       int32_t some_conv = LDKPaymentFailureReason_to_cs(obj->some);
-       return some_conv;
-}
 uint32_t CS_LDK_LDKBumpTransactionEvent_ty_from_ptr(int64_t ptr) {
        LDKBumpTransactionEvent *obj = (LDKBumpTransactionEvent*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -11922,27 +12495,30 @@ uint32_t CS_LDK_LDKEvent_ty_from_ptr(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        switch(obj->tag) {
                case LDKEvent_FundingGenerationReady: return 0;
-               case LDKEvent_PaymentClaimable: return 1;
-               case LDKEvent_PaymentClaimed: return 2;
-               case LDKEvent_ConnectionNeeded: return 3;
-               case LDKEvent_InvoiceRequestFailed: return 4;
-               case LDKEvent_PaymentSent: return 5;
-               case LDKEvent_PaymentFailed: return 6;
-               case LDKEvent_PaymentPathSuccessful: return 7;
-               case LDKEvent_PaymentPathFailed: return 8;
-               case LDKEvent_ProbeSuccessful: return 9;
-               case LDKEvent_ProbeFailed: return 10;
-               case LDKEvent_PendingHTLCsForwardable: return 11;
-               case LDKEvent_HTLCIntercepted: return 12;
-               case LDKEvent_SpendableOutputs: return 13;
-               case LDKEvent_PaymentForwarded: return 14;
-               case LDKEvent_ChannelPending: return 15;
-               case LDKEvent_ChannelReady: return 16;
-               case LDKEvent_ChannelClosed: return 17;
-               case LDKEvent_DiscardFunding: return 18;
-               case LDKEvent_OpenChannelRequest: return 19;
-               case LDKEvent_HTLCHandlingFailed: return 20;
-               case LDKEvent_BumpTransaction: return 21;
+               case LDKEvent_FundingTxBroadcastSafe: return 1;
+               case LDKEvent_PaymentClaimable: return 2;
+               case LDKEvent_PaymentClaimed: return 3;
+               case LDKEvent_ConnectionNeeded: return 4;
+               case LDKEvent_InvoiceReceived: return 5;
+               case LDKEvent_PaymentSent: return 6;
+               case LDKEvent_PaymentFailed: return 7;
+               case LDKEvent_PaymentPathSuccessful: return 8;
+               case LDKEvent_PaymentPathFailed: return 9;
+               case LDKEvent_ProbeSuccessful: return 10;
+               case LDKEvent_ProbeFailed: return 11;
+               case LDKEvent_PendingHTLCsForwardable: return 12;
+               case LDKEvent_HTLCIntercepted: return 13;
+               case LDKEvent_SpendableOutputs: return 14;
+               case LDKEvent_PaymentForwarded: return 15;
+               case LDKEvent_ChannelPending: return 16;
+               case LDKEvent_ChannelReady: return 17;
+               case LDKEvent_ChannelClosed: return 18;
+               case LDKEvent_DiscardFunding: return 19;
+               case LDKEvent_OpenChannelRequest: return 20;
+               case LDKEvent_HTLCHandlingFailed: return 21;
+               case LDKEvent_BumpTransaction: return 22;
+               case LDKEvent_OnionMessageIntercepted: return 23;
+               case LDKEvent_OnionMessagePeerConnected: return 24;
                default: abort();
        }
 }
@@ -11983,6 +12559,47 @@ int8_tArray CS_LDK_LDKEvent_FundingGenerationReady_get_user_channel_id(int64_t p
        memcpy(user_channel_id_arr->elems, obj->funding_generation_ready.user_channel_id.le_bytes, 16);
        return user_channel_id_arr;
 }
+int64_t CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_channel_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       LDKChannelId channel_id_var = obj->funding_tx_broadcast_safe.channel_id;
+                       int64_t channel_id_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
+                       channel_id_ref = tag_ptr(channel_id_var.inner, false);
+       return channel_id_ref;
+}
+int8_tArray CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_user_channel_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       int8_tArray user_channel_id_arr = init_int8_tArray(16, __LINE__);
+       memcpy(user_channel_id_arr->elems, obj->funding_tx_broadcast_safe.user_channel_id.le_bytes, 16);
+       return user_channel_id_arr;
+}
+int64_t CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_funding_txo(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       LDKOutPoint funding_txo_var = obj->funding_tx_broadcast_safe.funding_txo;
+                       int64_t funding_txo_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
+                       funding_txo_ref = tag_ptr(funding_txo_var.inner, false);
+       return funding_txo_ref;
+}
+int8_tArray CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_counterparty_node_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       int8_tArray counterparty_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(counterparty_node_id_arr->elems, obj->funding_tx_broadcast_safe.counterparty_node_id.compressed_form, 33);
+       return counterparty_node_id_arr;
+}
+int64_t CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_former_temporary_channel_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_FundingTxBroadcastSafe);
+       LDKChannelId former_temporary_channel_id_var = obj->funding_tx_broadcast_safe.former_temporary_channel_id;
+                       int64_t former_temporary_channel_id_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_var);
+                       former_temporary_channel_id_ref = tag_ptr(former_temporary_channel_id_var.inner, false);
+       return former_temporary_channel_id_ref;
+}
 int8_tArray CS_LDK_LDKEvent_PaymentClaimable_get_receiver_node_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_PaymentClaimable);
@@ -12094,6 +12711,15 @@ int64_t CS_LDK_LDKEvent_PaymentClaimed_get_sender_intended_total_msat(int64_t pt
        int64_t sender_intended_total_msat_ref = tag_ptr(&obj->payment_claimed.sender_intended_total_msat, false);
        return sender_intended_total_msat_ref;
 }
+int64_t CS_LDK_LDKEvent_PaymentClaimed_get_onion_fields(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_PaymentClaimed);
+       LDKRecipientOnionFields onion_fields_var = obj->payment_claimed.onion_fields;
+                       int64_t onion_fields_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_var);
+                       onion_fields_ref = tag_ptr(onion_fields_var.inner, false);
+       return onion_fields_ref;
+}
 int8_tArray CS_LDK_LDKEvent_ConnectionNeeded_get_node_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_ConnectionNeeded);
@@ -12115,13 +12741,37 @@ int64_tArray CS_LDK_LDKEvent_ConnectionNeeded_get_addresses(int64_t ptr) {
                        
        return addresses_arr;
 }
-int8_tArray CS_LDK_LDKEvent_InvoiceRequestFailed_get_payment_id(int64_t ptr) {
+int8_tArray CS_LDK_LDKEvent_InvoiceReceived_get_payment_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
-       CHECK(obj->tag == LDKEvent_InvoiceRequestFailed);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
        int8_tArray payment_id_arr = init_int8_tArray(32, __LINE__);
-       memcpy(payment_id_arr->elems, obj->invoice_request_failed.payment_id.data, 32);
+       memcpy(payment_id_arr->elems, obj->invoice_received.payment_id.data, 32);
        return payment_id_arr;
 }
+int64_t CS_LDK_LDKEvent_InvoiceReceived_get_invoice(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
+       LDKBolt12Invoice invoice_var = obj->invoice_received.invoice;
+                       int64_t invoice_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
+                       invoice_ref = tag_ptr(invoice_var.inner, false);
+       return invoice_ref;
+}
+int64_t CS_LDK_LDKEvent_InvoiceReceived_get_context(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
+       int64_t context_ref = tag_ptr(&obj->invoice_received.context, false);
+       return context_ref;
+}
+int64_t CS_LDK_LDKEvent_InvoiceReceived_get_responder(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_InvoiceReceived);
+       LDKResponder responder_var = obj->invoice_received.responder;
+                       int64_t responder_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+                       responder_ref = tag_ptr(responder_var.inner, false);
+       return responder_ref;
+}
 int64_t CS_LDK_LDKEvent_PaymentSent_get_payment_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_PaymentSent);
@@ -12155,12 +12805,11 @@ int8_tArray CS_LDK_LDKEvent_PaymentFailed_get_payment_id(int64_t ptr) {
        memcpy(payment_id_arr->elems, obj->payment_failed.payment_id.data, 32);
        return payment_id_arr;
 }
-int8_tArray CS_LDK_LDKEvent_PaymentFailed_get_payment_hash(int64_t ptr) {
+int64_t CS_LDK_LDKEvent_PaymentFailed_get_payment_hash(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_PaymentFailed);
-       int8_tArray payment_hash_arr = init_int8_tArray(32, __LINE__);
-       memcpy(payment_hash_arr->elems, obj->payment_failed.payment_hash.data, 32);
-       return payment_hash_arr;
+       int64_t payment_hash_ref = tag_ptr(&obj->payment_failed.payment_hash, false);
+       return payment_hash_ref;
 }
 int64_t CS_LDK_LDKEvent_PaymentFailed_get_reason(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
@@ -12532,13 +13181,11 @@ int64_t CS_LDK_LDKEvent_DiscardFunding_get_channel_id(int64_t ptr) {
                        channel_id_ref = tag_ptr(channel_id_var.inner, false);
        return channel_id_ref;
 }
-int8_tArray CS_LDK_LDKEvent_DiscardFunding_get_transaction(int64_t ptr) {
+int64_t CS_LDK_LDKEvent_DiscardFunding_get_funding_info(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_DiscardFunding);
-       LDKTransaction transaction_var = obj->discard_funding.transaction;
-                       int8_tArray transaction_arr = init_int8_tArray(transaction_var.datalen, __LINE__);
-                       memcpy(transaction_arr->elems, transaction_var.data, transaction_var.datalen);
-       return transaction_arr;
+       int64_t funding_info_ref = tag_ptr(&obj->discard_funding.funding_info, false);
+       return funding_info_ref;
 }
 int64_t CS_LDK_LDKEvent_OpenChannelRequest_get_temporary_channel_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
@@ -12577,6 +13224,21 @@ int64_t CS_LDK_LDKEvent_OpenChannelRequest_get_channel_type(int64_t ptr) {
                        channel_type_ref = tag_ptr(channel_type_var.inner, false);
        return channel_type_ref;
 }
+jboolean CS_LDK_LDKEvent_OpenChannelRequest_get_is_announced(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OpenChannelRequest);
+       jboolean is_announced_conv = obj->open_channel_request.is_announced;
+       return is_announced_conv;
+}
+int64_t CS_LDK_LDKEvent_OpenChannelRequest_get_params(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OpenChannelRequest);
+       LDKChannelParameters params_var = obj->open_channel_request.params;
+                       int64_t params_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_var);
+                       params_ref = tag_ptr(params_var.inner, false);
+       return params_ref;
+}
 int64_t CS_LDK_LDKEvent_HTLCHandlingFailed_get_prev_channel_id(int64_t ptr) {
        LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
        CHECK(obj->tag == LDKEvent_HTLCHandlingFailed);
@@ -12598,6 +13260,29 @@ int64_t CS_LDK_LDKEvent_BumpTransaction_get_bump_transaction(int64_t ptr) {
        int64_t bump_transaction_ref = tag_ptr(&obj->bump_transaction, false);
        return bump_transaction_ref;
 }
+int8_tArray CS_LDK_LDKEvent_OnionMessageIntercepted_get_peer_node_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OnionMessageIntercepted);
+       int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(peer_node_id_arr->elems, obj->onion_message_intercepted.peer_node_id.compressed_form, 33);
+       return peer_node_id_arr;
+}
+int64_t CS_LDK_LDKEvent_OnionMessageIntercepted_get_message(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OnionMessageIntercepted);
+       LDKOnionMessage message_var = obj->onion_message_intercepted.message;
+                       int64_t message_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
+                       message_ref = tag_ptr(message_var.inner, false);
+       return message_ref;
+}
+int8_tArray CS_LDK_LDKEvent_OnionMessagePeerConnected_get_peer_node_id(int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKEvent_OnionMessagePeerConnected);
+       int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(peer_node_id_arr->elems, obj->onion_message_peer_connected.peer_node_id.compressed_form, 33);
+       return peer_node_id_arr;
+}
 uint32_t CS_LDK_LDKCOption_EventZ_ty_from_ptr(int64_t ptr) {
        LDKCOption_EventZ *obj = (LDKCOption_EventZ*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -12636,6 +13321,39 @@ int64_t  CS_LDK_CResult_COption_EventZDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+static inline struct LDKNonce CResult_NonceDecodeErrorZ_get_ok(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR owner){
+       LDKNonce ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_NonceDecodeErrorZ* owner_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(owner);
+       LDKNonce ret_var = CResult_NonceDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_NonceDecodeErrorZ_get_err(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_NonceDecodeErrorZ* owner_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_NonceDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
+       LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = RouteHintHop_clone(&orig->data[i]);
+       }
+       return ret;
+}
 uint32_t CS_LDK_LDKBolt11ParseError_ty_from_ptr(int64_t ptr) {
        LDKBolt11ParseError *obj = (LDKBolt11ParseError*)untag_ptr(ptr);
        switch(obj->tag) {
@@ -13021,6 +13739,32 @@ int64_t  CS_LDK_CResult_BigSizeDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
+static inline struct LDKUntrustedString CResult_UntrustedStringDecodeErrorZ_get_ok(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
+       LDKUntrustedString ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
+       LDKUntrustedString ret_var = CResult_UntrustedStringDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_UntrustedStringDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline struct LDKHostname CResult_HostnameDecodeErrorZ_get_ok(LDKCResult_HostnameDecodeErrorZ *NONNULL_PTR owner){
        LDKHostname ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13096,32 +13840,6 @@ int64_t  CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_get_err(int64_t own
        return ret_ref;
 }
 
-static inline struct LDKUntrustedString CResult_UntrustedStringDecodeErrorZ_get_ok(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
-       LDKUntrustedString ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
-       LDKUntrustedString ret_var = CResult_UntrustedStringDecodeErrorZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return DecodeError_clone(&*owner->contents.err);
-}
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_UntrustedStringDecodeErrorZ* owner_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(owner);
-       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_UntrustedStringDecodeErrorZ_get_err(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 static inline struct LDKChannelId CResult_ChannelIdDecodeErrorZ_get_ok(LDKCResult_ChannelIdDecodeErrorZ *NONNULL_PTR owner){
        LDKChannelId ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13167,6 +13885,62 @@ int16_t  CS_LDK_C2Tuple__u832u16Z_get_b(int64_t owner) {
        return ret_conv;
 }
 
+static inline struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
+       LDKBlindedPayInfo ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKBlindedPayInfo ret_var = CResult_BlindedPayInfoDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* owner_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_BlindedPayInfoDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKBlindedPaymentPath CResult_BlindedPaymentPathNoneZ_get_ok(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR owner){
+       LDKBlindedPaymentPath ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedPaymentPathNoneZ* owner_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(owner);
+       LDKBlindedPaymentPath ret_var = CResult_BlindedPaymentPathNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline void CResult_BlindedPaymentPathNoneZ_get_err(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_BlindedPaymentPathNoneZ_get_err(int64_t owner) {
+       LDKCResult_BlindedPaymentPathNoneZ* owner_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(owner);
+       CResult_BlindedPaymentPathNoneZ_get_err(owner_conv);
+}
+
+static inline LDKCVec_PaymentForwardNodeZ CVec_PaymentForwardNodeZ_clone(const LDKCVec_PaymentForwardNodeZ *orig) {
+       LDKCVec_PaymentForwardNodeZ ret = { .data = MALLOC(sizeof(LDKPaymentForwardNode) * orig->datalen, "LDKCVec_PaymentForwardNodeZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = PaymentForwardNode_clone(&orig->data[i]);
+       }
+       return ret;
+}
 static inline struct LDKPaymentRelay CResult_PaymentRelayDecodeErrorZ_get_ok(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner){
        LDKPaymentRelay ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13321,85 +14095,46 @@ int64_t  CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline struct LDKStr CResult_StrSecp256k1ErrorZ_get_ok(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return *owner->contents.result;
-}
-jstring  CS_LDK_CResult_StrSecp256k1ErrorZ_get_ok(int64_t owner) {
-       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
-       LDKStr ret_str = CResult_StrSecp256k1ErrorZ_get_ok(owner_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       return ret_conv;
-}
-
-static inline enum LDKSecp256k1Error CResult_StrSecp256k1ErrorZ_get_err(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-int32_t  CS_LDK_CResult_StrSecp256k1ErrorZ_get_err(int64_t owner) {
-       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
-       int32_t ret_conv = LDKSecp256k1Error_to_cs(CResult_StrSecp256k1ErrorZ_get_err(owner_conv));
-       return ret_conv;
-}
-
-static inline struct LDKThirtyTwoBytes C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
-       return ThirtyTwoBytes_clone(&owner->a);
-}
-int8_tArray  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(int64_t owner) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(owner_conv).data, 32);
-       return ret_arr;
-}
-
-static inline struct LDKRecipientOnionFields C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
-       LDKRecipientOnionFields ret = owner->b;
+static inline struct LDKResponder CResult_ResponderDecodeErrorZ_get_ok(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR owner){
+       LDKResponder ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(int64_t owner) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
-       LDKRecipientOnionFields ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(owner_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_ResponderDecodeErrorZ* owner_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(owner);
+       LDKResponder ret_var = CResult_ResponderDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKRouteParameters C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner){
-       LDKRouteParameters ret = owner->c;
-       ret.is_owned = false;
-       return ret;
+static inline struct LDKDecodeError CResult_ResponderDecodeErrorZ_get_err(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(int64_t owner) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* owner_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(owner);
-       LDKRouteParameters ret_var = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_ResponderDecodeErrorZ* owner_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ResponderDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(&*owner->contents.result);
-}
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(owner_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-static inline void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
+uint32_t CS_LDK_LDKCOption_MessageContextZ_ty_from_ptr(int64_t ptr) {
+       LDKCOption_MessageContextZ *obj = (LDKCOption_MessageContextZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_MessageContextZ_Some: return 0;
+               case LDKCOption_MessageContextZ_None: return 1;
+               default: abort();
+       }
 }
-void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(int64_t owner) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* owner_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(owner);
-       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(owner_conv);
+int64_t CS_LDK_LDKCOption_MessageContextZ_Some_get_some(int64_t ptr) {
+       LDKCOption_MessageContextZ *obj = (LDKCOption_MessageContextZ*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKCOption_MessageContextZ_Some);
+       int64_t some_ref = tag_ptr(&obj->some, false);
+       return some_ref;
 }
-
 static inline struct LDKPublicKey C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_get_a(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR owner){
        return owner->a;
 }
@@ -13558,17 +14293,16 @@ int64_t CS_LDK_LDKPeeledOnion_Receive_get__0(int64_t ptr) {
        int64_t _0_ref = tag_ptr(&obj->receive._0, false);
        return _0_ref;
 }
-int8_tArray CS_LDK_LDKPeeledOnion_Receive_get__1(int64_t ptr) {
+int64_t CS_LDK_LDKPeeledOnion_Receive_get__1(int64_t ptr) {
        LDKPeeledOnion *obj = (LDKPeeledOnion*)untag_ptr(ptr);
        CHECK(obj->tag == LDKPeeledOnion_Receive);
-       int8_tArray _1_arr = init_int8_tArray(32, __LINE__);
-       memcpy(_1_arr->elems, obj->receive._1.data, 32);
-       return _1_arr;
+       int64_t _1_ref = tag_ptr(&obj->receive._1, false);
+       return _1_ref;
 }
 int64_t CS_LDK_LDKPeeledOnion_Receive_get__2(int64_t ptr) {
        LDKPeeledOnion *obj = (LDKPeeledOnion*)untag_ptr(ptr);
        CHECK(obj->tag == LDKPeeledOnion_Receive);
-       LDKBlindedPath _2_var = obj->receive._2;
+       LDKBlindedMessagePath _2_var = obj->receive._2;
                        int64_t _2_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(_2_var);
                        _2_ref = tag_ptr(_2_var.inner, false);
@@ -13634,104 +14368,96 @@ int64_t  CS_LDK_CResult_SendSuccessSendErrorZ_get_err(int64_t owner) {
        return ret_ref;
 }
 
-static inline struct LDKBlindedPath CResult_BlindedPathNoneZ_get_ok(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = *owner->contents.result;
-       ret.is_owned = false;
-       return ret;
-}
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedPathNoneZ* owner_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = CResult_BlindedPathNoneZ_get_ok(owner_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline void CResult_BlindedPathNoneZ_get_err(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-void  CS_LDK_CResult_BlindedPathNoneZ_get_err(int64_t owner) {
-       LDKCResult_BlindedPathNoneZ* owner_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(owner);
-       CResult_BlindedPathNoneZ_get_err(owner_conv);
-}
-
-static inline struct LDKC2Tuple_BlindedPayInfoBlindedPathZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+static inline void CResult_NoneSendErrorZ_get_ok(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_BlindedPayInfoBlindedPathZ_clone(&*owner->contents.result);
+       return *owner->contents.result;
 }
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(int64_t owner) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(owner_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_CResult_NoneSendErrorZ_get_ok(int64_t owner) {
+       LDKCResult_NoneSendErrorZ* owner_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(owner);
+       CResult_NoneSendErrorZ_get_ok(owner_conv);
 }
 
-static inline void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+static inline struct LDKSendError CResult_NoneSendErrorZ_get_err(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return *owner->contents.err;
+       return SendError_clone(&*owner->contents.err);
 }
-void  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(int64_t owner) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(owner_conv);
+int64_t  CS_LDK_CResult_NoneSendErrorZ_get_err(int64_t owner) {
+       LDKCResult_NoneSendErrorZ* owner_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(owner);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = CResult_NoneSendErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline LDKCVec_ForwardNodeZ CVec_ForwardNodeZ_clone(const LDKCVec_ForwardNodeZ *orig) {
-       LDKCVec_ForwardNodeZ ret = { .data = MALLOC(sizeof(LDKForwardNode) * orig->datalen, "LDKCVec_ForwardNodeZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ForwardNode_clone(&orig->data[i]);
-       }
-       return ret;
-}
-static inline struct LDKBlindedPath CResult_BlindedPathDecodeErrorZ_get_ok(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner){
-       LDKBlindedPath ret = *owner->contents.result;
+static inline struct LDKBlindedHop CResult_BlindedHopDecodeErrorZ_get_ok(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
+       LDKBlindedHop ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedPathDecodeErrorZ* owner_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(owner);
-       LDKBlindedPath ret_var = CResult_BlindedPathDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
+       LDKBlindedHop ret_var = CResult_BlindedHopDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_BlindedPathDecodeErrorZ_get_err(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_BlindedHopDecodeErrorZ_get_err(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_BlindedPathDecodeErrorZ* owner_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(owner);
+int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_BlindedPathDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_BlindedHopDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKBlindedHop CResult_BlindedHopDecodeErrorZ_get_ok(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
-       LDKBlindedHop ret = *owner->contents.result;
+static inline LDKCVec_PhantomRouteHintsZ CVec_PhantomRouteHintsZ_clone(const LDKCVec_PhantomRouteHintsZ *orig) {
+       LDKCVec_PhantomRouteHintsZ ret = { .data = MALLOC(sizeof(LDKPhantomRouteHints) * orig->datalen, "LDKCVec_PhantomRouteHintsZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = PhantomRouteHints_clone(&orig->data[i]);
+       }
+       return ret;
+}
+uint32_t CS_LDK_LDKSignOrCreationError_ty_from_ptr(int64_t ptr) {
+       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKSignOrCreationError_SignError: return 0;
+               case LDKSignOrCreationError_CreationError: return 1;
+               default: abort();
+       }
+}
+int32_t CS_LDK_LDKSignOrCreationError_CreationError_get_creation_error(int64_t ptr) {
+       LDKSignOrCreationError *obj = (LDKSignOrCreationError*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKSignOrCreationError_CreationError);
+       int32_t creation_error_conv = LDKCreationError_to_cs(obj->creation_error);
+       return creation_error_conv;
+}
+static inline struct LDKBolt11Invoice CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
+       LDKBolt11Invoice ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_ok(int64_t owner) {
-       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
-       LDKBlindedHop ret_var = CResult_BlindedHopDecodeErrorZ_get_ok(owner_conv);
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(int64_t owner) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
+       LDKBolt11Invoice ret_var = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_BlindedHopDecodeErrorZ_get_err(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKSignOrCreationError CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return DecodeError_clone(&*owner->contents.err);
+       return SignOrCreationError_clone(&*owner->contents.err);
 }
-int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_get_err(int64_t owner) {
-       LDKCResult_BlindedHopDecodeErrorZ* owner_conv = (LDKCResult_BlindedHopDecodeErrorZ*)untag_ptr(owner);
-       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_BlindedHopDecodeErrorZ_get_err(owner_conv);
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(int64_t owner) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* owner_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(owner);
+       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
+       *ret_copy = CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -13899,7 +14625,7 @@ void register_tx_LDKFilter_jcall(const void* this_arg, const uint8_t (* txid)[32
        LDKu8slice script_pubkey_var = script_pubkey;
        int8_tArray script_pubkey_arr = init_int8_tArray(script_pubkey_var.datalen, __LINE__);
        memcpy(script_pubkey_arr->elems, script_pubkey_var.data, script_pubkey_var.datalen);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 56, (int64_t)txid_arr, (int64_t)script_pubkey_arr);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 57, (int64_t)txid_arr, (int64_t)script_pubkey_arr);
 }
 void register_output_LDKFilter_jcall(const void* this_arg, LDKWatchedOutput output) {
        LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) this_arg;
@@ -13907,7 +14633,7 @@ void register_output_LDKFilter_jcall(const void* this_arg, LDKWatchedOutput outp
        int64_t output_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(output_var);
        output_ref = tag_ptr(output_var.inner, output_var.is_owned);
-       js_invoke_function_void_l(j_calls->instance_ptr, 57, output_ref);
+       js_invoke_function_void_l(j_calls->instance_ptr, 58, output_ref);
 }
 static void LDKFilter_JCalls_cloned(LDKFilter* new_obj) {
        LDKFilter_JCalls *j_calls = (LDKFilter_JCalls*) new_obj->this_arg;
@@ -13997,7 +14723,7 @@ static void LDKChangeDestinationSource_JCalls_free(void* this_arg) {
 }
 LDKCResult_CVec_u8ZNoneZ get_change_destination_script_LDKChangeDestinationSource_jcall(const void* this_arg) {
        LDKChangeDestinationSource_JCalls *j_calls = (LDKChangeDestinationSource_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 58);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 59);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
@@ -14055,7 +14781,7 @@ LDKCResult_CVec_u8ZIOErrorZ read_LDKKVStore_jcall(const void* this_arg, LDKStr p
        LDKStr key_str = key;
        jstring key_conv = str_ref_to_cs(key_str.chars, key_str.len);
        Str_free(key_str);
-       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 59, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 60, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZIOErrorZ ret_conv = *(LDKCResult_CVec_u8ZIOErrorZ*)(ret_ptr);
@@ -14076,7 +14802,7 @@ LDKCResult_NoneIOErrorZ write_LDKKVStore_jcall(const void* this_arg, LDKStr prim
        LDKu8slice buf_var = buf;
        int8_tArray buf_arr = init_int8_tArray(buf_var.datalen, __LINE__);
        memcpy(buf_arr->elems, buf_var.data, buf_var.datalen);
-       uint64_t ret = js_invoke_function_l_llll(j_calls->instance_ptr, 60, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, (int64_t)buf_arr);
+       uint64_t ret = js_invoke_function_l_llll(j_calls->instance_ptr, 61, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, (int64_t)buf_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14095,7 +14821,7 @@ LDKCResult_NoneIOErrorZ remove_LDKKVStore_jcall(const void* this_arg, LDKStr pri
        jstring key_conv = str_ref_to_cs(key_str.chars, key_str.len);
        Str_free(key_str);
        jboolean lazy_conv = lazy;
-       uint64_t ret = js_invoke_function_l_lllb(j_calls->instance_ptr, 61, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, lazy_conv);
+       uint64_t ret = js_invoke_function_l_lllb(j_calls->instance_ptr, 62, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv, (int64_t)key_conv, lazy_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14110,7 +14836,7 @@ LDKCResult_CVec_StrZIOErrorZ list_LDKKVStore_jcall(const void* this_arg, LDKStr
        LDKStr secondary_namespace_str = secondary_namespace;
        jstring secondary_namespace_conv = str_ref_to_cs(secondary_namespace_str.chars, secondary_namespace_str.len);
        Str_free(secondary_namespace_str);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 62, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 63, (int64_t)primary_namespace_conv, (int64_t)secondary_namespace_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_StrZIOErrorZ ret_conv = *(LDKCResult_CVec_StrZIOErrorZ*)(ret_ptr);
@@ -14235,7 +14961,7 @@ LDKCResult_TransactionNoneZ spend_spendable_outputs_LDKOutputSpender_jcall(const
        LDKCOption_u32Z *locktime_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *locktime_copy = locktime;
        int64_t locktime_ref = tag_ptr(locktime_copy, true);
-       uint64_t ret = js_invoke_function_l_lllil(j_calls->instance_ptr, 63, (int64_t)descriptors_arr, (int64_t)outputs_arr, (int64_t)change_destination_script_arr, feerate_sat_per_1000_weight_conv, locktime_ref);
+       uint64_t ret = js_invoke_function_l_lllil(j_calls->instance_ptr, 64, (int64_t)descriptors_arr, (int64_t)outputs_arr, (int64_t)change_destination_script_arr, feerate_sat_per_1000_weight_conv, locktime_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TransactionNoneZ ret_conv = *(LDKCResult_TransactionNoneZ*)(ret_ptr);
@@ -14602,55 +15328,142 @@ static inline LDKCVec_C2Tuple_OutPointChannelIdZZ CVec_C2Tuple_OutPointChannelId
        }
        return ret;
 }
-static inline LDKCVec_MonitorUpdateIdZ CVec_MonitorUpdateIdZ_clone(const LDKCVec_MonitorUpdateIdZ *orig) {
-       LDKCVec_MonitorUpdateIdZ ret = { .data = MALLOC(sizeof(LDKMonitorUpdateId) * orig->datalen, "LDKCVec_MonitorUpdateIdZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = MonitorUpdateId_clone(&orig->data[i]);
-       }
-       return ret;
-}
-static inline struct LDKOutPoint C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner){
+static inline struct LDKOutPoint C2Tuple_OutPointCVec_u64ZZ_get_a(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR owner){
        LDKOutPoint ret = owner->a;
        ret.is_owned = false;
        return ret;
 }
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(int64_t owner) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* owner_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(owner);
-       LDKOutPoint ret_var = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(owner_conv);
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_get_a(int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(owner);
+       LDKOutPoint ret_var = C2Tuple_OutPointCVec_u64ZZ_get_a(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKCVec_MonitorUpdateIdZ C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner){
-       return CVec_MonitorUpdateIdZ_clone(&owner->b);
+static inline struct LDKCVec_u64Z C2Tuple_OutPointCVec_u64ZZ_get_b(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR owner){
+       return CVec_u64Z_clone(&owner->b);
 }
-int64_tArray  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(int64_t owner) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* owner_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(owner);
-       LDKCVec_MonitorUpdateIdZ ret_var = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(owner_conv);
+int64_tArray  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_get_b(int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(owner);
+       LDKCVec_u64Z ret_var = C2Tuple_OutPointCVec_u64ZZ_get_b(owner_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t r = 0; r < ret_var.datalen; r++) {
-               LDKMonitorUpdateId ret_conv_17_var = ret_var.data[r];
-               int64_t ret_conv_17_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_17_var);
-               ret_conv_17_ref = tag_ptr(ret_conv_17_var.inner, ret_conv_17_var.is_owned);
-               ret_arr_ptr[r] = ret_conv_17_ref;
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_clone(const LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ *orig) {
-       LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ) * orig->datalen, "LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_OutPointCVec_u64ZZZ CVec_C2Tuple_OutPointCVec_u64ZZZ_clone(const LDKCVec_C2Tuple_OutPointCVec_u64ZZZ *orig) {
+       LDKCVec_C2Tuple_OutPointCVec_u64ZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ) * orig->datalen, "LDKCVec_C2Tuple_OutPointCVec_u64ZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_OutPointCVec_u64ZZ_clone(&orig->data[i]);
        }
        return ret;
 }
+static inline struct LDKBlindedMessagePath CResult_BlindedMessagePathDecodeErrorZ_get_ok(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR owner){
+       LDKBlindedMessagePath ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* owner_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(owner);
+       LDKBlindedMessagePath ret_var = CResult_BlindedMessagePathDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_BlindedMessagePathDecodeErrorZ_get_err(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* owner_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_BlindedMessagePathDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKBlindedMessagePath CResult_BlindedMessagePathNoneZ_get_ok(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR owner){
+       LDKBlindedMessagePath ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_get_ok(int64_t owner) {
+       LDKCResult_BlindedMessagePathNoneZ* owner_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(owner);
+       LDKBlindedMessagePath ret_var = CResult_BlindedMessagePathNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline void CResult_BlindedMessagePathNoneZ_get_err(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+void  CS_LDK_CResult_BlindedMessagePathNoneZ_get_err(int64_t owner) {
+       LDKCResult_BlindedMessagePathNoneZ* owner_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(owner);
+       CResult_BlindedMessagePathNoneZ_get_err(owner_conv);
+}
+
+static inline struct LDKMessageContext CResult_MessageContextDecodeErrorZ_get_ok(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return MessageContext_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_MessageContextDecodeErrorZ* owner_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(owner);
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = CResult_MessageContextDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_MessageContextDecodeErrorZ_get_err(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_MessageContextDecodeErrorZ* owner_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_MessageContextDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKOffersContext CResult_OffersContextDecodeErrorZ_get_ok(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return OffersContext_clone(&*owner->contents.result);
+}
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_get_ok(int64_t owner) {
+       LDKCResult_OffersContextDecodeErrorZ* owner_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(owner);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = CResult_OffersContextDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_OffersContextDecodeErrorZ_get_err(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_get_err(int64_t owner) {
+       LDKCResult_OffersContextDecodeErrorZ* owner_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_OffersContextDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 typedef struct LDKPersister_JCalls {
        atomic_size_t refcnt;
        uint32_t instance_ptr;
@@ -14668,7 +15481,7 @@ LDKCResult_NoneIOErrorZ persist_manager_LDKPersister_jcall(const void* this_arg,
        // WARNING: we may need a move here but no clone is available for LDKChannelManager
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_var);
        channel_manager_ref = tag_ptr(channel_manager_var.inner, channel_manager_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 64, channel_manager_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 65, channel_manager_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14682,7 +15495,7 @@ LDKCResult_NoneIOErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, c
        // WARNING: we may need a move here but no clone is available for LDKNetworkGraph
        CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_var);
        network_graph_ref = tag_ptr(network_graph_var.inner, network_graph_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 65, network_graph_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 66, network_graph_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14693,7 +15506,7 @@ LDKCResult_NoneIOErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg,
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        // WARNING: This object doesn't live past this scope, needs clone!
        int64_t ret_scorer = tag_ptr(scorer, false);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 66, ret_scorer);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 67, ret_scorer);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
@@ -14773,45 +15586,37 @@ static void LDKPersist_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, const LDKChannelMonitor * monitor) {
        LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
        LDKOutPoint channel_funding_outpoint_var = channel_funding_outpoint;
        int64_t channel_funding_outpoint_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_var);
        channel_funding_outpoint_ref = tag_ptr(channel_funding_outpoint_var.inner, channel_funding_outpoint_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_lll(j_calls->instance_ptr, 67, channel_funding_outpoint_ref, data_ref, update_id_ref);
+       LDKChannelMonitor monitor_var = *monitor;
+       int64_t monitor_ref = 0;
+       monitor_var = ChannelMonitor_clone(&monitor_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
+       monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
+       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_ll(j_calls->instance_ptr, 68, channel_funding_outpoint_ref, monitor_ref);
        LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_cs(ret);
        return ret_conv;
 }
-LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, LDKChannelMonitorUpdate update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_funding_outpoint, LDKChannelMonitorUpdate monitor_update, const LDKChannelMonitor * monitor) {
        LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
        LDKOutPoint channel_funding_outpoint_var = channel_funding_outpoint;
        int64_t channel_funding_outpoint_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_var);
        channel_funding_outpoint_ref = tag_ptr(channel_funding_outpoint_var.inner, channel_funding_outpoint_var.is_owned);
-       LDKChannelMonitorUpdate update_var = update;
-       int64_t update_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
-       update_ref = tag_ptr(update_var.inner, update_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_llll(j_calls->instance_ptr, 68, channel_funding_outpoint_ref, update_ref, data_ref, update_id_ref);
+       LDKChannelMonitorUpdate monitor_update_var = monitor_update;
+       int64_t monitor_update_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_update_var);
+       monitor_update_ref = tag_ptr(monitor_update_var.inner, monitor_update_var.is_owned);
+       LDKChannelMonitor monitor_var = *monitor;
+       int64_t monitor_ref = 0;
+       monitor_var = ChannelMonitor_clone(&monitor_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
+       monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
+       uint64_t ret = js_invoke_function_ChannelMonitorUpdateStatus_lll(j_calls->instance_ptr, 69, channel_funding_outpoint_ref, monitor_update_ref, monitor_ref);
        LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_cs(ret);
        return ret_conv;
 }
@@ -14821,7 +15626,7 @@ void archive_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoin
        int64_t channel_funding_outpoint_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_var);
        channel_funding_outpoint_ref = tag_ptr(channel_funding_outpoint_var.inner, channel_funding_outpoint_var.is_owned);
-       js_invoke_function_void_l(j_calls->instance_ptr, 69, channel_funding_outpoint_ref);
+       js_invoke_function_void_l(j_calls->instance_ptr, 70, channel_funding_outpoint_ref);
 }
 static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
        LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) new_obj->this_arg;
@@ -14846,7 +15651,7 @@ uint64_t  CS_LDK_LDKPersist_new(int32_t o) {
        *res_ptr = LDKPersist_init(o);
        return tag_ptr(res_ptr, true);
 }
-int32_t  CS_LDK_Persist_persist_new_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t data, int64_t update_id) {
+int32_t  CS_LDK_Persist_persist_new_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t monitor) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
@@ -14855,21 +15660,16 @@ int32_t  CS_LDK_Persist_persist_new_channel(int64_t this_arg, int64_t channel_fu
        channel_funding_outpoint_conv.is_owned = ptr_is_owned(channel_funding_outpoint);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_conv);
        channel_funding_outpoint_conv = OutPoint_clone(&channel_funding_outpoint_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, &data_conv, update_id_conv));
+       LDKChannelMonitor monitor_conv;
+       monitor_conv.inner = untag_ptr(monitor);
+       monitor_conv.is_owned = ptr_is_owned(monitor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
+       monitor_conv.is_owned = false;
+       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, &monitor_conv));
        return ret_conv;
 }
 
-int32_t  CS_LDK_Persist_update_persisted_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t update, int64_t data, int64_t update_id) {
+int32_t  CS_LDK_Persist_update_persisted_channel(int64_t this_arg, int64_t channel_funding_outpoint, int64_t monitor_update, int64_t monitor) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
@@ -14878,22 +15678,17 @@ int32_t  CS_LDK_Persist_update_persisted_channel(int64_t this_arg, int64_t chann
        channel_funding_outpoint_conv.is_owned = ptr_is_owned(channel_funding_outpoint);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_outpoint_conv);
        channel_funding_outpoint_conv = OutPoint_clone(&channel_funding_outpoint_conv);
-       LDKChannelMonitorUpdate update_conv;
-       update_conv.inner = untag_ptr(update);
-       update_conv.is_owned = ptr_is_owned(update);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
-       update_conv = ChannelMonitorUpdate_clone(&update_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, update_conv, &data_conv, update_id_conv));
+       LDKChannelMonitorUpdate monitor_update_conv;
+       monitor_update_conv.inner = untag_ptr(monitor_update);
+       monitor_update_conv.is_owned = ptr_is_owned(monitor_update);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_update_conv);
+       monitor_update_conv = ChannelMonitorUpdate_clone(&monitor_update_conv);
+       LDKChannelMonitor monitor_conv;
+       monitor_conv.inner = untag_ptr(monitor);
+       monitor_conv.is_owned = ptr_is_owned(monitor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
+       monitor_conv.is_owned = false;
+       int32_t ret_conv = LDKChannelMonitorUpdateStatus_to_cs((this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_funding_outpoint_conv, monitor_update_conv, &monitor_conv));
        return ret_conv;
 }
 
@@ -14935,7 +15730,7 @@ void filtered_block_connected_LDKListen_jcall(const void* this_arg, const uint8_
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_void_lli(j_calls->instance_ptr, 70, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
+       js_invoke_function_void_lli(j_calls->instance_ptr, 71, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
 }
 void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
@@ -14943,14 +15738,14 @@ void block_connected_LDKListen_jcall(const void* this_arg, LDKu8slice block, uin
        int8_tArray block_arr = init_int8_tArray(block_var.datalen, __LINE__);
        memcpy(block_arr->elems, block_var.data, block_var.datalen);
        int32_t height_conv = height;
-       js_invoke_function_void_li(j_calls->instance_ptr, 71, (int64_t)block_arr, height_conv);
+       js_invoke_function_void_li(j_calls->instance_ptr, 72, (int64_t)block_arr, height_conv);
 }
 void block_disconnected_LDKListen_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_void_li(j_calls->instance_ptr, 72, (int64_t)header_arr, height_conv);
+       js_invoke_function_void_li(j_calls->instance_ptr, 73, (int64_t)header_arr, height_conv);
 }
 static void LDKListen_JCalls_cloned(LDKListen* new_obj) {
        LDKListen_JCalls *j_calls = (LDKListen_JCalls*) new_obj->this_arg;
@@ -15050,24 +15845,24 @@ void transactions_confirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t
        
        FREE(txdata_var.data);
        int32_t height_conv = height;
-       js_invoke_function_void_lli(j_calls->instance_ptr, 73, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
+       js_invoke_function_void_lli(j_calls->instance_ptr, 74, (int64_t)header_arr, (int64_t)txdata_arr, height_conv);
 }
 void transaction_unconfirmed_LDKConfirm_jcall(const void* this_arg, const uint8_t (* txid)[32]) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray txid_arr = init_int8_tArray(32, __LINE__);
        memcpy(txid_arr->elems, *txid, 32);
-       js_invoke_function_void_l(j_calls->instance_ptr, 74, (int64_t)txid_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 75, (int64_t)txid_arr);
 }
 void best_block_updated_LDKConfirm_jcall(const void* this_arg, const uint8_t (* header)[80], uint32_t height) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        int8_tArray header_arr = init_int8_tArray(80, __LINE__);
        memcpy(header_arr->elems, *header, 80);
        int32_t height_conv = height;
-       js_invoke_function_void_li(j_calls->instance_ptr, 75, (int64_t)header_arr, height_conv);
+       js_invoke_function_void_li(j_calls->instance_ptr, 76, (int64_t)header_arr, height_conv);
 }
 LDKCVec_C3Tuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 76);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 77);
        LDKCVec_C3Tuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -15209,7 +16004,7 @@ static void LDKFutureCallback_JCalls_free(void* this_arg) {
 }
 void call_LDKFutureCallback_jcall(const void* this_arg) {
        LDKFutureCallback_JCalls *j_calls = (LDKFutureCallback_JCalls*) this_arg;
-       js_invoke_function_void_(j_calls->instance_ptr, 77);
+       js_invoke_function_void_(j_calls->instance_ptr, 78);
 }
 static void LDKFutureCallback_JCalls_cloned(LDKFutureCallback* new_obj) {
        LDKFutureCallback_JCalls *j_calls = (LDKFutureCallback_JCalls*) new_obj->this_arg;
@@ -15249,12 +16044,17 @@ static void LDKEventHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-void handle_event_LDKEventHandler_jcall(const void* this_arg, LDKEvent event) {
+LDKCResult_NoneReplayEventZ handle_event_LDKEventHandler_jcall(const void* this_arg, LDKEvent event) {
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) this_arg;
        LDKEvent *event_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
        *event_copy = event;
        int64_t event_ref = tag_ptr(event_copy, true);
-       js_invoke_function_void_l(j_calls->instance_ptr, 78, event_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 79, event_ref);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneReplayEventZ ret_conv = *(LDKCResult_NoneReplayEventZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
 }
 static void LDKEventHandler_JCalls_cloned(LDKEventHandler* new_obj) {
        LDKEventHandler_JCalls *j_calls = (LDKEventHandler_JCalls*) new_obj->this_arg;
@@ -15277,7 +16077,7 @@ uint64_t  CS_LDK_LDKEventHandler_new(int32_t o) {
        *res_ptr = LDKEventHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-void  CS_LDK_EventHandler_handle_event(int64_t this_arg, int64_t event) {
+int64_t  CS_LDK_EventHandler_handle_event(int64_t this_arg, int64_t event) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKEventHandler* this_arg_conv = (LDKEventHandler*)this_arg_ptr;
@@ -15285,7 +16085,9 @@ void  CS_LDK_EventHandler_handle_event(int64_t this_arg, int64_t event) {
        CHECK_ACCESS(event_ptr);
        LDKEvent event_conv = *(LDKEvent*)(event_ptr);
        event_conv = Event_clone((LDKEvent*)untag_ptr(event));
-       (this_arg_conv->handle_event)(this_arg_conv->this_arg, event_conv);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = (this_arg_conv->handle_event)(this_arg_conv->this_arg, event_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 typedef struct LDKEventsProvider_JCalls {
@@ -15302,7 +16104,7 @@ void process_pending_events_LDKEventsProvider_jcall(const void* this_arg, LDKEve
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) this_arg;
        LDKEventHandler* handler_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *handler_ret = handler;
-       js_invoke_function_void_l(j_calls->instance_ptr, 79, tag_ptr(handler_ret, true));
+       js_invoke_function_void_l(j_calls->instance_ptr, 80, tag_ptr(handler_ret, true));
 }
 static void LDKEventsProvider_JCalls_cloned(LDKEventsProvider* new_obj) {
        LDKEventsProvider_JCalls *j_calls = (LDKEventsProvider_JCalls*) new_obj->this_arg;
@@ -15367,7 +16169,7 @@ static void LDKMessageSendEventsProvider_JCalls_free(void* this_arg) {
 }
 LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsProvider_jcall(const void* this_arg) {
        LDKMessageSendEventsProvider_JCalls *j_calls = (LDKMessageSendEventsProvider_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 80);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 81);
        LDKCVec_MessageSendEventZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -15446,7 +16248,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = OpenChannel_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 81, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 82, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_open_channel_v2_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKOpenChannelV2 * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15457,7 +16259,7 @@ void handle_open_channel_v2_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = OpenChannelV2_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 82, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 83, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAcceptChannel * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15468,7 +16270,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = AcceptChannel_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 83, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 84, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_accept_channel_v2_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAcceptChannelV2 * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15479,7 +16281,7 @@ void handle_accept_channel_v2_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = AcceptChannelV2_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 84, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 85, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingCreated * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15490,7 +16292,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingCreated_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 85, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 86, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKFundingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15501,7 +16303,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingSigned_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 86, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 87, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelReady * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15512,7 +16314,7 @@ void handle_channel_ready_LDKChannelMessageHandler_jcall(const void* this_arg, L
        msg_var = ChannelReady_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 87, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 88, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKShutdown * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15523,7 +16325,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = Shutdown_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 88, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 89, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKClosingSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15534,7 +16336,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ClosingSigned_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 89, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 90, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_stfu_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKStfu * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15545,7 +16347,7 @@ void handle_stfu_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicK
        msg_var = Stfu_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 90, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 91, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_add_input_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAddInput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15556,7 +16358,7 @@ void handle_tx_add_input_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = TxAddInput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 91, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 92, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_add_output_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAddOutput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15567,7 +16369,7 @@ void handle_tx_add_output_LDKChannelMessageHandler_jcall(const void* this_arg, L
        msg_var = TxAddOutput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 92, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 93, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_remove_input_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxRemoveInput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15578,7 +16380,7 @@ void handle_tx_remove_input_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = TxRemoveInput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 93, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 94, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_remove_output_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxRemoveOutput * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15589,7 +16391,7 @@ void handle_tx_remove_output_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = TxRemoveOutput_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 94, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 95, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_complete_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxComplete * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15600,7 +16402,7 @@ void handle_tx_complete_LDKChannelMessageHandler_jcall(const void* this_arg, LDK
        msg_var = TxComplete_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 95, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 96, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxSignatures * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15611,7 +16413,7 @@ void handle_tx_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, L
        msg_var = TxSignatures_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 96, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 97, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_init_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxInitRbf * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15622,7 +16424,7 @@ void handle_tx_init_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDK
        msg_var = TxInitRbf_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 97, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 98, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_ack_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAckRbf * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15633,7 +16435,7 @@ void handle_tx_ack_rbf_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = TxAckRbf_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 98, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 99, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_tx_abort_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKTxAbort * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15644,7 +16446,7 @@ void handle_tx_abort_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = TxAbort_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 99, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 100, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateAddHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15655,7 +16457,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = UpdateAddHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 100, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 101, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFulfillHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15666,7 +16468,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = UpdateFulfillHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 101, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 102, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15677,7 +16479,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = UpdateFailHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 102, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 103, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFailMalformedHTLC * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15688,7 +16490,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        msg_var = UpdateFailMalformedHTLC_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 103, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 104, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKCommitmentSigned * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15699,7 +16501,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = CommitmentSigned_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 104, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 105, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKRevokeAndACK * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15710,7 +16512,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = RevokeAndACK_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 105, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 106, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKUpdateFee * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15721,7 +16523,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = UpdateFee_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 106, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 107, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKAnnouncementSignatures * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15732,13 +16534,13 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        msg_var = AnnouncementSignatures_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 107, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 108, (int64_t)their_node_id_arr, msg_ref);
 }
 void peer_disconnected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       js_invoke_function_void_l(j_calls->instance_ptr, 108, (int64_t)their_node_id_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 109, (int64_t)their_node_id_arr);
 }
 LDKCResult_NoneNoneZ peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInit * msg, bool inbound) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15750,7 +16552,7 @@ LDKCResult_NoneNoneZ peer_connected_LDKChannelMessageHandler_jcall(const void* t
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
        jboolean inbound_conv = inbound;
-       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 109, (int64_t)their_node_id_arr, msg_ref, inbound_conv);
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 110, (int64_t)their_node_id_arr, msg_ref, inbound_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -15766,7 +16568,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = ChannelReestablish_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 110, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 111, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKChannelUpdate * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15777,7 +16579,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ChannelUpdate_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 111, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 112, (int64_t)their_node_id_arr, msg_ref);
 }
 void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKErrorMessage * msg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
@@ -15788,11 +16590,11 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        msg_var = ErrorMessage_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 112, (int64_t)their_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 113, (int64_t)their_node_id_arr, msg_ref);
 }
 LDKNodeFeatures provided_node_features_LDKChannelMessageHandler_jcall(const void* this_arg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 113);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 114);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -15803,7 +16605,7 @@ LDKInitFeatures provided_init_features_LDKChannelMessageHandler_jcall(const void
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 114, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 115, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -15812,7 +16614,7 @@ LDKInitFeatures provided_init_features_LDKChannelMessageHandler_jcall(const void
 }
 LDKCOption_CVec_ThirtyTwoBytesZZ get_chain_hashes_LDKChannelMessageHandler_jcall(const void* this_arg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 115);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 116);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_CVec_ThirtyTwoBytesZZ ret_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(ret_ptr);
@@ -16399,35 +17201,42 @@ static void LDKOffersMessageHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCOption_OffersMessageZ handle_message_LDKOffersMessageHandler_jcall(const void* this_arg, LDKOffersMessage message) {
+LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ handle_message_LDKOffersMessageHandler_jcall(const void* this_arg, LDKOffersMessage message, LDKCOption_OffersContextZ context, LDKResponder responder) {
        LDKOffersMessageHandler_JCalls *j_calls = (LDKOffersMessageHandler_JCalls*) this_arg;
        LDKOffersMessage *message_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
        *message_copy = message;
        int64_t message_ref = tag_ptr(message_copy, true);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 116, message_ref);
+       LDKCOption_OffersContextZ *context_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
+       LDKResponder responder_var = responder;
+       int64_t responder_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+       responder_ref = tag_ptr(responder_var.inner, responder_var.is_owned);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 117, message_ref, context_ref, responder_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCOption_OffersMessageZ ret_conv = *(LDKCOption_OffersMessageZ*)(ret_ptr);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ ret_conv = *(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ release_pending_messages_LDKOffersMessageHandler_jcall(const void* this_arg) {
+LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ release_pending_messages_LDKOffersMessageHandler_jcall(const void* this_arg) {
        LDKOffersMessageHandler_JCalls *j_calls = (LDKOffersMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 117);
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ ret_constr;
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 118);
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ Elements");
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ Elements");
        else
                ret_constr.data = NULL;
        int64_t* ret_vals = ret->elems;
-       for (size_t x = 0; x < ret_constr.datalen; x++) {
-               int64_t ret_conv_49 = ret_vals[x];
-               void* ret_conv_49_ptr = untag_ptr(ret_conv_49);
-               CHECK_ACCESS(ret_conv_49_ptr);
-               LDKC3Tuple_OffersMessageDestinationBlindedPathZ ret_conv_49_conv = *(LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)(ret_conv_49_ptr);
-               FREE(untag_ptr(ret_conv_49));
-               ret_constr.data[x] = ret_conv_49_conv;
+       for (size_t w = 0; w < ret_constr.datalen; w++) {
+               int64_t ret_conv_48 = ret_vals[w];
+               void* ret_conv_48_ptr = untag_ptr(ret_conv_48);
+               CHECK_ACCESS(ret_conv_48_ptr);
+               LDKC2Tuple_OffersMessageMessageSendInstructionsZ ret_conv_48_conv = *(LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)(ret_conv_48_ptr);
+               FREE(untag_ptr(ret_conv_48));
+               ret_constr.data[w] = ret_conv_48_conv;
        }
        FREE(ret);
        return ret_constr;
@@ -16454,7 +17263,7 @@ uint64_t  CS_LDK_LDKOffersMessageHandler_new(int32_t o) {
        *res_ptr = LDKOffersMessageHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-int64_t  CS_LDK_OffersMessageHandler_handle_message(int64_t this_arg, int64_t message) {
+int64_t  CS_LDK_OffersMessageHandler_handle_message(int64_t this_arg, int64_t message, int64_t context, int64_t responder) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKOffersMessageHandler* this_arg_conv = (LDKOffersMessageHandler*)this_arg_ptr;
@@ -16462,8 +17271,17 @@ int64_t  CS_LDK_OffersMessageHandler_handle_message(int64_t this_arg, int64_t me
        CHECK_ACCESS(message_ptr);
        LDKOffersMessage message_conv = *(LDKOffersMessage*)(message_ptr);
        message_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(message));
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = (this_arg_conv->handle_message)(this_arg_conv->this_arg, message_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKCOption_OffersContextZ context_conv = *(LDKCOption_OffersContextZ*)(context_ptr);
+       context_conv = COption_OffersContextZ_clone((LDKCOption_OffersContextZ*)untag_ptr(context));
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = (this_arg_conv->handle_message)(this_arg_conv->this_arg, message_conv, context_conv, responder_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -16472,14 +17290,143 @@ int64_tArray  CS_LDK_OffersMessageHandler_release_pending_messages(int64_t this_
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKOffersMessageHandler* this_arg_conv = (LDKOffersMessageHandler*)this_arg_ptr;
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ ret_var = (this_arg_conv->release_pending_messages)(this_arg_conv->this_arg);
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ ret_var = (this_arg_conv->release_pending_messages)(this_arg_conv->this_arg);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t x = 0; x < ret_var.datalen; x++) {
-               LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv_49_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-               *ret_conv_49_conv = ret_var.data[x];
-               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
+       for (size_t w = 0; w < ret_var.datalen; w++) {
+               LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv_48_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+               *ret_conv_48_conv = ret_var.data[w];
+               ret_arr_ptr[w] = tag_ptr(ret_conv_48_conv, true);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+typedef struct LDKAsyncPaymentsMessageHandler_JCalls {
+       atomic_size_t refcnt;
+       uint32_t instance_ptr;
+} LDKAsyncPaymentsMessageHandler_JCalls;
+static void LDKAsyncPaymentsMessageHandler_JCalls_free(void* this_arg) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               FREE(j_calls);
+       }
+}
+LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ held_htlc_available_LDKAsyncPaymentsMessageHandler_jcall(const void* this_arg, LDKHeldHtlcAvailable message, LDKResponder responder) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       LDKHeldHtlcAvailable message_var = message;
+       int64_t message_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
+       message_ref = tag_ptr(message_var.inner, message_var.is_owned);
+       LDKResponder responder_var = responder;
+       int64_t responder_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+       responder_ref = tag_ptr(responder_var.inner, responder_var.is_owned);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 119, message_ref, responder_ref);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret_conv = *(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
+}
+void release_held_htlc_LDKAsyncPaymentsMessageHandler_jcall(const void* this_arg, LDKReleaseHeldHtlc message) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       LDKReleaseHeldHtlc message_var = message;
+       int64_t message_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
+       message_ref = tag_ptr(message_var.inner, message_var.is_owned);
+       js_invoke_function_void_l(j_calls->instance_ptr, 120, message_ref);
+}
+LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ release_pending_messages_LDKAsyncPaymentsMessageHandler_jcall(const void* this_arg) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) this_arg;
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 121);
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ ret_constr;
+       ret_constr.datalen = ret->arr_len;
+       if (ret_constr.datalen > 0)
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ Elements");
+       else
+               ret_constr.data = NULL;
+       int64_t* ret_vals = ret->elems;
+       for (size_t d = 0; d < ret_constr.datalen; d++) {
+               int64_t ret_conv_55 = ret_vals[d];
+               void* ret_conv_55_ptr = untag_ptr(ret_conv_55);
+               CHECK_ACCESS(ret_conv_55_ptr);
+               LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ ret_conv_55_conv = *(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)(ret_conv_55_ptr);
+               FREE(untag_ptr(ret_conv_55));
+               ret_constr.data[d] = ret_conv_55_conv;
+       }
+       FREE(ret);
+       return ret_constr;
+}
+static void LDKAsyncPaymentsMessageHandler_JCalls_cloned(LDKAsyncPaymentsMessageHandler* new_obj) {
+       LDKAsyncPaymentsMessageHandler_JCalls *j_calls = (LDKAsyncPaymentsMessageHandler_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKAsyncPaymentsMessageHandler LDKAsyncPaymentsMessageHandler_init (int64_t o) {
+       LDKAsyncPaymentsMessageHandler_JCalls *calls = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler_JCalls), "LDKAsyncPaymentsMessageHandler_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       calls->instance_ptr = o;
+
+       LDKAsyncPaymentsMessageHandler ret = {
+               .this_arg = (void*) calls,
+               .held_htlc_available = held_htlc_available_LDKAsyncPaymentsMessageHandler_jcall,
+               .release_held_htlc = release_held_htlc_LDKAsyncPaymentsMessageHandler_jcall,
+               .release_pending_messages = release_pending_messages_LDKAsyncPaymentsMessageHandler_jcall,
+               .free = LDKAsyncPaymentsMessageHandler_JCalls_free,
+       };
+       return ret;
+}
+uint64_t  CS_LDK_LDKAsyncPaymentsMessageHandler_new(int32_t o) {
+       LDKAsyncPaymentsMessageHandler *res_ptr = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler), "LDKAsyncPaymentsMessageHandler");
+       *res_ptr = LDKAsyncPaymentsMessageHandler_init(o);
+       return tag_ptr(res_ptr, true);
+}
+int64_t  CS_LDK_AsyncPaymentsMessageHandler_held_htlc_available(int64_t this_arg, int64_t message, int64_t responder) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKAsyncPaymentsMessageHandler* this_arg_conv = (LDKAsyncPaymentsMessageHandler*)this_arg_ptr;
+       LDKHeldHtlcAvailable message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = HeldHtlcAvailable_clone(&message_conv);
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = (this_arg_conv->held_htlc_available)(this_arg_conv->this_arg, message_conv, responder_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_AsyncPaymentsMessageHandler_release_held_htlc(int64_t this_arg, int64_t message) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKAsyncPaymentsMessageHandler* this_arg_conv = (LDKAsyncPaymentsMessageHandler*)this_arg_ptr;
+       LDKReleaseHeldHtlc message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = ReleaseHeldHtlc_clone(&message_conv);
+       (this_arg_conv->release_held_htlc)(this_arg_conv->this_arg, message_conv);
+}
+
+int64_tArray  CS_LDK_AsyncPaymentsMessageHandler_release_pending_messages(int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKAsyncPaymentsMessageHandler* this_arg_conv = (LDKAsyncPaymentsMessageHandler*)this_arg_ptr;
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ ret_var = (this_arg_conv->release_pending_messages)(this_arg_conv->this_arg);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t d = 0; d < ret_var.datalen; d++) {
+               LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv_55_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+               *ret_conv_55_conv = ret_var.data[d];
+               ret_arr_ptr[d] = tag_ptr(ret_conv_55_conv, true);
        }
        
        FREE(ret_var.data);
@@ -16499,7 +17446,7 @@ static void LDKNodeIdLookUp_JCalls_free(void* this_arg) {
 LDKPublicKey next_node_id_LDKNodeIdLookUp_jcall(const void* this_arg, uint64_t short_channel_id) {
        LDKNodeIdLookUp_JCalls *j_calls = (LDKNodeIdLookUp_JCalls*) this_arg;
        int64_t short_channel_id_conv = short_channel_id;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 118, short_channel_id_conv);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_l(j_calls->instance_ptr, 122, short_channel_id_conv);
        LDKPublicKey ret_ref;
        CHECK(ret->arr_len == 33);
        memcpy(ret_ref.compressed_form, ret->elems, 33); FREE(ret);
@@ -16553,7 +17500,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        msg_var = NodeAnnouncement_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 119, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 123, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -16567,7 +17514,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        msg_var = ChannelAnnouncement_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 120, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 124, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -16581,7 +17528,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        msg_var = ChannelUpdate_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 121, msg_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 125, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
@@ -16591,7 +17538,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
 LDKCOption_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel_announcement_LDKRoutingMessageHandler_jcall(const void* this_arg, uint64_t starting_point) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
        int64_t starting_point_conv = starting_point;
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 122, starting_point_conv);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 126, starting_point_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret_conv = *(LDKCOption_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ*)(ret_ptr);
@@ -16604,7 +17551,7 @@ LDKNodeAnnouncement get_next_node_announcement_LDKRoutingMessageHandler_jcall(co
        int64_t starting_point_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(starting_point_var);
        starting_point_ref = tag_ptr(starting_point_var.inner, starting_point_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 123, starting_point_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 127, starting_point_ref);
        LDKNodeAnnouncement ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16621,7 +17568,7 @@ LDKCResult_NoneNoneZ peer_connected_LDKRoutingMessageHandler_jcall(const void* t
        CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = tag_ptr(init_var.inner, init_var.is_owned);
        jboolean inbound_conv = inbound;
-       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 124, (int64_t)their_node_id_arr, init_ref, inbound_conv);
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 128, (int64_t)their_node_id_arr, init_ref, inbound_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -16636,7 +17583,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 125, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 129, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16651,7 +17598,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 126, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 130, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16666,7 +17613,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 127, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 131, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16681,7 +17628,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        int64_t msg_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 128, (int64_t)their_node_id_arr, msg_ref);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 132, (int64_t)their_node_id_arr, msg_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -16690,11 +17637,11 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
 }
 bool processing_queue_high_LDKRoutingMessageHandler_jcall(const void* this_arg) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
-       return js_invoke_function_b_(j_calls->instance_ptr, 129);
+       return js_invoke_function_b_(j_calls->instance_ptr, 133);
 }
 LDKNodeFeatures provided_node_features_LDKRoutingMessageHandler_jcall(const void* this_arg) {
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 130);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 134);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16705,7 +17652,7 @@ LDKInitFeatures provided_init_features_LDKRoutingMessageHandler_jcall(const void
        LDKRoutingMessageHandler_JCalls *j_calls = (LDKRoutingMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 131, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 135, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16944,27 +17891,6 @@ static void LDKOnionMessageHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ get_and_clear_connections_needed_LDKOnionMessageHandler_jcall(const void* this_arg) {
-       LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 132);
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ ret_constr;
-       ret_constr.datalen = ret->arr_len;
-       if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ Elements");
-       else
-               ret_constr.data = NULL;
-       int64_t* ret_vals = ret->elems;
-       for (size_t o = 0; o < ret_constr.datalen; o++) {
-               int64_t ret_conv_40 = ret_vals[o];
-               void* ret_conv_40_ptr = untag_ptr(ret_conv_40);
-               CHECK_ACCESS(ret_conv_40_ptr);
-               LDKC2Tuple_PublicKeyCVec_SocketAddressZZ ret_conv_40_conv = *(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)(ret_conv_40_ptr);
-               FREE(untag_ptr(ret_conv_40));
-               ret_constr.data[o] = ret_conv_40_conv;
-       }
-       FREE(ret);
-       return ret_constr;
-}
 void handle_onion_message_LDKOnionMessageHandler_jcall(const void* this_arg, LDKPublicKey peer_node_id, const LDKOnionMessage * msg) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
@@ -16974,13 +17900,13 @@ void handle_onion_message_LDKOnionMessageHandler_jcall(const void* this_arg, LDK
        msg_var = OnionMessage_clone(&msg_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
-       js_invoke_function_void_ll(j_calls->instance_ptr, 133, (int64_t)peer_node_id_arr, msg_ref);
+       js_invoke_function_void_ll(j_calls->instance_ptr, 136, (int64_t)peer_node_id_arr, msg_ref);
 }
 LDKOnionMessage next_onion_message_for_peer_LDKOnionMessageHandler_jcall(const void* this_arg, LDKPublicKey peer_node_id) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray peer_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(peer_node_id_arr->elems, peer_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 134, (int64_t)peer_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 137, (int64_t)peer_node_id_arr);
        LDKOnionMessage ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -16997,7 +17923,7 @@ LDKCResult_NoneNoneZ peer_connected_LDKOnionMessageHandler_jcall(const void* thi
        CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = tag_ptr(init_var.inner, init_var.is_owned);
        jboolean inbound_conv = inbound;
-       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 135, (int64_t)their_node_id_arr, init_ref, inbound_conv);
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 138, (int64_t)their_node_id_arr, init_ref, inbound_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
@@ -17008,15 +17934,15 @@ void peer_disconnected_LDKOnionMessageHandler_jcall(const void* this_arg, LDKPub
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       js_invoke_function_void_l(j_calls->instance_ptr, 136, (int64_t)their_node_id_arr);
+       js_invoke_function_void_l(j_calls->instance_ptr, 139, (int64_t)their_node_id_arr);
 }
 void timer_tick_occurred_LDKOnionMessageHandler_jcall(const void* this_arg) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
-       js_invoke_function_void_(j_calls->instance_ptr, 137);
+       js_invoke_function_void_(j_calls->instance_ptr, 140);
 }
 LDKNodeFeatures provided_node_features_LDKOnionMessageHandler_jcall(const void* this_arg) {
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 138);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 141);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17027,7 +17953,7 @@ LDKInitFeatures provided_init_features_LDKOnionMessageHandler_jcall(const void*
        LDKOnionMessageHandler_JCalls *j_calls = (LDKOnionMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 139, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 142, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17045,7 +17971,6 @@ static inline LDKOnionMessageHandler LDKOnionMessageHandler_init (int64_t o) {
 
        LDKOnionMessageHandler ret = {
                .this_arg = (void*) calls,
-               .get_and_clear_connections_needed = get_and_clear_connections_needed_LDKOnionMessageHandler_jcall,
                .handle_onion_message = handle_onion_message_LDKOnionMessageHandler_jcall,
                .next_onion_message_for_peer = next_onion_message_for_peer_LDKOnionMessageHandler_jcall,
                .peer_connected = peer_connected_LDKOnionMessageHandler_jcall,
@@ -17062,24 +17987,6 @@ uint64_t  CS_LDK_LDKOnionMessageHandler_new(int32_t o) {
        *res_ptr = LDKOnionMessageHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-int64_tArray  CS_LDK_OnionMessageHandler_get_and_clear_connections_needed(int64_t this_arg) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKOnionMessageHandler* this_arg_conv = (LDKOnionMessageHandler*)this_arg_ptr;
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ ret_var = (this_arg_conv->get_and_clear_connections_needed)(this_arg_conv->this_arg);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t o = 0; o < ret_var.datalen; o++) {
-               LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-               *ret_conv_40_conv = ret_var.data[o];
-               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
 void  CS_LDK_OnionMessageHandler_handle_onion_message(int64_t this_arg, int8_tArray peer_node_id, int64_t msg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -17184,7 +18091,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        LDKu8slice buffer_var = buffer;
        int8_tArray buffer_arr = init_int8_tArray(buffer_var.datalen, __LINE__);
        memcpy(buffer_arr->elems, buffer_var.data, buffer_var.datalen);
-       uint64_t ret = js_invoke_function_l_sl(j_calls->instance_ptr, 140, message_type_conv, (int64_t)buffer_arr);
+       uint64_t ret = js_invoke_function_l_sl(j_calls->instance_ptr, 143, message_type_conv, (int64_t)buffer_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
@@ -17242,7 +18149,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        *msg_ret = msg;
        int8_tArray sender_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(sender_node_id_arr->elems, sender_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 141, tag_ptr(msg_ret, true), (int64_t)sender_node_id_arr);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 144, tag_ptr(msg_ret, true), (int64_t)sender_node_id_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
@@ -17251,7 +18158,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
 }
 LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandler_jcall(const void* this_arg) {
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 142);
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 145);
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
@@ -17270,9 +18177,32 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandle
        FREE(ret);
        return ret_constr;
 }
+void peer_disconnected_LDKCustomMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id) {
+       LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
+       int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
+       js_invoke_function_void_l(j_calls->instance_ptr, 146, (int64_t)their_node_id_arr);
+}
+LDKCResult_NoneNoneZ peer_connected_LDKCustomMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, const LDKInit * msg, bool inbound) {
+       LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
+       int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
+       memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
+       LDKInit msg_var = *msg;
+       int64_t msg_ref = 0;
+       msg_var = Init_clone(&msg_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
+       msg_ref = tag_ptr(msg_var.inner, msg_var.is_owned);
+       jboolean inbound_conv = inbound;
+       uint64_t ret = js_invoke_function_l_llb(j_calls->instance_ptr, 147, (int64_t)their_node_id_arr, msg_ref, inbound_conv);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       return ret_conv;
+}
 LDKNodeFeatures provided_node_features_LDKCustomMessageHandler_jcall(const void* this_arg) {
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 143);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 148);
        LDKNodeFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17283,7 +18213,7 @@ LDKInitFeatures provided_init_features_LDKCustomMessageHandler_jcall(const void*
        LDKCustomMessageHandler_JCalls *j_calls = (LDKCustomMessageHandler_JCalls*) this_arg;
        int8_tArray their_node_id_arr = init_int8_tArray(33, __LINE__);
        memcpy(their_node_id_arr->elems, their_node_id.compressed_form, 33);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 144, (int64_t)their_node_id_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 149, (int64_t)their_node_id_arr);
        LDKInitFeatures ret_conv;
        ret_conv.inner = untag_ptr(ret);
        ret_conv.is_owned = ptr_is_owned(ret);
@@ -17304,6 +18234,8 @@ static inline LDKCustomMessageHandler LDKCustomMessageHandler_init (int64_t o, i
                .this_arg = (void*) calls,
                .handle_custom_message = handle_custom_message_LDKCustomMessageHandler_jcall,
                .get_and_clear_pending_msg = get_and_clear_pending_msg_LDKCustomMessageHandler_jcall,
+               .peer_disconnected = peer_disconnected_LDKCustomMessageHandler_jcall,
+               .peer_connected = peer_connected_LDKCustomMessageHandler_jcall,
                .provided_node_features = provided_node_features_LDKCustomMessageHandler_jcall,
                .provided_init_features = provided_init_features_LDKCustomMessageHandler_jcall,
                .free = LDKCustomMessageHandler_JCalls_free,
@@ -17354,6 +18286,33 @@ int64_tArray  CS_LDK_CustomMessageHandler_get_and_clear_pending_msg(int64_t this
        return ret_arr;
 }
 
+void  CS_LDK_CustomMessageHandler_peer_disconnected(int64_t this_arg, int8_tArray their_node_id) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKCustomMessageHandler* this_arg_conv = (LDKCustomMessageHandler*)this_arg_ptr;
+       LDKPublicKey their_node_id_ref;
+       CHECK(their_node_id->arr_len == 33);
+       memcpy(their_node_id_ref.compressed_form, their_node_id->elems, 33); FREE(their_node_id);
+       (this_arg_conv->peer_disconnected)(this_arg_conv->this_arg, their_node_id_ref);
+}
+
+int64_t  CS_LDK_CustomMessageHandler_peer_connected(int64_t this_arg, int8_tArray their_node_id, int64_t msg, jboolean inbound) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKCustomMessageHandler* this_arg_conv = (LDKCustomMessageHandler*)this_arg_ptr;
+       LDKPublicKey their_node_id_ref;
+       CHECK(their_node_id->arr_len == 33);
+       memcpy(their_node_id_ref.compressed_form, their_node_id->elems, 33); FREE(their_node_id);
+       LDKInit msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = (this_arg_conv->peer_connected)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv, inbound);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CustomMessageHandler_provided_node_features(int64_t this_arg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -17389,14 +18348,21 @@ static void LDKCustomOnionMessageHandler_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCOption_OnionMessageContentsZ handle_custom_message_LDKCustomOnionMessageHandler_jcall(const void* this_arg, LDKOnionMessageContents msg) {
+LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ handle_custom_message_LDKCustomOnionMessageHandler_jcall(const void* this_arg, LDKOnionMessageContents message, LDKCOption_CVec_u8ZZ context, LDKResponder responder) {
        LDKCustomOnionMessageHandler_JCalls *j_calls = (LDKCustomOnionMessageHandler_JCalls*) this_arg;
-       LDKOnionMessageContents* msg_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *msg_ret = msg;
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 145, tag_ptr(msg_ret, true));
+       LDKOnionMessageContents* message_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *message_ret = message;
+       LDKCOption_CVec_u8ZZ *context_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *context_copy = context;
+       int64_t context_ref = tag_ptr(context_copy, true);
+       LDKResponder responder_var = responder;
+       int64_t responder_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_var);
+       responder_ref = tag_ptr(responder_var.inner, responder_var.is_owned);
+       uint64_t ret = js_invoke_function_l_lll(j_calls->instance_ptr, 150, tag_ptr(message_ret, true), context_ref, responder_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCOption_OnionMessageContentsZ ret_conv = *(LDKCOption_OnionMessageContentsZ*)(ret_ptr);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ ret_conv = *(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
@@ -17406,30 +18372,30 @@ LDKCResult_COption_OnionMessageContentsZDecodeErrorZ read_custom_message_LDKCust
        LDKu8slice buffer_var = buffer;
        int8_tArray buffer_arr = init_int8_tArray(buffer_var.datalen, __LINE__);
        memcpy(buffer_arr->elems, buffer_var.data, buffer_var.datalen);
-       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 146, message_type_conv, (int64_t)buffer_arr);
+       uint64_t ret = js_invoke_function_l_ll(j_calls->instance_ptr, 151, message_type_conv, (int64_t)buffer_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_OnionMessageContentsZDecodeErrorZ ret_conv = *(LDKCResult_COption_OnionMessageContentsZDecodeErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        return ret_conv;
 }
-LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ release_pending_custom_messages_LDKCustomOnionMessageHandler_jcall(const void* this_arg) {
+LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ release_pending_custom_messages_LDKCustomOnionMessageHandler_jcall(const void* this_arg) {
        LDKCustomOnionMessageHandler_JCalls *j_calls = (LDKCustomOnionMessageHandler_JCalls*) this_arg;
-       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 147);
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ ret_constr;
+       int64_tArray ret = (int64_tArray)js_invoke_function_l_(j_calls->instance_ptr, 152);
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ ret_constr;
        ret_constr.datalen = ret->arr_len;
        if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ Elements");
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ Elements");
        else
                ret_constr.data = NULL;
        int64_t* ret_vals = ret->elems;
-       for (size_t e = 0; e < ret_constr.datalen; e++) {
-               int64_t ret_conv_56 = ret_vals[e];
-               void* ret_conv_56_ptr = untag_ptr(ret_conv_56);
-               CHECK_ACCESS(ret_conv_56_ptr);
-               LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ ret_conv_56_conv = *(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)(ret_conv_56_ptr);
-               FREE(untag_ptr(ret_conv_56));
-               ret_constr.data[e] = ret_conv_56_conv;
+       for (size_t d = 0; d < ret_constr.datalen; d++) {
+               int64_t ret_conv_55 = ret_vals[d];
+               void* ret_conv_55_ptr = untag_ptr(ret_conv_55);
+               CHECK_ACCESS(ret_conv_55_ptr);
+               LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ ret_conv_55_conv = *(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)(ret_conv_55_ptr);
+               FREE(untag_ptr(ret_conv_55));
+               ret_constr.data[d] = ret_conv_55_conv;
        }
        FREE(ret);
        return ret_constr;
@@ -17457,19 +18423,28 @@ uint64_t  CS_LDK_LDKCustomOnionMessageHandler_new(int32_t o) {
        *res_ptr = LDKCustomOnionMessageHandler_init(o);
        return tag_ptr(res_ptr, true);
 }
-int64_t  CS_LDK_CustomOnionMessageHandler_handle_custom_message(int64_t this_arg, int64_t msg) {
+int64_t  CS_LDK_CustomOnionMessageHandler_handle_custom_message(int64_t this_arg, int64_t message, int64_t context, int64_t responder) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKCustomOnionMessageHandler* this_arg_conv = (LDKCustomOnionMessageHandler*)this_arg_ptr;
-       void* msg_ptr = untag_ptr(msg);
-       CHECK_ACCESS(msg_ptr);
-       LDKOnionMessageContents msg_conv = *(LDKOnionMessageContents*)(msg_ptr);
-       if (msg_conv.free == LDKOnionMessageContents_JCalls_free) {
+       void* message_ptr = untag_ptr(message);
+       CHECK_ACCESS(message_ptr);
+       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
+       if (message_conv.free == LDKOnionMessageContents_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&msg_conv);
+               LDKOnionMessageContents_JCalls_cloned(&message_conv);
        }
-       LDKCOption_OnionMessageContentsZ *ret_copy = MALLOC(sizeof(LDKCOption_OnionMessageContentsZ), "LDKCOption_OnionMessageContentsZ");
-       *ret_copy = (this_arg_conv->handle_custom_message)(this_arg_conv->this_arg, msg_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKCOption_CVec_u8ZZ context_conv = *(LDKCOption_CVec_u8ZZ*)(context_ptr);
+       context_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(context));
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = (this_arg_conv->handle_custom_message)(this_arg_conv->this_arg, message_conv, context_conv, responder_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -17491,14 +18466,14 @@ int64_tArray  CS_LDK_CustomOnionMessageHandler_release_pending_custom_messages(i
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKCustomOnionMessageHandler* this_arg_conv = (LDKCustomOnionMessageHandler*)this_arg_ptr;
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ ret_var = (this_arg_conv->release_pending_custom_messages)(this_arg_conv->this_arg);
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ ret_var = (this_arg_conv->release_pending_custom_messages)(this_arg_conv->this_arg);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t e = 0; e < ret_var.datalen; e++) {
-               LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv_56_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-               *ret_conv_56_conv = ret_var.data[e];
-               ret_arr_ptr[e] = tag_ptr(ret_conv_56_conv, true);
+       for (size_t d = 0; d < ret_var.datalen; d++) {
+               LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv_55_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+               *ret_conv_55_conv = ret_var.data[d];
+               ret_arr_ptr[d] = tag_ptr(ret_conv_55_conv, true);
        }
        
        FREE(ret_var.data);
@@ -17521,21 +18496,21 @@ uintptr_t send_data_LDKSocketDescriptor_jcall(void* this_arg, LDKu8slice data, b
        int8_tArray data_arr = init_int8_tArray(data_var.datalen, __LINE__);
        memcpy(data_arr->elems, data_var.data, data_var.datalen);
        jboolean resume_read_conv = resume_read;
-       return js_invoke_function_l_lb(j_calls->instance_ptr, 148, (int64_t)data_arr, resume_read_conv);
+       return js_invoke_function_l_lb(j_calls->instance_ptr, 153, (int64_t)data_arr, resume_read_conv);
 }
 void disconnect_socket_LDKSocketDescriptor_jcall(void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       js_invoke_function_void_(j_calls->instance_ptr, 149);
+       js_invoke_function_void_(j_calls->instance_ptr, 154);
 }
 bool eq_LDKSocketDescriptor_jcall(const void* this_arg, const LDKSocketDescriptor * other_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
        LDKSocketDescriptor *other_arg_clone = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
        *other_arg_clone = SocketDescriptor_clone(other_arg);
-       return js_invoke_function_b_l(j_calls->instance_ptr, 150, tag_ptr(other_arg_clone, true));
+       return js_invoke_function_b_l(j_calls->instance_ptr, 155, tag_ptr(other_arg_clone, true));
 }
 uint64_t hash_LDKSocketDescriptor_jcall(const void* this_arg) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) this_arg;
-       return js_invoke_function_l_(j_calls->instance_ptr, 151);
+       return js_invoke_function_l_(j_calls->instance_ptr, 156);
 }
 static void LDKSocketDescriptor_JCalls_cloned(LDKSocketDescriptor* new_obj) {
        LDKSocketDescriptor_JCalls *j_calls = (LDKSocketDescriptor_JCalls*) new_obj->this_arg;
@@ -17589,6 +18564,22 @@ int64_t  CS_LDK_SocketDescriptor_hash(int64_t this_arg) {
        return ret_conv;
 }
 
+uint32_t CS_LDK_LDKBolt12PaymentError_ty_from_ptr(int64_t ptr) {
+       LDKBolt12PaymentError *obj = (LDKBolt12PaymentError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKBolt12PaymentError_UnexpectedInvoice: return 0;
+               case LDKBolt12PaymentError_DuplicateInvoice: return 1;
+               case LDKBolt12PaymentError_UnknownRequiredFeatures: return 2;
+               case LDKBolt12PaymentError_SendingFailed: return 3;
+               default: abort();
+       }
+}
+int32_t CS_LDK_LDKBolt12PaymentError_SendingFailed_get_sending_failed(int64_t ptr) {
+       LDKBolt12PaymentError *obj = (LDKBolt12PaymentError*)untag_ptr(ptr);
+       CHECK(obj->tag == LDKBolt12PaymentError_SendingFailed);
+       int32_t sending_failed_conv = LDKRetryableSendFailure_to_cs(obj->sending_failed);
+       return sending_failed_conv;
+}
 typedef struct LDKSignBolt12InvoiceFn_JCalls {
        atomic_size_t refcnt;
        uint32_t instance_ptr;
@@ -17606,7 +18597,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_invoice_LDKSignBolt12InvoiceFn_jcall(const
        message_var = UnsignedBolt12Invoice_clone(&message_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
        message_ref = tag_ptr(message_var.inner, message_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 152, message_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 157, message_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -17665,7 +18656,7 @@ LDKCResult_SchnorrSignatureNoneZ sign_invoice_request_LDKSignInvoiceRequestFn_jc
        message_var = UnsignedInvoiceRequest_clone(&message_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(message_var);
        message_ref = tag_ptr(message_var.inner, message_var.is_owned);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 153, message_ref);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 158, message_ref);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
@@ -17774,15 +18765,16 @@ uint32_t CS_LDK_LDKPayee_ty_from_ptr(int64_t ptr) {
 int64_tArray CS_LDK_LDKPayee_Blinded_get_route_hints(int64_t ptr) {
        LDKPayee *obj = (LDKPayee*)untag_ptr(ptr);
        CHECK(obj->tag == LDKPayee_Blinded);
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_var = obj->blinded.route_hints;
+       LDKCVec_BlindedPaymentPathZ route_hints_var = obj->blinded.route_hints;
                        int64_tArray route_hints_arr = NULL;
                        route_hints_arr = init_int64_tArray(route_hints_var.datalen, __LINE__);
                        int64_t *route_hints_arr_ptr = (int64_t*)(((uint8_t*)route_hints_arr) + 8);
-                       for (size_t l = 0; l < route_hints_var.datalen; l++) {
-                               LDKC2Tuple_BlindedPayInfoBlindedPathZ* route_hints_conv_37_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-                               *route_hints_conv_37_conv = route_hints_var.data[l];
-                               *route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone(route_hints_conv_37_conv);
-                               route_hints_arr_ptr[l] = tag_ptr(route_hints_conv_37_conv, true);
+                       for (size_t u = 0; u < route_hints_var.datalen; u++) {
+                               LDKBlindedPaymentPath route_hints_conv_20_var = route_hints_var.data[u];
+                               int64_t route_hints_conv_20_ref = 0;
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_20_var);
+                               route_hints_conv_20_ref = tag_ptr(route_hints_conv_20_var.inner, false);
+                               route_hints_arr_ptr[u] = route_hints_conv_20_ref;
                        }
                        
        return route_hints_arr;
@@ -17849,7 +18841,7 @@ static void LDKScore_JCalls_free(void* this_arg) {
 }
 LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
        LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
-       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 154);
+       int8_tArray ret = (int8_tArray)js_invoke_function_l_(j_calls->instance_ptr, 159);
        LDKCVec_u8Z ret_ref;
        ret_ref.datalen = ret->arr_len;
        ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -17960,7 +18952,7 @@ LDKCResult_CoinSelectionNoneZ select_confirmed_utxos_LDKCoinSelectionSource_jcal
        
        FREE(must_pay_to_var.data);
        int32_t target_feerate_sat_per_1000_weight_conv = target_feerate_sat_per_1000_weight;
-       uint64_t ret = js_invoke_function_l_llli(j_calls->instance_ptr, 155, (int64_t)claim_id_arr, (int64_t)must_spend_arr, (int64_t)must_pay_to_arr, target_feerate_sat_per_1000_weight_conv);
+       uint64_t ret = js_invoke_function_l_llli(j_calls->instance_ptr, 160, (int64_t)claim_id_arr, (int64_t)must_spend_arr, (int64_t)must_pay_to_arr, target_feerate_sat_per_1000_weight_conv);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CoinSelectionNoneZ ret_conv = *(LDKCResult_CoinSelectionNoneZ*)(ret_ptr);
@@ -17973,7 +18965,7 @@ LDKCResult_TransactionNoneZ sign_psbt_LDKCoinSelectionSource_jcall(const void* t
        int8_tArray psbt_arr = init_int8_tArray(psbt_var.datalen, __LINE__);
        memcpy(psbt_arr->elems, psbt_var.data, psbt_var.datalen);
        CVec_u8Z_free(psbt_var);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 156, (int64_t)psbt_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 161, (int64_t)psbt_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TransactionNoneZ ret_conv = *(LDKCResult_TransactionNoneZ*)(ret_ptr);
@@ -18072,7 +19064,7 @@ static void LDKWalletSource_JCalls_free(void* this_arg) {
 }
 LDKCResult_CVec_UtxoZNoneZ list_confirmed_utxos_LDKWalletSource_jcall(const void* this_arg) {
        LDKWalletSource_JCalls *j_calls = (LDKWalletSource_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 157);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 162);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_UtxoZNoneZ ret_conv = *(LDKCResult_CVec_UtxoZNoneZ*)(ret_ptr);
@@ -18081,7 +19073,7 @@ LDKCResult_CVec_UtxoZNoneZ list_confirmed_utxos_LDKWalletSource_jcall(const void
 }
 LDKCResult_CVec_u8ZNoneZ get_change_script_LDKWalletSource_jcall(const void* this_arg) {
        LDKWalletSource_JCalls *j_calls = (LDKWalletSource_JCalls*) this_arg;
-       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 158);
+       uint64_t ret = js_invoke_function_l_(j_calls->instance_ptr, 163);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
@@ -18094,7 +19086,7 @@ LDKCResult_TransactionNoneZ sign_psbt_LDKWalletSource_jcall(const void* this_arg
        int8_tArray psbt_arr = init_int8_tArray(psbt_var.datalen, __LINE__);
        memcpy(psbt_arr->elems, psbt_var.data, psbt_var.datalen);
        CVec_u8Z_free(psbt_var);
-       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 159, (int64_t)psbt_arr);
+       uint64_t ret = js_invoke_function_l_l(j_calls->instance_ptr, 164, (int64_t)psbt_arr);
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TransactionNoneZ ret_conv = *(LDKCResult_TransactionNoneZ*)(ret_ptr);
@@ -18649,24 +19641,78 @@ int64_t  CS_LDK_COption_u64Z_clone(int64_t orig) {
        return ret_ref;
 }
 
-void  CS_LDK_CVec_BlindedPathZ_free(int64_tArray _res) {
-       LDKCVec_BlindedPathZ _res_constr;
+void  CS_LDK_CVec_BlindedMessagePathZ_free(int64_tArray _res) {
+       LDKCVec_BlindedMessagePathZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKBlindedPath), "LDKCVec_BlindedPathZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKBlindedMessagePath), "LDKCVec_BlindedMessagePathZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t n = 0; n < _res_constr.datalen; n++) {
-               int64_t _res_conv_13 = _res_vals[n];
-               LDKBlindedPath _res_conv_13_conv;
-               _res_conv_13_conv.inner = untag_ptr(_res_conv_13);
-               _res_conv_13_conv.is_owned = ptr_is_owned(_res_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_13_conv);
-               _res_constr.data[n] = _res_conv_13_conv;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKBlindedMessagePath _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
        }
        FREE(_res);
-       CVec_BlindedPathZ_free(_res_constr);
+       CVec_BlindedMessagePathZ_free(_res_constr);
+}
+
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_ok(int64_t o) {
+       LDKRefund o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Refund_clone(&o_conv);
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_RefundDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_RefundDecodeErrorZ* o_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_RefundDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_RefundDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_RefundDecodeErrorZ _res_conv = *(LDKCResult_RefundDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_RefundDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_RefundDecodeErrorZ_clone_ptr(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_RefundDecodeErrorZ* arg_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_RefundDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_RefundDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_RefundDecodeErrorZ* orig_conv = (LDKCResult_RefundDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = CResult_RefundDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 int64_t  CS_LDK_CResult_RefundBolt12ParseErrorZ_ok(int64_t o) {
@@ -19270,6 +20316,23 @@ int64_t  CS_LDK_CResult_SchnorrSignatureNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+void  CS_LDK_CVec_StrZ_free(ptrArray _res) {
+       LDKCVec_StrZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
+       else
+               _res_constr.data = NULL;
+       jstring* _res_vals = (void*) _res->elems;
+       for (size_t i = 0; i < _res_constr.datalen; i++) {
+               jstring _res_conv_8 = _res_vals[i];
+               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
+               _res_constr.data[i] = dummy;
+       }
+       FREE(_res);
+       CVec_StrZ_free(_res_constr);
+}
+
 void  CS_LDK_CVec_ThirtyTwoBytesZ_free(ptrArray _res) {
        LDKCVec_ThirtyTwoBytesZ _res_constr;
        _res_constr.datalen = _res->arr_len;
@@ -19489,57 +20552,57 @@ int64_t  CS_LDK_CResult_ThirtyTwoBytesNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_ok(int64_t o) {
-       LDKBlindedPayInfo o_conv;
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_ok(int64_t o) {
+       LDKBolt12Invoice o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = BlindedPayInfo_clone(&o_conv);
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_ok(o_conv);
+       o_conv = Bolt12Invoice_clone(&o_conv);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_err(e_conv);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* o_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_BlindedPayInfoDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* o_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_BlindedPayInfoDecodeErrorZ _res_conv = *(LDKCResult_BlindedPayInfoDecodeErrorZ*)(_res_ptr);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ _res_conv = *(LDKCResult_Bolt12InvoiceDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_BlindedPayInfoDecodeErrorZ_free(_res_conv);
+       CResult_Bolt12InvoiceDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* arg_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* arg_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_BlindedPayInfoDecodeErrorZ* orig_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* orig_conv = (LDKCResult_Bolt12InvoiceDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = CResult_Bolt12InvoiceDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -19981,51 +21044,6 @@ int64_t  CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_NoneNoneZ_ok() {
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_ok();
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_NoneNoneZ_err() {
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_NoneNoneZ_is_ok(int64_t o) {
-       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_NoneNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_NoneNoneZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_NoneNoneZ _res_conv = *(LDKCResult_NoneNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_NoneNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_NoneNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_NoneNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_NoneNoneZ_clone(int64_t orig) {
-       LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)untag_ptr(orig);
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = CResult_NoneNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_CResult_PublicKeyNoneZ_ok(int8_tArray o) {
        LDKPublicKey o_ref;
        CHECK(o->arr_len == 33);
@@ -20074,6 +21092,99 @@ int64_t  CS_LDK_CResult_PublicKeyNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult__u832NoneZ_ok(int8_tArray o) {
+       LDKThirtyTwoBytes o_ref;
+       CHECK(o->arr_len == 32);
+       memcpy(o_ref.data, o->elems, 32); FREE(o);
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult__u832NoneZ_err() {
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult__u832NoneZ_is_ok(int64_t o) {
+       LDKCResult__u832NoneZ* o_conv = (LDKCResult__u832NoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult__u832NoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult__u832NoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult__u832NoneZ _res_conv = *(LDKCResult__u832NoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult__u832NoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult__u832NoneZ_clone_ptr(LDKCResult__u832NoneZ *NONNULL_PTR arg) {
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult__u832NoneZ_clone_ptr(int64_t arg) {
+       LDKCResult__u832NoneZ* arg_conv = (LDKCResult__u832NoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult__u832NoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult__u832NoneZ_clone(int64_t orig) {
+       LDKCResult__u832NoneZ* orig_conv = (LDKCResult__u832NoneZ*)untag_ptr(orig);
+       LDKCResult__u832NoneZ* ret_conv = MALLOC(sizeof(LDKCResult__u832NoneZ), "LDKCResult__u832NoneZ");
+       *ret_conv = CResult__u832NoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NoneNoneZ_ok() {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_ok();
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NoneNoneZ_err() {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_NoneNoneZ_is_ok(int64_t o) {
+       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_NoneNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NoneNoneZ _res_conv = *(LDKCResult_NoneNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_NoneNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_NoneNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_NoneNoneZ_clone(int64_t orig) {
+       LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)untag_ptr(orig);
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_COption_BigEndianScalarZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -20121,23 +21232,6 @@ int64_t  CS_LDK_COption_BigEndianScalarZ_clone(int64_t orig) {
        return ret_ref;
 }
 
-void  CS_LDK_CVec_U5Z_free(ptrArray _res) {
-       LDKCVec_U5Z _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKU5), "LDKCVec_U5Z Elements");
-       else
-               _res_constr.data = NULL;
-       int8_t* _res_vals = (void*) _res->elems;
-       for (size_t h = 0; h < _res_constr.datalen; h++) {
-               int8_t _res_conv_7 = _res_vals[h];
-               
-               _res_constr.data[h] = (LDKU5){ ._0 = _res_conv_7 };
-       }
-       FREE(_res);
-       CVec_U5Z_free(_res_constr);
-}
-
 int64_t  CS_LDK_CResult_RecoverableSignatureNoneZ_ok(int8_tArray o) {
        LDKRecoverableSignature o_ref;
        CHECK(o->arr_len == 68);
@@ -20284,59 +21378,59 @@ int64_t  CS_LDK_CResult_TransactionNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(int64_t o) {
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_ok(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKWriteableEcdsaChannelSigner o_conv = *(LDKWriteableEcdsaChannelSigner*)(o_ptr);
-       if (o_conv.free == LDKWriteableEcdsaChannelSigner_JCalls_free) {
+       LDKEcdsaChannelSigner o_conv = *(LDKEcdsaChannelSigner*)(o_ptr);
+       if (o_conv.free == LDKEcdsaChannelSigner_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKWriteableEcdsaChannelSigner_JCalls_cloned(&o_conv);
+               LDKEcdsaChannelSigner_JCalls_cloned(&o_conv);
        }
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(o_conv);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(e_conv);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* o_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* o_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ _res_conv = *(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)(_res_ptr);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ _res_conv = *(LDKCResult_EcdsaChannelSignerDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(_res_conv);
+       CResult_EcdsaChannelSignerDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* arg_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* arg_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* orig_conv = (LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ), "LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ");
-       *ret_conv = CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* orig_conv = (LDKCResult_EcdsaChannelSignerDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_EcdsaChannelSignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_EcdsaChannelSignerDecodeErrorZ), "LDKCResult_EcdsaChannelSignerDecodeErrorZ");
+       *ret_conv = CResult_EcdsaChannelSignerDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -20824,6 +21918,101 @@ int64_t  CS_LDK_CResult_NoneIOErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+static inline uint64_t C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR arg) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(int64_t arg) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* arg_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(arg);
+       int64_t ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(int64_t orig) {
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* orig_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(orig);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(int8_tArray a, int64_t b, int64_t c) {
+       LDKThirtyTwoBytes a_ref;
+       CHECK(a->arr_len == 32);
+       memcpy(a_ref.data, a->elems, 32); FREE(a);
+       LDKRecipientOnionFields b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = RecipientOnionFields_clone(&b_conv);
+       LDKRouteParameters c_conv;
+       c_conv.inner = untag_ptr(c);
+       c_conv.is_owned = ptr_is_owned(c);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
+       c_conv = RouteParameters_clone(&c_conv);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
+       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(a_ref, b_conv, c_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ _res_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(_res_conv);
+}
+
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ o_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(o_ptr);
+       o_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone((LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(o));
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err() {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(int64_t o) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* o_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ _res_conv = *(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* arg_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(int64_t orig) {
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* orig_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(orig);
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 void  CS_LDK_CVec_ChannelDetailsZ_free(int64_tArray _res) {
        LDKCVec_ChannelDetailsZ _res_constr;
        _res_constr.datalen = _res->arr_len;
@@ -20899,127 +22088,85 @@ int64_t  CS_LDK_CResult_RouteLightningErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR arg) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(int64_t arg) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* arg_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_clone(int64_t orig) {
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* orig_conv = (LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(orig);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_new(int64_t a, int64_t b) {
-       LDKBlindedPayInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPayInfo_clone(&a_conv);
-       LDKBlindedPath b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv = BlindedPath_clone(&b_conv);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
-       *ret_conv = C2Tuple_BlindedPayInfoBlindedPathZ_new(a_conv, b_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ _res_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       C2Tuple_BlindedPayInfoBlindedPathZ_free(_res_conv);
-}
-
-void  CS_LDK_CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free(int64_tArray _res) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ _res_constr;
+void  CS_LDK_CVec_BlindedPaymentPathZ_free(int64_tArray _res) {
+       LDKCVec_BlindedPaymentPathZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t l = 0; l < _res_constr.datalen; l++) {
-               int64_t _res_conv_37 = _res_vals[l];
-               void* _res_conv_37_ptr = untag_ptr(_res_conv_37);
-               CHECK_ACCESS(_res_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ _res_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(_res_conv_37_ptr);
-               FREE(untag_ptr(_res_conv_37));
-               _res_constr.data[l] = _res_conv_37_conv;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKBlindedPaymentPath _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
        }
        FREE(_res);
-       CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free(_res_constr);
+       CVec_BlindedPaymentPathZ_free(_res_constr);
 }
 
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(int64_tArray o) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ o_constr;
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_ok(int64_tArray o) {
+       LDKCVec_BlindedPaymentPathZ o_constr;
        o_constr.datalen = o->arr_len;
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
        else
                o_constr.data = NULL;
        int64_t* o_vals = o->elems;
-       for (size_t l = 0; l < o_constr.datalen; l++) {
-               int64_t o_conv_37 = o_vals[l];
-               void* o_conv_37_ptr = untag_ptr(o_conv_37);
-               CHECK_ACCESS(o_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ o_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(o_conv_37_ptr);
-               o_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(o_conv_37));
-               o_constr.data[l] = o_conv_37_conv;
+       for (size_t u = 0; u < o_constr.datalen; u++) {
+               int64_t o_conv_20 = o_vals[u];
+               LDKBlindedPaymentPath o_conv_20_conv;
+               o_conv_20_conv.inner = untag_ptr(o_conv_20);
+               o_conv_20_conv.is_owned = ptr_is_owned(o_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv_20_conv);
+               o_conv_20_conv = BlindedPaymentPath_clone(&o_conv_20_conv);
+               o_constr.data[u] = o_conv_20_conv;
        }
        FREE(o);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(o_constr);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err() {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err();
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_err() {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(int64_t o) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* o_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(int64_t o) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* o_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(int64_t _res) {
+void  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ _res_conv = *(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)(_res_ptr);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ _res_conv = *(LDKCResult_CVec_BlindedPaymentPathZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(_res_conv);
+       CResult_CVec_BlindedPaymentPathZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* arg_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(int64_t orig) {
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ*)untag_ptr(orig);
-       LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ), "LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_clone(int64_t orig) {
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* orig_conv = (LDKCResult_CVec_BlindedPaymentPathZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_BlindedPaymentPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPaymentPathZNoneZ), "LDKCResult_CVec_BlindedPaymentPathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedPaymentPathZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -21092,68 +22239,88 @@ int64_t  CS_LDK_CResult_OnionMessagePathNoneZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_ok(int64_tArray o) {
-       LDKCVec_BlindedPathZ o_constr;
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_ok(int64_tArray o) {
+       LDKCVec_BlindedMessagePathZ o_constr;
        o_constr.datalen = o->arr_len;
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKBlindedPath), "LDKCVec_BlindedPathZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKBlindedMessagePath), "LDKCVec_BlindedMessagePathZ Elements");
        else
                o_constr.data = NULL;
        int64_t* o_vals = o->elems;
-       for (size_t n = 0; n < o_constr.datalen; n++) {
-               int64_t o_conv_13 = o_vals[n];
-               LDKBlindedPath o_conv_13_conv;
-               o_conv_13_conv.inner = untag_ptr(o_conv_13);
-               o_conv_13_conv.is_owned = ptr_is_owned(o_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv_13_conv);
-               o_conv_13_conv = BlindedPath_clone(&o_conv_13_conv);
-               o_constr.data[n] = o_conv_13_conv;
+       for (size_t u = 0; u < o_constr.datalen; u++) {
+               int64_t o_conv_20 = o_vals[u];
+               LDKBlindedMessagePath o_conv_20_conv;
+               o_conv_20_conv.inner = untag_ptr(o_conv_20);
+               o_conv_20_conv.is_owned = ptr_is_owned(o_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv_20_conv);
+               o_conv_20_conv = BlindedMessagePath_clone(&o_conv_20_conv);
+               o_constr.data[u] = o_conv_20_conv;
        }
        FREE(o);
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_ok(o_constr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_err() {
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_err();
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_err() {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_CVec_BlindedPathZNoneZ_is_ok(int64_t o) {
-       LDKCResult_CVec_BlindedPathZNoneZ* o_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_BlindedPathZNoneZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_is_ok(int64_t o) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* o_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_CVec_BlindedPathZNoneZ_free(int64_t _res) {
+void  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_BlindedPathZNoneZ _res_conv = *(LDKCResult_CVec_BlindedPathZNoneZ*)(_res_ptr);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ _res_conv = *(LDKCResult_CVec_BlindedMessagePathZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_CVec_BlindedPathZNoneZ_free(_res_conv);
+       CResult_CVec_BlindedMessagePathZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_CVec_BlindedPathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_CVec_BlindedPathZNoneZ* arg_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_BlindedPathZNoneZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* arg_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_CVec_BlindedPathZNoneZ_clone(int64_t orig) {
-       LDKCResult_CVec_BlindedPathZNoneZ* orig_conv = (LDKCResult_CVec_BlindedPathZNoneZ*)untag_ptr(orig);
-       LDKCResult_CVec_BlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedPathZNoneZ), "LDKCResult_CVec_BlindedPathZNoneZ");
-       *ret_conv = CResult_CVec_BlindedPathZNoneZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_clone(int64_t orig) {
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* orig_conv = (LDKCResult_CVec_BlindedMessagePathZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_BlindedMessagePathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_BlindedMessagePathZNoneZ), "LDKCResult_CVec_BlindedMessagePathZNoneZ");
+       *ret_conv = CResult_CVec_BlindedMessagePathZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
+void  CS_LDK_CVec_MessageForwardNodeZ_free(int64_tArray _res) {
+       LDKCVec_MessageForwardNodeZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKMessageForwardNode), "LDKCVec_MessageForwardNodeZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKMessageForwardNode _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
+       }
+       FREE(_res);
+       CVec_MessageForwardNodeZ_free(_res_constr);
+}
+
 int64_t  CS_LDK_CResult_InFlightHtlcsDecodeErrorZ_ok(int64_t o) {
        LDKInFlightHtlcs o_conv;
        o_conv.inner = untag_ptr(o);
@@ -21574,26 +22741,6 @@ void  CS_LDK_CVec_RouteHintZ_free(int64_tArray _res) {
        CVec_RouteHintZ_free(_res_constr);
 }
 
-void  CS_LDK_CVec_RouteHintHopZ_free(int64_tArray _res) {
-       LDKCVec_RouteHintHopZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_14 = _res_vals[o];
-               LDKRouteHintHop _res_conv_14_conv;
-               _res_conv_14_conv.inner = untag_ptr(_res_conv_14);
-               _res_conv_14_conv.is_owned = ptr_is_owned(_res_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
-               _res_constr.data[o] = _res_conv_14_conv;
-       }
-       FREE(_res);
-       CVec_RouteHintHopZ_free(_res_constr);
-}
-
 int64_t  CS_LDK_CResult_RouteHintDecodeErrorZ_ok(int64_t o) {
        LDKRouteHint o_conv;
        o_conv.inner = untag_ptr(o);
@@ -22922,6 +24069,60 @@ void  CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticError
        CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_free(_res_conv);
 }
 
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_ok(int64_t o) {
+       LDKOffer o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Offer_clone(&o_conv);
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_OfferDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_OfferDecodeErrorZ* o_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_OfferDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_OfferDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_OfferDecodeErrorZ _res_conv = *(LDKCResult_OfferDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_OfferDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_OfferDecodeErrorZ_clone_ptr(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_OfferDecodeErrorZ* arg_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_OfferDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_OfferDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_OfferDecodeErrorZ* orig_conv = (LDKCResult_OfferDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = CResult_OfferDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_OfferBolt12ParseErrorZ_ok(int64_t o) {
        LDKOffer o_conv;
        o_conv.inner = untag_ptr(o);
@@ -23608,11 +24809,10 @@ void  CS_LDK_CVec_SocketAddressZ_free(int64_tArray _res) {
 }
 
 int64_t  CS_LDK_CResult_NodeAnnouncementInfoDecodeErrorZ_ok(int64_t o) {
-       LDKNodeAnnouncementInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = NodeAnnouncementInfo_clone(&o_conv);
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKNodeAnnouncementInfo o_conv = *(LDKNodeAnnouncementInfo*)(o_ptr);
+       o_conv = NodeAnnouncementInfo_clone((LDKNodeAnnouncementInfo*)untag_ptr(o));
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
@@ -23715,6 +24915,53 @@ int64_t  CS_LDK_CResult_NodeAliasDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKNodeAnnouncementInfo o_conv = *(LDKNodeAnnouncementInfo*)(o_ptr);
+       o_conv = NodeAnnouncementInfo_clone((LDKNodeAnnouncementInfo*)untag_ptr(o));
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_none() {
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_NodeAnnouncementInfoZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_NodeAnnouncementInfoZ _res_conv = *(LDKCOption_NodeAnnouncementInfoZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_NodeAnnouncementInfoZ_free(_res_conv);
+}
+
+static inline uint64_t COption_NodeAnnouncementInfoZ_clone_ptr(LDKCOption_NodeAnnouncementInfoZ *NONNULL_PTR arg) {
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_clone_ptr(int64_t arg) {
+       LDKCOption_NodeAnnouncementInfoZ* arg_conv = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_NodeAnnouncementInfoZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_NodeAnnouncementInfoZ_clone(int64_t orig) {
+       LDKCOption_NodeAnnouncementInfoZ* orig_conv = (LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(orig);
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = COption_NodeAnnouncementInfoZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 int64_t  CS_LDK_CResult_NodeInfoDecodeErrorZ_ok(int64_t o) {
        LDKNodeInfo o_conv;
        o_conv.inner = untag_ptr(o);
@@ -25038,117 +26285,352 @@ int64_t  CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_COption_OffersMessageZ_some(int64_t o) {
+int64_t  CS_LDK_COption_OffersContextZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKOffersMessage o_conv = *(LDKOffersMessage*)(o_ptr);
-       o_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(o));
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_some(o_conv);
+       LDKOffersContext o_conv = *(LDKOffersContext*)(o_ptr);
+       o_conv = OffersContext_clone((LDKOffersContext*)untag_ptr(o));
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_COption_OffersMessageZ_none() {
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_none();
+int64_t  CS_LDK_COption_OffersContextZ_none() {
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_COption_OffersMessageZ_free(int64_t _res) {
+void  CS_LDK_COption_OffersContextZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_OffersMessageZ _res_conv = *(LDKCOption_OffersMessageZ*)(_res_ptr);
+       LDKCOption_OffersContextZ _res_conv = *(LDKCOption_OffersContextZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_OffersMessageZ_free(_res_conv);
+       COption_OffersContextZ_free(_res_conv);
 }
 
-static inline uint64_t COption_OffersMessageZ_clone_ptr(LDKCOption_OffersMessageZ *NONNULL_PTR arg) {
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_clone(arg);
+static inline uint64_t COption_OffersContextZ_clone_ptr(LDKCOption_OffersContextZ *NONNULL_PTR arg) {
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_COption_OffersMessageZ_clone_ptr(int64_t arg) {
-       LDKCOption_OffersMessageZ* arg_conv = (LDKCOption_OffersMessageZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_OffersMessageZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_COption_OffersContextZ_clone_ptr(int64_t arg) {
+       LDKCOption_OffersContextZ* arg_conv = (LDKCOption_OffersContextZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_OffersContextZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_COption_OffersMessageZ_clone(int64_t orig) {
-       LDKCOption_OffersMessageZ* orig_conv = (LDKCOption_OffersMessageZ*)untag_ptr(orig);
-       LDKCOption_OffersMessageZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersMessageZ), "LDKCOption_OffersMessageZ");
-       *ret_copy = COption_OffersMessageZ_clone(orig_conv);
+int64_t  CS_LDK_COption_OffersContextZ_clone(int64_t orig) {
+       LDKCOption_OffersContextZ* orig_conv = (LDKCOption_OffersContextZ*)untag_ptr(orig);
+       LDKCOption_OffersContextZ *ret_copy = MALLOC(sizeof(LDKCOption_OffersContextZ), "LDKCOption_OffersContextZ");
+       *ret_copy = COption_OffersContextZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR arg) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_clone(arg);
+static inline uint64_t C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *ret_conv = C2Tuple_OffersMessageResponseInstructionZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(int64_t arg) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* arg_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(arg);
-       int64_t ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* arg_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_clone(int64_t orig) {
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* orig_conv = (LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)untag_ptr(orig);
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_clone(int64_t orig) {
+       LDKC2Tuple_OffersMessageResponseInstructionZ* orig_conv = (LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(orig);
+       LDKC2Tuple_OffersMessageResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *ret_conv = C2Tuple_OffersMessageResponseInstructionZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_new(int64_t a, int64_t b, int64_t c) {
+int64_t  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_new(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
+       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
+       LDKResponseInstruction b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = ResponseInstruction_clone(&b_conv);
+       LDKC2Tuple_OffersMessageResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageResponseInstructionZ), "LDKC2Tuple_OffersMessageResponseInstructionZ");
+       *ret_conv = C2Tuple_OffersMessageResponseInstructionZ_new(a_conv, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_OffersMessageResponseInstructionZ _res_conv = *(LDKC2Tuple_OffersMessageResponseInstructionZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_OffersMessageResponseInstructionZ_free(_res_conv);
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_OffersMessageResponseInstructionZ o_conv = *(LDKC2Tuple_OffersMessageResponseInstructionZ*)(o_ptr);
+       o_conv = C2Tuple_OffersMessageResponseInstructionZ_clone((LDKC2Tuple_OffersMessageResponseInstructionZ*)untag_ptr(o));
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_none() {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ _res_conv = *(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_C2Tuple_OffersMessageResponseInstructionZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(int64_t arg) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ* arg_conv = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(int64_t orig) {
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ* orig_conv = (LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ), "LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline uint64_t C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* arg_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_clone(int64_t orig) {
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* orig_conv = (LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)untag_ptr(orig);
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_new(int64_t a, int64_t b) {
        void* a_ptr = untag_ptr(a);
        CHECK_ACCESS(a_ptr);
        LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
        a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKDestination b_conv = *(LDKDestination*)(b_ptr);
-       b_conv = Destination_clone((LDKDestination*)untag_ptr(b));
-       LDKBlindedPath c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = BlindedPath_clone(&c_conv);
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKC3Tuple_OffersMessageDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OffersMessageDestinationBlindedPathZ_new(a_conv, b_conv, c_conv);
+       LDKMessageSendInstructions b_conv = *(LDKMessageSendInstructions*)(b_ptr);
+       b_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(b));
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKC2Tuple_OffersMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OffersMessageMessageSendInstructionsZ_new(a_conv, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC3Tuple_OffersMessageDestinationBlindedPathZ _res_conv = *(LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)(_res_ptr);
+       LDKC2Tuple_OffersMessageMessageSendInstructionsZ _res_conv = *(LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C3Tuple_OffersMessageDestinationBlindedPathZ_free(_res_conv);
+       C2Tuple_OffersMessageMessageSendInstructionsZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free(int64_tArray _res) {
-       LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ _res_constr;
+void  CS_LDK_CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC3Tuple_OffersMessageDestinationBlindedPathZ), "LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OffersMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t x = 0; x < _res_constr.datalen; x++) {
-               int64_t _res_conv_49 = _res_vals[x];
-               void* _res_conv_49_ptr = untag_ptr(_res_conv_49);
-               CHECK_ACCESS(_res_conv_49_ptr);
-               LDKC3Tuple_OffersMessageDestinationBlindedPathZ _res_conv_49_conv = *(LDKC3Tuple_OffersMessageDestinationBlindedPathZ*)(_res_conv_49_ptr);
-               FREE(untag_ptr(_res_conv_49));
-               _res_constr.data[x] = _res_conv_49_conv;
+       for (size_t w = 0; w < _res_constr.datalen; w++) {
+               int64_t _res_conv_48 = _res_vals[w];
+               void* _res_conv_48_ptr = untag_ptr(_res_conv_48);
+               CHECK_ACCESS(_res_conv_48_ptr);
+               LDKC2Tuple_OffersMessageMessageSendInstructionsZ _res_conv_48_conv = *(LDKC2Tuple_OffersMessageMessageSendInstructionsZ*)(_res_conv_48_ptr);
+               FREE(untag_ptr(_res_conv_48));
+               _res_constr.data[w] = _res_conv_48_conv;
+       }
+       FREE(_res);
+       CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free(_res_constr);
+}
+
+static inline uint64_t C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* arg_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(int64_t orig) {
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* orig_conv = (LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(orig);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(int64_t a, int64_t b) {
+       LDKReleaseHeldHtlc a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = ReleaseHeldHtlc_clone(&a_conv);
+       LDKResponseInstruction b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = ResponseInstruction_clone(&b_conv);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ), "LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ");
+       *ret_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(a_conv, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ _res_conv = *(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(_res_conv);
+}
+
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ o_conv = *(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)(o_ptr);
+       o_conv = C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone((LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ*)untag_ptr(o));
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none() {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ _res_conv = *(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(int64_t arg) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ* arg_conv = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(int64_t orig) {
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ* orig_conv = (LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ), "LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline uint64_t C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR arg) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* arg_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(int64_t orig) {
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* orig_conv = (LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)untag_ptr(orig);
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKAsyncPaymentsMessage a_conv = *(LDKAsyncPaymentsMessage*)(a_ptr);
+       a_conv = AsyncPaymentsMessage_clone((LDKAsyncPaymentsMessage*)untag_ptr(a));
+       void* b_ptr = untag_ptr(b);
+       CHECK_ACCESS(b_ptr);
+       LDKMessageSendInstructions b_conv = *(LDKMessageSendInstructions*)(b_ptr);
+       b_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(b));
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(a_conv, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ _res_conv = *(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(_res_conv);
+}
+
+void  CS_LDK_CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ), "LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t d = 0; d < _res_constr.datalen; d++) {
+               int64_t _res_conv_55 = _res_vals[d];
+               void* _res_conv_55_ptr = untag_ptr(_res_conv_55);
+               CHECK_ACCESS(_res_conv_55_ptr);
+               LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ _res_conv_55_conv = *(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ*)(_res_conv_55_ptr);
+               FREE(untag_ptr(_res_conv_55));
+               _res_constr.data[d] = _res_conv_55_conv;
        }
        FREE(_res);
-       CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free(_res_constr);
+       CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free(_res_constr);
 }
 
 int64_t  CS_LDK_CResult_PhantomRouteHintsDecodeErrorZ_ok(int64_t o) {
@@ -26128,6 +27610,56 @@ void  CS_LDK_CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(int64_
        CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(_res_constr);
 }
 
+int64_t  CS_LDK_CResult_NoneReplayEventZ_ok() {
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_ok();
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NoneReplayEventZ_err(int64_t e) {
+       LDKReplayEvent e_conv;
+       e_conv.inner = untag_ptr(e);
+       e_conv.is_owned = ptr_is_owned(e);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = ReplayEvent_clone(&e_conv);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_NoneReplayEventZ_is_ok(int64_t o) {
+       LDKCResult_NoneReplayEventZ* o_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneReplayEventZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_NoneReplayEventZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NoneReplayEventZ _res_conv = *(LDKCResult_NoneReplayEventZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_NoneReplayEventZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NoneReplayEventZ_clone_ptr(LDKCResult_NoneReplayEventZ *NONNULL_PTR arg) {
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_NoneReplayEventZ_clone_ptr(int64_t arg) {
+       LDKCResult_NoneReplayEventZ* arg_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneReplayEventZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_NoneReplayEventZ_clone(int64_t orig) {
+       LDKCResult_NoneReplayEventZ* orig_conv = (LDKCResult_NoneReplayEventZ*)untag_ptr(orig);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = CResult_NoneReplayEventZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 void  CS_LDK_CVec_CommitmentTransactionZ_free(int64_tArray _res) {
        LDKCVec_CommitmentTransactionZ _res_constr;
        _res_constr.datalen = _res->arr_len;
@@ -26454,76 +27986,96 @@ void  CS_LDK_CVec_C2Tuple_PublicKeyTypeZZ_free(int64_tArray _res) {
        CVec_C2Tuple_PublicKeyTypeZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(arg);
+static inline uint64_t C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(int64_t arg) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* arg_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* arg_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(int64_t orig) {
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* orig_conv = (LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)untag_ptr(orig);
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_clone(int64_t orig) {
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* orig_conv = (LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(orig);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_new(int8_tArray a, int64_tArray b) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKCVec_SocketAddressZ b_constr;
-       b_constr.datalen = b->arr_len;
-       if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
-       else
-               b_constr.data = NULL;
-       int64_t* b_vals = b->elems;
-       for (size_t p = 0; p < b_constr.datalen; p++) {
-               int64_t b_conv_15 = b_vals[p];
-               void* b_conv_15_ptr = untag_ptr(b_conv_15);
-               CHECK_ACCESS(b_conv_15_ptr);
-               LDKSocketAddress b_conv_15_conv = *(LDKSocketAddress*)(b_conv_15_ptr);
-               b_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(b_conv_15));
-               b_constr.data[p] = b_conv_15_conv;
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_new(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
+       if (a_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&a_conv);
        }
-       FREE(b);
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKC2Tuple_PublicKeyCVec_SocketAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCVec_SocketAddressZZ_new(a_ref, b_constr);
+       LDKResponseInstruction b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = ResponseInstruction_clone(&b_conv);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsResponseInstructionZ), "LDKC2Tuple_OnionMessageContentsResponseInstructionZ");
+       *ret_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_new(a_conv, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PublicKeyCVec_SocketAddressZZ _res_conv = *(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)(_res_ptr);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ _res_conv = *(LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PublicKeyCVec_SocketAddressZZ_free(_res_conv);
+       C2Tuple_OnionMessageContentsResponseInstructionZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free(int64_tArray _res) {
-       LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ), "LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_40 = _res_vals[o];
-               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
-               CHECK_ACCESS(_res_conv_40_ptr);
-               LDKC2Tuple_PublicKeyCVec_SocketAddressZZ _res_conv_40_conv = *(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ*)(_res_conv_40_ptr);
-               FREE(untag_ptr(_res_conv_40));
-               _res_constr.data[o] = _res_conv_40_conv;
-       }
-       FREE(_res);
-       CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free(_res_constr);
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_OnionMessageContentsResponseInstructionZ o_conv = *(LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)(o_ptr);
+       o_conv = C2Tuple_OnionMessageContentsResponseInstructionZ_clone((LDKC2Tuple_OnionMessageContentsResponseInstructionZ*)untag_ptr(o));
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none() {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ _res_conv = *(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(int64_t arg) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ* arg_conv = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(int64_t orig) {
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ* orig_conv = (LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ), "LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ");
+       *ret_copy = COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
 int64_t  CS_LDK_COption_OnionMessageContentsZ_some(int64_t o) {
@@ -26629,25 +28181,25 @@ int64_t  CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_clone(int64_t
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR arg) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(arg);
+static inline uint64_t C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(int64_t arg) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* arg_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(arg);
-       int64_t ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* arg_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(int64_t orig) {
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* orig_conv = (LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)untag_ptr(orig);
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(int64_t orig) {
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* orig_conv = (LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)untag_ptr(orig);
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(int64_t a, int64_t b, int64_t c) {
+int64_t  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(int64_t a, int64_t b) {
        void* a_ptr = untag_ptr(a);
        CHECK_ACCESS(a_ptr);
        LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
@@ -26657,45 +28209,40 @@ int64_t  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(int64_t
        }
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKDestination b_conv = *(LDKDestination*)(b_ptr);
-       b_conv = Destination_clone((LDKDestination*)untag_ptr(b));
-       LDKBlindedPath c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = BlindedPath_clone(&c_conv);
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ");
-       *ret_conv = C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(a_conv, b_conv, c_conv);
+       LDKMessageSendInstructions b_conv = *(LDKMessageSendInstructions*)(b_ptr);
+       b_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(b));
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ");
+       *ret_conv = C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(a_conv, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ _res_conv = *(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)(_res_ptr);
+       LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ _res_conv = *(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(_res_conv);
+       C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free(int64_tArray _res) {
-       LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ _res_constr;
+void  CS_LDK_CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ), "LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ), "LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t e = 0; e < _res_constr.datalen; e++) {
-               int64_t _res_conv_56 = _res_vals[e];
-               void* _res_conv_56_ptr = untag_ptr(_res_conv_56);
-               CHECK_ACCESS(_res_conv_56_ptr);
-               LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ _res_conv_56_conv = *(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ*)(_res_conv_56_ptr);
-               FREE(untag_ptr(_res_conv_56));
-               _res_constr.data[e] = _res_conv_56_conv;
+       for (size_t d = 0; d < _res_constr.datalen; d++) {
+               int64_t _res_conv_55 = _res_vals[d];
+               void* _res_conv_55_ptr = untag_ptr(_res_conv_55);
+               CHECK_ACCESS(_res_conv_55_ptr);
+               LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ _res_conv_55_conv = *(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ*)(_res_conv_55_ptr);
+               FREE(untag_ptr(_res_conv_55));
+               _res_constr.data[d] = _res_conv_55_conv;
        }
        FREE(_res);
-       CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free(_res_constr);
+       CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free(_res_constr);
 }
 
 int64_t  CS_LDK_COption_TypeZ_some(int64_t o) {
@@ -27103,23 +28650,6 @@ int64_t  CS_LDK_CResult_CVec_u8ZIOErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_CVec_StrZ_free(ptrArray _res) {
-       LDKCVec_StrZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
-       else
-               _res_constr.data = NULL;
-       jstring* _res_vals = (void*) _res->elems;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               jstring _res_conv_8 = _res_vals[i];
-               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
-               _res_constr.data[i] = dummy;
-       }
-       FREE(_res);
-       CVec_StrZ_free(_res_constr);
-}
-
 int64_t  CS_LDK_CResult_CVec_StrZIOErrorZ_ok(ptrArray o) {
        LDKCVec_StrZ o_constr;
        o_constr.datalen = o->arr_len;
@@ -27413,52 +28943,6 @@ int64_t  CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_COption_SecretKeyZ_some(int8_tArray o) {
-       LDKSecretKey o_ref;
-       CHECK(o->arr_len == 32);
-       memcpy(o_ref.bytes, o->elems, 32); FREE(o);
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_COption_SecretKeyZ_none() {
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_COption_SecretKeyZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_SecretKeyZ _res_conv = *(LDKCOption_SecretKeyZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_SecretKeyZ_free(_res_conv);
-}
-
-static inline uint64_t COption_SecretKeyZ_clone_ptr(LDKCOption_SecretKeyZ *NONNULL_PTR arg) {
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_COption_SecretKeyZ_clone_ptr(int64_t arg) {
-       LDKCOption_SecretKeyZ* arg_conv = (LDKCOption_SecretKeyZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_SecretKeyZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_COption_SecretKeyZ_clone(int64_t orig) {
-       LDKCOption_SecretKeyZ* orig_conv = (LDKCOption_SecretKeyZ*)untag_ptr(orig);
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = COption_SecretKeyZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 int64_t  CS_LDK_CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_ok(int64_t o) {
        LDKInvoiceWithExplicitSigningPubkeyBuilder o_conv;
        o_conv.inner = untag_ptr(o);
@@ -28101,57 +29585,57 @@ int64_t  CS_LDK_CResult_StfuDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_ok(int64_t o) {
-       LDKSplice o_conv;
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_ok(int64_t o) {
+       LDKSpliceInit o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = Splice_clone(&o_conv);
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_ok(o_conv);
+       o_conv = SpliceInit_clone(&o_conv);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_err(e_conv);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_SpliceDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_SpliceDecodeErrorZ* o_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_SpliceDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_SpliceInitDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_SpliceInitDecodeErrorZ* o_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SpliceInitDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_SpliceDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_SpliceInitDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_SpliceDecodeErrorZ _res_conv = *(LDKCResult_SpliceDecodeErrorZ*)(_res_ptr);
+       LDKCResult_SpliceInitDecodeErrorZ _res_conv = *(LDKCResult_SpliceInitDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_SpliceDecodeErrorZ_free(_res_conv);
+       CResult_SpliceInitDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_SpliceDecodeErrorZ_clone_ptr(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_SpliceInitDecodeErrorZ_clone_ptr(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_SpliceDecodeErrorZ* arg_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_SpliceDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_SpliceInitDecodeErrorZ* arg_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SpliceInitDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_SpliceDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_SpliceDecodeErrorZ* orig_conv = (LDKCResult_SpliceDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = CResult_SpliceDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_SpliceInitDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_SpliceInitDecodeErrorZ* orig_conv = (LDKCResult_SpliceInitDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = CResult_SpliceInitDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -28965,6 +30449,60 @@ int64_t  CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_ok(int64_t o) {
+       LDKCommitmentSignedBatch o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = CommitmentSignedBatch_clone(&o_conv);
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* o_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ _res_conv = *(LDKCResult_CommitmentSignedBatchDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CommitmentSignedBatchDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* arg_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* orig_conv = (LDKCResult_CommitmentSignedBatchDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedBatchDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_CommitmentSignedDecodeErrorZ_ok(int64_t o) {
        LDKCommitmentSigned o_conv;
        o_conv.inner = untag_ptr(o);
@@ -30693,80 +32231,6 @@ int64_t  CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_CVec_PhantomRouteHintsZ_free(int64_tArray _res) {
-       LDKCVec_PhantomRouteHintsZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t t = 0; t < _res_constr.datalen; t++) {
-               int64_t _res_conv_19 = _res_vals[t];
-               LDKPhantomRouteHints _res_conv_19_conv;
-               _res_conv_19_conv.inner = untag_ptr(_res_conv_19);
-               _res_conv_19_conv.is_owned = ptr_is_owned(_res_conv_19);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
-               _res_constr.data[t] = _res_conv_19_conv;
-       }
-       FREE(_res);
-       CVec_PhantomRouteHintsZ_free(_res_constr);
-}
-
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(int64_t o) {
-       LDKBolt11Invoice o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = Bolt11Invoice_clone(&o_conv);
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_err(int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKSignOrCreationError e_conv = *(LDKSignOrCreationError*)(e_ptr);
-       e_conv = SignOrCreationError_clone((LDKSignOrCreationError*)untag_ptr(e));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(int64_t o) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ _res_conv = *(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_Bolt11InvoiceSignOrCreationErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(int64_t orig) {
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(orig);
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_COption_InboundHTLCStateDetailsZ_some(int32_t o) {
        LDKInboundHTLCStateDetails o_conv = LDKInboundHTLCStateDetails_from_cs(o);
        LDKCOption_InboundHTLCStateDetailsZ *ret_copy = MALLOC(sizeof(LDKCOption_InboundHTLCStateDetailsZ), "LDKCOption_InboundHTLCStateDetailsZ");
@@ -31385,6 +32849,167 @@ void  CS_LDK_CVec_FutureZ_free(int64_tArray _res) {
        CVec_FutureZ_free(_res_constr);
 }
 
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_ok(int64_t o) {
+       LDKHeldHtlcAvailable o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = HeldHtlcAvailable_clone(&o_conv);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* o_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ _res_conv = *(LDKCResult_HeldHtlcAvailableDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_HeldHtlcAvailableDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* arg_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* orig_conv = (LDKCResult_HeldHtlcAvailableDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = CResult_HeldHtlcAvailableDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_ok(int64_t o) {
+       LDKReleaseHeldHtlc o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ReleaseHeldHtlc_clone(&o_conv);
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* o_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ _res_conv = *(LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ReleaseHeldHtlcDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* arg_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* orig_conv = (LDKCResult_ReleaseHeldHtlcDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = CResult_ReleaseHeldHtlcDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKAsyncPaymentsMessage o_conv = *(LDKAsyncPaymentsMessage*)(o_ptr);
+       o_conv = AsyncPaymentsMessage_clone((LDKAsyncPaymentsMessage*)untag_ptr(o));
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* o_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ _res_conv = *(LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_AsyncPaymentsMessageDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* arg_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* orig_conv = (LDKCResult_AsyncPaymentsMessageDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = CResult_AsyncPaymentsMessageDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_OffersMessageDecodeErrorZ_ok(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -32247,6 +33872,59 @@ void  CS_LDK_CVec_TransactionZ_free(ptrArray _res) {
        CVec_TransactionZ_free(_res_constr);
 }
 
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKFundingInfo o_conv = *(LDKFundingInfo*)(o_ptr);
+       o_conv = FundingInfo_clone((LDKFundingInfo*)untag_ptr(o));
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_FundingInfoDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_FundingInfoDecodeErrorZ* o_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_FundingInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_FundingInfoDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_FundingInfoDecodeErrorZ _res_conv = *(LDKCResult_FundingInfoDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_FundingInfoDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_FundingInfoDecodeErrorZ_clone_ptr(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_FundingInfoDecodeErrorZ* arg_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_FundingInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_FundingInfoDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_FundingInfoDecodeErrorZ* orig_conv = (LDKCResult_FundingInfoDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = CResult_FundingInfoDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_PaymentPurposeDecodeErrorZ_ok(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -32654,53 +34332,100 @@ int64_t  CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_clone(int64_t orig)
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_ok(int32_t o) {
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_some(int32_t o) {
        LDKPaymentFailureReason o_conv = LDKPaymentFailureReason_from_cs(o);
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_ok(o_conv);
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_none() {
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_COption_PaymentFailureReasonZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_PaymentFailureReasonZ _res_conv = *(LDKCOption_PaymentFailureReasonZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_PaymentFailureReasonZ_free(_res_conv);
+}
+
+static inline uint64_t COption_PaymentFailureReasonZ_clone_ptr(LDKCOption_PaymentFailureReasonZ *NONNULL_PTR arg) {
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone_ptr(int64_t arg) {
+       LDKCOption_PaymentFailureReasonZ* arg_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_PaymentFailureReasonZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone(int64_t orig) {
+       LDKCOption_PaymentFailureReasonZ* orig_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(orig);
+       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
+       *ret_copy = COption_PaymentFailureReasonZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_PaymentFailureReasonZ o_conv = *(LDKCOption_PaymentFailureReasonZ*)(o_ptr);
+       o_conv = COption_PaymentFailureReasonZ_clone((LDKCOption_PaymentFailureReasonZ*)untag_ptr(o));
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_err(e_conv);
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* o_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* o_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentFailureReasonDecodeErrorZ _res_conv = *(LDKCResult_PaymentFailureReasonDecodeErrorZ*)(_res_ptr);
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ _res_conv = *(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentFailureReasonDecodeErrorZ_free(_res_conv);
+       CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* arg_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* arg_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* orig_conv = (LDKCResult_PaymentFailureReasonDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = CResult_PaymentFailureReasonDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* orig_conv = (LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -32770,50 +34495,6 @@ void  CS_LDK_CVec_ClaimedHTLCZ_free(int64_tArray _res) {
        CVec_ClaimedHTLCZ_free(_res_constr);
 }
 
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_some(int32_t o) {
-       LDKPaymentFailureReason o_conv = LDKPaymentFailureReason_from_cs(o);
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_some(o_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_none() {
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_COption_PaymentFailureReasonZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentFailureReasonZ _res_conv = *(LDKCOption_PaymentFailureReasonZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_PaymentFailureReasonZ_free(_res_conv);
-}
-
-static inline uint64_t COption_PaymentFailureReasonZ_clone_ptr(LDKCOption_PaymentFailureReasonZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone_ptr(int64_t arg) {
-       LDKCOption_PaymentFailureReasonZ* arg_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentFailureReasonZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_COption_PaymentFailureReasonZ_clone(int64_t orig) {
-       LDKCOption_PaymentFailureReasonZ* orig_conv = (LDKCOption_PaymentFailureReasonZ*)untag_ptr(orig);
-       LDKCOption_PaymentFailureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentFailureReasonZ), "LDKCOption_PaymentFailureReasonZ");
-       *ret_copy = COption_PaymentFailureReasonZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 int64_t  CS_LDK_COption_EventZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -32914,6 +34595,80 @@ int64_t  CS_LDK_CResult_COption_EventZDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_ok(int64_t o) {
+       LDKNonce o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Nonce_clone(&o_conv);
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_NonceDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_NonceDecodeErrorZ* o_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NonceDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_NonceDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NonceDecodeErrorZ _res_conv = *(LDKCResult_NonceDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_NonceDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NonceDecodeErrorZ_clone_ptr(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_NonceDecodeErrorZ* arg_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NonceDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_NonceDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_NonceDecodeErrorZ* orig_conv = (LDKCResult_NonceDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = CResult_NonceDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_CVec_RouteHintHopZ_free(int64_tArray _res) {
+       LDKCVec_RouteHintHopZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t o = 0; o < _res_constr.datalen; o++) {
+               int64_t _res_conv_14 = _res_vals[o];
+               LDKRouteHintHop _res_conv_14_conv;
+               _res_conv_14_conv.inner = untag_ptr(_res_conv_14);
+               _res_conv_14_conv.is_owned = ptr_is_owned(_res_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
+               _res_constr.data[o] = _res_conv_14_conv;
+       }
+       FREE(_res);
+       CVec_RouteHintHopZ_free(_res_constr);
+}
+
 int64_t  CS_LDK_CResult_SiPrefixBolt11ParseErrorZ_ok(int32_t o) {
        LDKSiPrefix o_conv = LDKSiPrefix_from_cs(o);
        LDKCResult_SiPrefixBolt11ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixBolt11ParseErrorZ), "LDKCResult_SiPrefixBolt11ParseErrorZ");
@@ -33547,6 +35302,60 @@ int64_t  CS_LDK_CResult_BigSizeDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_ok(int64_t o) {
+       LDKUntrustedString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = UntrustedString_clone(&o_conv);
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_UntrustedStringDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_UntrustedStringDecodeErrorZ* o_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_UntrustedStringDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_UntrustedStringDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_UntrustedStringDecodeErrorZ _res_conv = *(LDKCResult_UntrustedStringDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_UntrustedStringDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_UntrustedStringDecodeErrorZ_clone_ptr(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_UntrustedStringDecodeErrorZ* arg_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_UntrustedStringDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_UntrustedStringDecodeErrorZ* orig_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_HostnameDecodeErrorZ_ok(int64_t o) {
        LDKHostname o_conv;
        o_conv.inner = untag_ptr(o);
@@ -33705,60 +35514,6 @@ int64_t  CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_clone(int64_t orig)
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_ok(int64_t o) {
-       LDKUntrustedString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = UntrustedString_clone(&o_conv);
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_err(int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
-       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_UntrustedStringDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_UntrustedStringDecodeErrorZ* o_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_UntrustedStringDecodeErrorZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_UntrustedStringDecodeErrorZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_UntrustedStringDecodeErrorZ _res_conv = *(LDKCResult_UntrustedStringDecodeErrorZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_UntrustedStringDecodeErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_UntrustedStringDecodeErrorZ_clone_ptr(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_UntrustedStringDecodeErrorZ* arg_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_UntrustedStringDecodeErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_UntrustedStringDecodeErrorZ* orig_conv = (LDKCResult_UntrustedStringDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = CResult_UntrustedStringDecodeErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_CResult_ChannelIdDecodeErrorZ_ok(int64_t o) {
        LDKChannelId o_conv;
        o_conv.inner = untag_ptr(o);
@@ -33849,6 +35604,130 @@ void  CS_LDK_C2Tuple__u832u16Z_free(int64_t _res) {
        C2Tuple__u832u16Z_free(_res_conv);
 }
 
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_ok(int64_t o) {
+       LDKBlindedPayInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedPayInfo_clone(&o_conv);
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* o_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedPayInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedPayInfoDecodeErrorZ _res_conv = *(LDKCResult_BlindedPayInfoDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedPayInfoDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* arg_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_BlindedPayInfoDecodeErrorZ* orig_conv = (LDKCResult_BlindedPayInfoDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = CResult_BlindedPayInfoDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_ok(int64_t o) {
+       LDKBlindedPaymentPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedPaymentPath_clone(&o_conv);
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_err() {
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedPaymentPathNoneZ_is_ok(int64_t o) {
+       LDKCResult_BlindedPaymentPathNoneZ* o_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedPaymentPathNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedPaymentPathNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedPaymentPathNoneZ _res_conv = *(LDKCResult_BlindedPaymentPathNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedPaymentPathNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedPaymentPathNoneZ_clone_ptr(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedPaymentPathNoneZ* arg_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedPaymentPathNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedPaymentPathNoneZ_clone(int64_t orig) {
+       LDKCResult_BlindedPaymentPathNoneZ* orig_conv = (LDKCResult_BlindedPaymentPathNoneZ*)untag_ptr(orig);
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = CResult_BlindedPaymentPathNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_CVec_PaymentForwardNodeZ_free(int64_tArray _res) {
+       LDKCVec_PaymentForwardNodeZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKPaymentForwardNode), "LDKCVec_PaymentForwardNodeZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t u = 0; u < _res_constr.datalen; u++) {
+               int64_t _res_conv_20 = _res_vals[u];
+               LDKPaymentForwardNode _res_conv_20_conv;
+               _res_conv_20_conv.inner = untag_ptr(_res_conv_20);
+               _res_conv_20_conv.is_owned = ptr_is_owned(_res_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_20_conv);
+               _res_constr.data[u] = _res_conv_20_conv;
+       }
+       FREE(_res);
+       CVec_PaymentForwardNodeZ_free(_res_constr);
+}
+
 int64_t  CS_LDK_CResult_PaymentRelayDecodeErrorZ_ok(int64_t o) {
        LDKPaymentRelay o_conv;
        o_conv.inner = untag_ptr(o);
@@ -34172,196 +36051,155 @@ int64_t  CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_ok(jstring o) {
-       LDKStr o_conv = str_ref_to_owned_c(o);
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_ok(o_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKTxOut o_conv = *(LDKTxOut*)(o_ptr);
+       o_conv = TxOut_clone((LDKTxOut*)untag_ptr(o));
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_err(int32_t e) {
-       LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_cs(e);
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_err(e_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_err(int32_t e) {
+       LDKUtxoLookupError e_conv = LDKUtxoLookupError_from_cs(e);
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_StrSecp256k1ErrorZ_is_ok(int64_t o) {
-       LDKCResult_StrSecp256k1ErrorZ* o_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_StrSecp256k1ErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_TxOutUtxoLookupErrorZ_is_ok(int64_t o) {
+       LDKCResult_TxOutUtxoLookupErrorZ* o_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_TxOutUtxoLookupErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_StrSecp256k1ErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_TxOutUtxoLookupErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_StrSecp256k1ErrorZ _res_conv = *(LDKCResult_StrSecp256k1ErrorZ*)(_res_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ _res_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_StrSecp256k1ErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_StrSecp256k1ErrorZ_clone_ptr(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR arg) {
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_StrSecp256k1ErrorZ* arg_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_StrSecp256k1ErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_StrSecp256k1ErrorZ_clone(int64_t orig) {
-       LDKCResult_StrSecp256k1ErrorZ* orig_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(orig);
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+       CResult_TxOutUtxoLookupErrorZ_free(_res_conv);
 }
 
-static inline uint64_t C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR arg) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(arg);
+static inline uint64_t CResult_TxOutUtxoLookupErrorZ_clone_ptr(LDKCResult_TxOutUtxoLookupErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(int64_t arg) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* arg_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(arg);
-       int64_t ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_TxOutUtxoLookupErrorZ* arg_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_TxOutUtxoLookupErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(int64_t orig) {
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* orig_conv = (LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(orig);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(int8_tArray a, int64_t b, int64_t c) {
-       LDKThirtyTwoBytes a_ref;
-       CHECK(a->arr_len == 32);
-       memcpy(a_ref.data, a->elems, 32); FREE(a);
-       LDKRecipientOnionFields b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv = RecipientOnionFields_clone(&b_conv);
-       LDKRouteParameters c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = RouteParameters_clone(&c_conv);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ), "LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ");
-       *ret_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(a_ref, b_conv, c_conv);
+int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone(int64_t orig) {
+       LDKCResult_TxOutUtxoLookupErrorZ* orig_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(orig);
+       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
+       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ _res_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(_res_conv);
-}
-
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ o_conv = *(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)(o_ptr);
-       o_conv = C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone((LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ*)untag_ptr(o));
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(o_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_ok(int64_t o) {
+       LDKResponder o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Responder_clone(&o_conv);
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err() {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err();
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(int64_t o) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* o_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_ResponderDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_ResponderDecodeErrorZ* o_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ResponderDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(int64_t _res) {
+void  CS_LDK_CResult_ResponderDecodeErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ _res_conv = *(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)(_res_ptr);
+       LDKCResult_ResponderDecodeErrorZ _res_conv = *(LDKCResult_ResponderDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(_res_conv);
+       CResult_ResponderDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(arg);
+static inline uint64_t CResult_ResponderDecodeErrorZ_clone_ptr(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* arg_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_ResponderDecodeErrorZ* arg_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ResponderDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(int64_t orig) {
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* orig_conv = (LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ*)untag_ptr(orig);
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_ResponderDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_ResponderDecodeErrorZ* orig_conv = (LDKCResult_ResponderDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = CResult_ResponderDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_ok(int64_t o) {
+int64_t  CS_LDK_COption_MessageContextZ_some(int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKTxOut o_conv = *(LDKTxOut*)(o_ptr);
-       o_conv = TxOut_clone((LDKTxOut*)untag_ptr(o));
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_err(int32_t e) {
-       LDKUtxoLookupError e_conv = LDKUtxoLookupError_from_cs(e);
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
+       LDKMessageContext o_conv = *(LDKMessageContext*)(o_ptr);
+       o_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(o));
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_CResult_TxOutUtxoLookupErrorZ_is_ok(int64_t o) {
-       LDKCResult_TxOutUtxoLookupErrorZ* o_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_TxOutUtxoLookupErrorZ_is_ok(o_conv);
-       return ret_conv;
+int64_t  CS_LDK_COption_MessageContextZ_none() {
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_CResult_TxOutUtxoLookupErrorZ_free(int64_t _res) {
+void  CS_LDK_COption_MessageContextZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ _res_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(_res_ptr);
+       LDKCOption_MessageContextZ _res_conv = *(LDKCOption_MessageContextZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_TxOutUtxoLookupErrorZ_free(_res_conv);
+       COption_MessageContextZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_TxOutUtxoLookupErrorZ_clone_ptr(LDKCResult_TxOutUtxoLookupErrorZ *NONNULL_PTR arg) {
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t COption_MessageContextZ_clone_ptr(LDKCOption_MessageContextZ *NONNULL_PTR arg) {
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_TxOutUtxoLookupErrorZ* arg_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_TxOutUtxoLookupErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_COption_MessageContextZ_clone_ptr(int64_t arg) {
+       LDKCOption_MessageContextZ* arg_conv = (LDKCOption_MessageContextZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_MessageContextZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone(int64_t orig) {
-       LDKCResult_TxOutUtxoLookupErrorZ* orig_conv = (LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(orig);
-       LDKCResult_TxOutUtxoLookupErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutUtxoLookupErrorZ), "LDKCResult_TxOutUtxoLookupErrorZ");
-       *ret_conv = CResult_TxOutUtxoLookupErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_COption_MessageContextZ_clone(int64_t orig) {
+       LDKCOption_MessageContextZ* orig_conv = (LDKCOption_MessageContextZ*)untag_ptr(orig);
+       LDKCOption_MessageContextZ *ret_copy = MALLOC(sizeof(LDKCOption_MessageContextZ), "LDKCOption_MessageContextZ");
+       *ret_copy = COption_MessageContextZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
 static inline uint64_t C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_clone_ptr(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR arg) {
@@ -34564,176 +36402,52 @@ int64_t  CS_LDK_CResult_SendSuccessSendErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_ok(int64_t o) {
-       LDKBlindedPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = BlindedPath_clone(&o_conv);
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_err() {
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-jboolean  CS_LDK_CResult_BlindedPathNoneZ_is_ok(int64_t o) {
-       LDKCResult_BlindedPathNoneZ* o_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_BlindedPathNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_BlindedPathNoneZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_BlindedPathNoneZ _res_conv = *(LDKCResult_BlindedPathNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_BlindedPathNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_BlindedPathNoneZ_clone_ptr(LDKCResult_BlindedPathNoneZ *NONNULL_PTR arg) {
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_BlindedPathNoneZ* arg_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_BlindedPathNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_BlindedPathNoneZ_clone(int64_t orig) {
-       LDKCResult_BlindedPathNoneZ* orig_conv = (LDKCResult_BlindedPathNoneZ*)untag_ptr(orig);
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = CResult_BlindedPathNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_BlindedPayInfoBlindedPathZ o_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(o_ptr);
-       o_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err() {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
+int64_t  CS_LDK_CResult_NoneSendErrorZ_ok() {
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_ok();
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(int64_t o) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* o_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ _res_conv = *(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(int64_t arg) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* arg_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(int64_t orig) {
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* orig_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_CVec_ForwardNodeZ_free(int64_tArray _res) {
-       LDKCVec_ForwardNodeZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKForwardNode), "LDKCVec_ForwardNodeZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t n = 0; n < _res_constr.datalen; n++) {
-               int64_t _res_conv_13 = _res_vals[n];
-               LDKForwardNode _res_conv_13_conv;
-               _res_conv_13_conv.inner = untag_ptr(_res_conv_13);
-               _res_conv_13_conv.is_owned = ptr_is_owned(_res_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_13_conv);
-               _res_constr.data[n] = _res_conv_13_conv;
-       }
-       FREE(_res);
-       CVec_ForwardNodeZ_free(_res_constr);
-}
-
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_ok(int64_t o) {
-       LDKBlindedPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv = BlindedPath_clone(&o_conv);
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_err(int64_t e) {
+int64_t  CS_LDK_CResult_NoneSendErrorZ_err(int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
-       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
-       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_err(e_conv);
+       LDKSendError e_conv = *(LDKSendError*)(e_ptr);
+       e_conv = SendError_clone((LDKSendError*)untag_ptr(e));
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_CResult_BlindedPathDecodeErrorZ_is_ok(int64_t o) {
-       LDKCResult_BlindedPathDecodeErrorZ* o_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_BlindedPathDecodeErrorZ_is_ok(o_conv);
+jboolean  CS_LDK_CResult_NoneSendErrorZ_is_ok(int64_t o) {
+       LDKCResult_NoneSendErrorZ* o_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneSendErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_CResult_BlindedPathDecodeErrorZ_free(int64_t _res) {
+void  CS_LDK_CResult_NoneSendErrorZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_BlindedPathDecodeErrorZ _res_conv = *(LDKCResult_BlindedPathDecodeErrorZ*)(_res_ptr);
+       LDKCResult_NoneSendErrorZ _res_conv = *(LDKCResult_NoneSendErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_BlindedPathDecodeErrorZ_free(_res_conv);
+       CResult_NoneSendErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_BlindedPathDecodeErrorZ_clone_ptr(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_NoneSendErrorZ_clone_ptr(LDKCResult_NoneSendErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_clone_ptr(int64_t arg) {
-       LDKCResult_BlindedPathDecodeErrorZ* arg_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_BlindedPathDecodeErrorZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_CResult_NoneSendErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_NoneSendErrorZ* arg_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneSendErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CResult_BlindedPathDecodeErrorZ_clone(int64_t orig) {
-       LDKCResult_BlindedPathDecodeErrorZ* orig_conv = (LDKCResult_BlindedPathDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = CResult_BlindedPathDecodeErrorZ_clone(orig_conv);
+int64_t  CS_LDK_CResult_NoneSendErrorZ_clone(int64_t orig) {
+       LDKCResult_NoneSendErrorZ* orig_conv = (LDKCResult_NoneSendErrorZ*)untag_ptr(orig);
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = CResult_NoneSendErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -34791,6 +36505,80 @@ int64_t  CS_LDK_CResult_BlindedHopDecodeErrorZ_clone(int64_t orig) {
        return tag_ptr(ret_conv, true);
 }
 
+void  CS_LDK_CVec_PhantomRouteHintsZ_free(int64_tArray _res) {
+       LDKCVec_PhantomRouteHintsZ _res_constr;
+       _res_constr.datalen = _res->arr_len;
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = _res->elems;
+       for (size_t t = 0; t < _res_constr.datalen; t++) {
+               int64_t _res_conv_19 = _res_vals[t];
+               LDKPhantomRouteHints _res_conv_19_conv;
+               _res_conv_19_conv.inner = untag_ptr(_res_conv_19);
+               _res_conv_19_conv.is_owned = ptr_is_owned(_res_conv_19);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
+               _res_constr.data[t] = _res_conv_19_conv;
+       }
+       FREE(_res);
+       CVec_PhantomRouteHintsZ_free(_res_constr);
+}
+
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(int64_t o) {
+       LDKBolt11Invoice o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = Bolt11Invoice_clone(&o_conv);
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKSignOrCreationError e_conv = *(LDKSignOrCreationError*)(e_ptr);
+       e_conv = SignOrCreationError_clone((LDKSignOrCreationError*)untag_ptr(e));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(int64_t o) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ _res_conv = *(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_Bolt11InvoiceSignOrCreationErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(int64_t orig) {
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_Bolt11InvoiceSignOrCreationErrorZ*)untag_ptr(orig);
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 int64_t  CS_LDK_CResult_InvoiceErrorDecodeErrorZ_ok(int64_t o) {
        LDKInvoiceError o_conv;
        o_conv.inner = untag_ptr(o);
@@ -35520,99 +37308,284 @@ void  CS_LDK_CVec_C2Tuple_OutPointChannelIdZZ_free(int64_tArray _res) {
        CVec_C2Tuple_OutPointChannelIdZZ_free(_res_constr);
 }
 
-void  CS_LDK_CVec_MonitorUpdateIdZ_free(int64_tArray _res) {
-       LDKCVec_MonitorUpdateIdZ _res_constr;
-       _res_constr.datalen = _res->arr_len;
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKMonitorUpdateId), "LDKCVec_MonitorUpdateIdZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = _res->elems;
-       for (size_t r = 0; r < _res_constr.datalen; r++) {
-               int64_t _res_conv_17 = _res_vals[r];
-               LDKMonitorUpdateId _res_conv_17_conv;
-               _res_conv_17_conv.inner = untag_ptr(_res_conv_17);
-               _res_conv_17_conv.is_owned = ptr_is_owned(_res_conv_17);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_17_conv);
-               _res_constr.data[r] = _res_conv_17_conv;
-       }
-       FREE(_res);
-       CVec_MonitorUpdateIdZ_free(_res_constr);
-}
-
-static inline uint64_t C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-       *ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(arg);
+static inline uint64_t C2Tuple_OutPointCVec_u64ZZ_clone_ptr(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u64ZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(int64_t arg) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* arg_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(arg_conv);
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_clone_ptr(int64_t arg) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* arg_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OutPointCVec_u64ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(int64_t orig) {
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* orig_conv = (LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)untag_ptr(orig);
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-       *ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(orig_conv);
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_clone(int64_t orig) {
+       LDKC2Tuple_OutPointCVec_u64ZZ* orig_conv = (LDKC2Tuple_OutPointCVec_u64ZZ*)untag_ptr(orig);
+       LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u64ZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(int64_t a, int64_tArray b) {
+int64_t  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_new(int64_t a, int64_tArray b) {
        LDKOutPoint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
-       LDKCVec_MonitorUpdateIdZ b_constr;
+       LDKCVec_u64Z b_constr;
        b_constr.datalen = b->arr_len;
        if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKMonitorUpdateId), "LDKCVec_MonitorUpdateIdZ Elements");
+               b_constr.data = MALLOC(b_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
        else
                b_constr.data = NULL;
        int64_t* b_vals = b->elems;
-       for (size_t r = 0; r < b_constr.datalen; r++) {
-               int64_t b_conv_17 = b_vals[r];
-               LDKMonitorUpdateId b_conv_17_conv;
-               b_conv_17_conv.inner = untag_ptr(b_conv_17);
-               b_conv_17_conv.is_owned = ptr_is_owned(b_conv_17);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv_17_conv);
-               b_conv_17_conv = MonitorUpdateId_clone(&b_conv_17_conv);
-               b_constr.data[r] = b_conv_17_conv;
+       for (size_t g = 0; g < b_constr.datalen; g++) {
+               int64_t b_conv_6 = b_vals[g];
+               b_constr.data[g] = b_conv_6;
        }
        FREE(b);
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-       *ret_conv = C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(a_conv, b_constr);
+       LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u64ZZ_new(a_conv, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(int64_t _res) {
+void  CS_LDK_C2Tuple_OutPointCVec_u64ZZ_free(int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ _res_conv = *(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)(_res_ptr);
+       LDKC2Tuple_OutPointCVec_u64ZZ _res_conv = *(LDKC2Tuple_OutPointCVec_u64ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(_res_conv);
+       C2Tuple_OutPointCVec_u64ZZ_free(_res_conv);
 }
 
-void  CS_LDK_CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free(int64_tArray _res) {
-       LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ _res_constr;
+void  CS_LDK_CVec_C2Tuple_OutPointCVec_u64ZZZ_free(int64_tArray _res) {
+       LDKCVec_C2Tuple_OutPointCVec_u64ZZZ _res_constr;
        _res_constr.datalen = _res->arr_len;
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKCVec_C2Tuple_OutPointCVec_u64ZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = _res->elems;
-       for (size_t p = 0; p < _res_constr.datalen; p++) {
-               int64_t _res_conv_41 = _res_vals[p];
-               void* _res_conv_41_ptr = untag_ptr(_res_conv_41);
-               CHECK_ACCESS(_res_conv_41_ptr);
-               LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ _res_conv_41_conv = *(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ*)(_res_conv_41_ptr);
-               FREE(untag_ptr(_res_conv_41));
-               _res_constr.data[p] = _res_conv_41_conv;
+       for (size_t d = 0; d < _res_constr.datalen; d++) {
+               int64_t _res_conv_29 = _res_vals[d];
+               void* _res_conv_29_ptr = untag_ptr(_res_conv_29);
+               CHECK_ACCESS(_res_conv_29_ptr);
+               LDKC2Tuple_OutPointCVec_u64ZZ _res_conv_29_conv = *(LDKC2Tuple_OutPointCVec_u64ZZ*)(_res_conv_29_ptr);
+               FREE(untag_ptr(_res_conv_29));
+               _res_constr.data[d] = _res_conv_29_conv;
        }
        FREE(_res);
-       CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free(_res_constr);
+       CVec_C2Tuple_OutPointCVec_u64ZZZ_free(_res_constr);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_ok(int64_t o) {
+       LDKBlindedMessagePath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedMessagePath_clone(&o_conv);
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* o_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedMessagePathDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedMessagePathDecodeErrorZ _res_conv = *(LDKCResult_BlindedMessagePathDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedMessagePathDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* arg_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_BlindedMessagePathDecodeErrorZ* orig_conv = (LDKCResult_BlindedMessagePathDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = CResult_BlindedMessagePathDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_ok(int64_t o) {
+       LDKBlindedMessagePath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = BlindedMessagePath_clone(&o_conv);
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_err() {
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_BlindedMessagePathNoneZ_is_ok(int64_t o) {
+       LDKCResult_BlindedMessagePathNoneZ* o_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_BlindedMessagePathNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_BlindedMessagePathNoneZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_BlindedMessagePathNoneZ _res_conv = *(LDKCResult_BlindedMessagePathNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_BlindedMessagePathNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_BlindedMessagePathNoneZ_clone_ptr(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR arg) {
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_clone_ptr(int64_t arg) {
+       LDKCResult_BlindedMessagePathNoneZ* arg_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_BlindedMessagePathNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_BlindedMessagePathNoneZ_clone(int64_t orig) {
+       LDKCResult_BlindedMessagePathNoneZ* orig_conv = (LDKCResult_BlindedMessagePathNoneZ*)untag_ptr(orig);
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = CResult_BlindedMessagePathNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKMessageContext o_conv = *(LDKMessageContext*)(o_ptr);
+       o_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(o));
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_MessageContextDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_MessageContextDecodeErrorZ* o_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_MessageContextDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_MessageContextDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_MessageContextDecodeErrorZ _res_conv = *(LDKCResult_MessageContextDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_MessageContextDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_MessageContextDecodeErrorZ_clone_ptr(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_MessageContextDecodeErrorZ* arg_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_MessageContextDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_MessageContextDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_MessageContextDecodeErrorZ* orig_conv = (LDKCResult_MessageContextDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = CResult_MessageContextDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_ok(int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKOffersContext o_conv = *(LDKOffersContext*)(o_ptr);
+       o_conv = OffersContext_clone((LDKOffersContext*)untag_ptr(o));
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_err(int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jboolean  CS_LDK_CResult_OffersContextDecodeErrorZ_is_ok(int64_t o) {
+       LDKCResult_OffersContextDecodeErrorZ* o_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_OffersContextDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CResult_OffersContextDecodeErrorZ_free(int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_OffersContextDecodeErrorZ _res_conv = *(LDKCResult_OffersContextDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_OffersContextDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_OffersContextDecodeErrorZ_clone_ptr(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_clone_ptr(int64_t arg) {
+       LDKCResult_OffersContextDecodeErrorZ* arg_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_OffersContextDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CResult_OffersContextDecodeErrorZ_clone(int64_t orig) {
+       LDKCResult_OffersContextDecodeErrorZ* orig_conv = (LDKCResult_OffersContextDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = CResult_OffersContextDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 void  CS_LDK_APIError_free(int64_t this_ptr) {
@@ -35834,6 +37807,29 @@ int64_t  CS_LDK_BigSize_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
+int8_tArray  CS_LDK_UntrustedString_write(int64_t obj) {
+       LDKUntrustedString obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UntrustedString_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_UntrustedString_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
+       *ret_conv = UntrustedString_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
 void  CS_LDK_Hostname_free(int64_t this_obj) {
        LDKHostname this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -36065,7 +38061,7 @@ int64_t  CS_LDK_TransactionU16LenLimited_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_sign(int8_tArray msg, int8_tArray sk) {
+jstring  CS_LDK_sign(int8_tArray msg, int8_tArray sk) {
        LDKu8slice msg_ref;
        msg_ref.datalen = msg->arr_len;
        msg_ref.data = msg->elems;
@@ -36073,10 +38069,11 @@ int64_t  CS_LDK_sign(int8_tArray msg, int8_tArray sk) {
        CHECK(sk->arr_len == 32);
        memcpy(sk_arr, sk->elems, 32); FREE(sk);
        uint8_t (*sk_ref)[32] = &sk_arr;
-       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
-       *ret_conv = sign(msg_ref, sk_ref);
+       LDKStr ret_str = sign(msg_ref, sk_ref);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        FREE(msg);
-       return tag_ptr(ret_conv, true);
+       return ret_conv;
 }
 
 int64_t  CS_LDK_recover_pk(int8_tArray msg, jstring sig) {
@@ -36103,31 +38100,6 @@ jboolean  CS_LDK_verify(int8_tArray msg, jstring sig, int8_tArray pk) {
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_construct_invoice_preimage(int8_tArray hrp_bytes, ptrArray data_without_signature) {
-       LDKu8slice hrp_bytes_ref;
-       hrp_bytes_ref.datalen = hrp_bytes->arr_len;
-       hrp_bytes_ref.data = hrp_bytes->elems;
-       LDKCVec_U5Z data_without_signature_constr;
-       data_without_signature_constr.datalen = data_without_signature->arr_len;
-       if (data_without_signature_constr.datalen > 0)
-               data_without_signature_constr.data = MALLOC(data_without_signature_constr.datalen * sizeof(LDKU5), "LDKCVec_U5Z Elements");
-       else
-               data_without_signature_constr.data = NULL;
-       int8_t* data_without_signature_vals = (void*) data_without_signature->elems;
-       for (size_t h = 0; h < data_without_signature_constr.datalen; h++) {
-               int8_t data_without_signature_conv_7 = data_without_signature_vals[h];
-               
-               data_without_signature_constr.data[h] = (LDKU5){ ._0 = data_without_signature_conv_7 };
-       }
-       FREE(data_without_signature);
-       LDKCVec_u8Z ret_var = construct_invoice_preimage(hrp_bytes_ref, data_without_signature_constr);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       FREE(hrp_bytes);
-       return ret_arr;
-}
-
 void  CS_LDK_KVStore_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -36181,7 +38153,7 @@ void  CS_LDK_MonitorUpdatingPersister_free(int64_t this_obj) {
        MonitorUpdatingPersister_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_MonitorUpdatingPersister_new(int64_t kv_store, int64_t logger, int64_t maximum_pending_updates, int64_t entropy_source, int64_t signer_provider) {
+int64_t  CS_LDK_MonitorUpdatingPersister_new(int64_t kv_store, int64_t logger, int64_t maximum_pending_updates, int64_t entropy_source, int64_t signer_provider, int64_t broadcaster, int64_t fee_estimator) {
        void* kv_store_ptr = untag_ptr(kv_store);
        CHECK_ACCESS(kv_store_ptr);
        LDKKVStore kv_store_conv = *(LDKKVStore*)(kv_store_ptr);
@@ -36210,45 +38182,47 @@ int64_t  CS_LDK_MonitorUpdatingPersister_new(int64_t kv_store, int64_t logger, i
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
        }
-       LDKMonitorUpdatingPersister ret_var = MonitorUpdatingPersister_new(kv_store_conv, logger_conv, maximum_pending_updates, entropy_source_conv, signer_provider_conv);
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       CHECK_ACCESS(broadcaster_ptr);
+       LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(broadcaster_ptr);
+       if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKBroadcasterInterface_JCalls_cloned(&broadcaster_conv);
+       }
+       void* fee_estimator_ptr = untag_ptr(fee_estimator);
+       CHECK_ACCESS(fee_estimator_ptr);
+       LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(fee_estimator_ptr);
+       if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKFeeEstimator_JCalls_cloned(&fee_estimator_conv);
+       }
+       LDKMonitorUpdatingPersister ret_var = MonitorUpdatingPersister_new(kv_store_conv, logger_conv, maximum_pending_updates, entropy_source_conv, signer_provider_conv, broadcaster_conv, fee_estimator_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_MonitorUpdatingPersister_read_all_channel_monitors_with_updates(int64_t this_arg, int64_t broadcaster, int64_t fee_estimator) {
+int64_t  CS_LDK_MonitorUpdatingPersister_read_all_channel_monitors_with_updates(int64_t this_arg) {
        LDKMonitorUpdatingPersister this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* broadcaster_ptr = untag_ptr(broadcaster);
-       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
-       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
-       void* fee_estimator_ptr = untag_ptr(fee_estimator);
-       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
-       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
        LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
-       *ret_conv = MonitorUpdatingPersister_read_all_channel_monitors_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv);
+       *ret_conv = MonitorUpdatingPersister_read_all_channel_monitors_with_updates(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_MonitorUpdatingPersister_read_channel_monitor_with_updates(int64_t this_arg, int64_t broadcaster, int64_t fee_estimator, jstring monitor_key) {
+int64_t  CS_LDK_MonitorUpdatingPersister_read_channel_monitor_with_updates(int64_t this_arg, jstring monitor_key) {
        LDKMonitorUpdatingPersister this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* broadcaster_ptr = untag_ptr(broadcaster);
-       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
-       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
-       void* fee_estimator_ptr = untag_ptr(fee_estimator);
-       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
-       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
        LDKStr monitor_key_conv = str_ref_to_owned_c(monitor_key);
        LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
-       *ret_conv = MonitorUpdatingPersister_read_channel_monitor_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv, monitor_key_conv);
+       *ret_conv = MonitorUpdatingPersister_read_channel_monitor_with_updates(&this_arg_conv, monitor_key_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -36323,186 +38297,6 @@ int64_t  CS_LDK_scid_from_parts(int64_t block, int64_t tx_index, int64_t vout_in
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_UntrustedString_free(int64_t this_obj) {
-       LDKUntrustedString this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UntrustedString_free(this_obj_conv);
-}
-
-jstring  CS_LDK_UntrustedString_get_a(int64_t this_ptr) {
-       LDKUntrustedString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr ret_str = UntrustedString_get_a(&this_ptr_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-void  CS_LDK_UntrustedString_set_a(int64_t this_ptr, jstring val) {
-       LDKUntrustedString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr val_conv = str_ref_to_owned_c(val);
-       UntrustedString_set_a(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_UntrustedString_new(jstring a_arg) {
-       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
-       LDKUntrustedString ret_var = UntrustedString_new(a_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t UntrustedString_clone_ptr(LDKUntrustedString *NONNULL_PTR arg) {
-       LDKUntrustedString ret_var = UntrustedString_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_UntrustedString_clone_ptr(int64_t arg) {
-       LDKUntrustedString arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = UntrustedString_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_UntrustedString_clone(int64_t orig) {
-       LDKUntrustedString orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKUntrustedString ret_var = UntrustedString_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_UntrustedString_eq(int64_t a, int64_t b) {
-       LDKUntrustedString a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKUntrustedString b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = UntrustedString_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_UntrustedString_hash(int64_t o) {
-       LDKUntrustedString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = UntrustedString_hash(&o_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_UntrustedString_write(int64_t obj) {
-       LDKUntrustedString obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UntrustedString_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_UntrustedString_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_UntrustedStringDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UntrustedStringDecodeErrorZ), "LDKCResult_UntrustedStringDecodeErrorZ");
-       *ret_conv = UntrustedString_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-jstring  CS_LDK_UntrustedString_to_str(int64_t o) {
-       LDKUntrustedString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = UntrustedString_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-void  CS_LDK_PrintableString_free(int64_t this_obj) {
-       LDKPrintableString this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PrintableString_free(this_obj_conv);
-}
-
-jstring  CS_LDK_PrintableString_get_a(int64_t this_ptr) {
-       LDKPrintableString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr ret_str = PrintableString_get_a(&this_ptr_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-void  CS_LDK_PrintableString_set_a(int64_t this_ptr, jstring val) {
-       LDKPrintableString this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKStr val_conv = str_ref_to_owned_c(val);
-       PrintableString_set_a(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_PrintableString_new(jstring a_arg) {
-       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
-       LDKPrintableString ret_var = PrintableString_new(a_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-jstring  CS_LDK_PrintableString_to_str(int64_t o) {
-       LDKPrintableString o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = PrintableString_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
 void  CS_LDK_TrackedSpendableOutput_free(int64_t this_obj) {
        LDKTrackedSpendableOutput this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -37218,6 +39012,29 @@ int64_t  CS_LDK_Sleeper_from_two_futures(int64_t fut_a, int64_t fut_b) {
        return ret_ref;
 }
 
+int64_t  CS_LDK_Sleeper_from_three_futures(int64_t fut_a, int64_t fut_b, int64_t fut_c) {
+       LDKFuture fut_a_conv;
+       fut_a_conv.inner = untag_ptr(fut_a);
+       fut_a_conv.is_owned = ptr_is_owned(fut_a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fut_a_conv);
+       fut_a_conv.is_owned = false;
+       LDKFuture fut_b_conv;
+       fut_b_conv.inner = untag_ptr(fut_b);
+       fut_b_conv.is_owned = ptr_is_owned(fut_b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fut_b_conv);
+       fut_b_conv.is_owned = false;
+       LDKFuture fut_c_conv;
+       fut_c_conv.inner = untag_ptr(fut_c);
+       fut_c_conv.is_owned = ptr_is_owned(fut_c);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fut_c_conv);
+       fut_c_conv.is_owned = false;
+       LDKSleeper ret_var = Sleeper_from_three_futures(&fut_a_conv, &fut_b_conv, &fut_c_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 int64_t  CS_LDK_Sleeper_new(int64_tArray futures) {
        LDKCVec_FutureZ futures_constr;
        futures_constr.datalen = futures->arr_len;
@@ -37488,7 +39305,32 @@ void  CS_LDK_Record_set_line(int64_t this_ptr, int32_t val) {
        Record_set_line(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Record_new(int32_t level_arg, int8_tArray peer_id_arg, int64_t channel_id_arg, jstring args_arg, jstring module_path_arg, jstring file_arg, int32_t line_arg) {
+int64_t  CS_LDK_Record_get_payment_hash(int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = Record_get_payment_hash(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_Record_set_payment_hash(int64_t this_ptr, int64_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       Record_set_payment_hash(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_Record_new(int32_t level_arg, int8_tArray peer_id_arg, int64_t channel_id_arg, jstring args_arg, jstring module_path_arg, jstring file_arg, int32_t line_arg, int64_t payment_hash_arg) {
        LDKLevel level_arg_conv = LDKLevel_from_cs(level_arg);
        LDKPublicKey peer_id_arg_ref;
        CHECK(peer_id_arg->arr_len == 33);
@@ -37501,7 +39343,11 @@ int64_t  CS_LDK_Record_new(int32_t level_arg, int8_tArray peer_id_arg, int64_t c
        LDKStr args_arg_conv = str_ref_to_owned_c(args_arg);
        LDKStr module_path_arg_conv = str_ref_to_owned_c(module_path_arg);
        LDKStr file_arg_conv = str_ref_to_owned_c(file_arg);
-       LDKRecord ret_var = Record_new(level_arg_conv, peer_id_arg_ref, channel_id_arg_conv, args_arg_conv, module_path_arg_conv, file_arg_conv, line_arg);
+       void* payment_hash_arg_ptr = untag_ptr(payment_hash_arg);
+       CHECK_ACCESS(payment_hash_arg_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_arg_ptr);
+       payment_hash_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash_arg));
+       LDKRecord ret_var = Record_new(level_arg_conv, peer_id_arg_ref, channel_id_arg_conv, args_arg_conv, module_path_arg_conv, file_arg_conv, line_arg, payment_hash_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -37650,23 +39496,23 @@ void  CS_LDK_ChannelHandshakeConfig_set_negotiate_scid_privacy(int64_t this_ptr,
        ChannelHandshakeConfig_set_negotiate_scid_privacy(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_ChannelHandshakeConfig_get_announced_channel(int64_t this_ptr) {
+jboolean  CS_LDK_ChannelHandshakeConfig_get_announce_for_forwarding(int64_t this_ptr) {
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelHandshakeConfig_get_announced_channel(&this_ptr_conv);
+       jboolean ret_conv = ChannelHandshakeConfig_get_announce_for_forwarding(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelHandshakeConfig_set_announced_channel(int64_t this_ptr, jboolean val) {
+void  CS_LDK_ChannelHandshakeConfig_set_announce_for_forwarding(int64_t this_ptr, jboolean val) {
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelHandshakeConfig_set_announced_channel(&this_ptr_conv, val);
+       ChannelHandshakeConfig_set_announce_for_forwarding(&this_ptr_conv, val);
 }
 
 jboolean  CS_LDK_ChannelHandshakeConfig_get_commit_upfront_shutdown_pubkey(int64_t this_ptr) {
@@ -37745,8 +39591,8 @@ void  CS_LDK_ChannelHandshakeConfig_set_our_max_accepted_htlcs(int64_t this_ptr,
        ChannelHandshakeConfig_set_our_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelHandshakeConfig_new(int32_t minimum_depth_arg, int16_t our_to_self_delay_arg, int64_t our_htlc_minimum_msat_arg, int8_t max_inbound_htlc_value_in_flight_percent_of_channel_arg, jboolean negotiate_scid_privacy_arg, jboolean announced_channel_arg, jboolean commit_upfront_shutdown_pubkey_arg, int32_t their_channel_reserve_proportional_millionths_arg, jboolean negotiate_anchors_zero_fee_htlc_tx_arg, int16_t our_max_accepted_htlcs_arg) {
-       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg, max_inbound_htlc_value_in_flight_percent_of_channel_arg, negotiate_scid_privacy_arg, announced_channel_arg, commit_upfront_shutdown_pubkey_arg, their_channel_reserve_proportional_millionths_arg, negotiate_anchors_zero_fee_htlc_tx_arg, our_max_accepted_htlcs_arg);
+int64_t  CS_LDK_ChannelHandshakeConfig_new(int32_t minimum_depth_arg, int16_t our_to_self_delay_arg, int64_t our_htlc_minimum_msat_arg, int8_t max_inbound_htlc_value_in_flight_percent_of_channel_arg, jboolean negotiate_scid_privacy_arg, jboolean announce_for_forwarding_arg, jboolean commit_upfront_shutdown_pubkey_arg, int32_t their_channel_reserve_proportional_millionths_arg, jboolean negotiate_anchors_zero_fee_htlc_tx_arg, int16_t our_max_accepted_htlcs_arg) {
+       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg, max_inbound_htlc_value_in_flight_percent_of_channel_arg, negotiate_scid_privacy_arg, announce_for_forwarding_arg, commit_upfront_shutdown_pubkey_arg, their_channel_reserve_proportional_millionths_arg, negotiate_anchors_zero_fee_htlc_tx_arg, our_max_accepted_htlcs_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -38495,14 +40341,6 @@ int64_t  CS_LDK_ChannelConfigUpdate_new(int64_t forwarding_fee_proportional_mill
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelConfigUpdate_default() {
-       LDKChannelConfigUpdate ret_var = ChannelConfigUpdate_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
 void  CS_LDK_UserConfig_free(int64_t this_obj) {
        LDKUserConfig this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -38687,7 +40525,26 @@ void  CS_LDK_UserConfig_set_accept_mpp_keysend(int64_t this_ptr, jboolean val) {
        UserConfig_set_accept_mpp_keysend(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_UserConfig_new(int64_t channel_handshake_config_arg, int64_t channel_handshake_limits_arg, int64_t channel_config_arg, jboolean accept_forwards_to_priv_channels_arg, jboolean accept_inbound_channels_arg, jboolean manually_accept_inbound_channels_arg, jboolean accept_intercept_htlcs_arg, jboolean accept_mpp_keysend_arg) {
+jboolean  CS_LDK_UserConfig_get_manually_handle_bolt12_invoices(int64_t this_ptr) {
+       LDKUserConfig this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = UserConfig_get_manually_handle_bolt12_invoices(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_UserConfig_set_manually_handle_bolt12_invoices(int64_t this_ptr, jboolean val) {
+       LDKUserConfig this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       UserConfig_set_manually_handle_bolt12_invoices(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_UserConfig_new(int64_t channel_handshake_config_arg, int64_t channel_handshake_limits_arg, int64_t channel_config_arg, jboolean accept_forwards_to_priv_channels_arg, jboolean accept_inbound_channels_arg, jboolean manually_accept_inbound_channels_arg, jboolean accept_intercept_htlcs_arg, jboolean accept_mpp_keysend_arg, jboolean manually_handle_bolt12_invoices_arg) {
        LDKChannelHandshakeConfig channel_handshake_config_arg_conv;
        channel_handshake_config_arg_conv.inner = untag_ptr(channel_handshake_config_arg);
        channel_handshake_config_arg_conv.is_owned = ptr_is_owned(channel_handshake_config_arg);
@@ -38703,7 +40560,7 @@ int64_t  CS_LDK_UserConfig_new(int64_t channel_handshake_config_arg, int64_t cha
        channel_config_arg_conv.is_owned = ptr_is_owned(channel_config_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_config_arg_conv);
        channel_config_arg_conv = ChannelConfig_clone(&channel_config_arg_conv);
-       LDKUserConfig ret_var = UserConfig_new(channel_handshake_config_arg_conv, channel_handshake_limits_arg_conv, channel_config_arg_conv, accept_forwards_to_priv_channels_arg, accept_inbound_channels_arg, manually_accept_inbound_channels_arg, accept_intercept_htlcs_arg, accept_mpp_keysend_arg);
+       LDKUserConfig ret_var = UserConfig_new(channel_handshake_config_arg_conv, channel_handshake_limits_arg_conv, channel_config_arg_conv, accept_forwards_to_priv_channels_arg, accept_inbound_channels_arg, manually_accept_inbound_channels_arg, accept_intercept_htlcs_arg, accept_mpp_keysend_arg, manually_handle_bolt12_invoices_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -39137,8 +40994,13 @@ int32_t  CS_LDK_ConfirmationTarget_clone(int64_t orig) {
        return ret_conv;
 }
 
-int32_t  CS_LDK_ConfirmationTarget_on_chain_sweep() {
-       int32_t ret_conv = LDKConfirmationTarget_to_cs(ConfirmationTarget_on_chain_sweep());
+int32_t  CS_LDK_ConfirmationTarget_maximum_fee_estimate() {
+       int32_t ret_conv = LDKConfirmationTarget_to_cs(ConfirmationTarget_maximum_fee_estimate());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_ConfirmationTarget_urgent_on_chain_sweep() {
+       int32_t ret_conv = LDKConfirmationTarget_to_cs(ConfirmationTarget_urgent_on_chain_sweep());
        return ret_conv;
 }
 
@@ -39194,69 +41056,6 @@ void  CS_LDK_FeeEstimator_free(int64_t this_ptr) {
        FeeEstimator_free(this_ptr_conv);
 }
 
-void  CS_LDK_MonitorUpdateId_free(int64_t this_obj) {
-       LDKMonitorUpdateId this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MonitorUpdateId_free(this_obj_conv);
-}
-
-static inline uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg) {
-       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_MonitorUpdateId_clone_ptr(int64_t arg) {
-       LDKMonitorUpdateId arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = MonitorUpdateId_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_MonitorUpdateId_clone(int64_t orig) {
-       LDKMonitorUpdateId orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_MonitorUpdateId_hash(int64_t o) {
-       LDKMonitorUpdateId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = MonitorUpdateId_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_MonitorUpdateId_eq(int64_t a, int64_t b) {
-       LDKMonitorUpdateId a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKMonitorUpdateId b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = MonitorUpdateId_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
 void  CS_LDK_Persist_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -39409,14 +41208,14 @@ int64_tArray  CS_LDK_ChainMonitor_list_pending_monitor_updates(int64_t this_arg)
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ ret_var = ChainMonitor_list_pending_monitor_updates(&this_arg_conv);
+       LDKCVec_C2Tuple_OutPointCVec_u64ZZZ ret_var = ChainMonitor_list_pending_monitor_updates(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t p = 0; p < ret_var.datalen; p++) {
-               LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ* ret_conv_41_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ), "LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ");
-               *ret_conv_41_conv = ret_var.data[p];
-               ret_arr_ptr[p] = tag_ptr(ret_conv_41_conv, true);
+       for (size_t d = 0; d < ret_var.datalen; d++) {
+               LDKC2Tuple_OutPointCVec_u64ZZ* ret_conv_29_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u64ZZ), "LDKC2Tuple_OutPointCVec_u64ZZ");
+               *ret_conv_29_conv = ret_var.data[d];
+               ret_arr_ptr[d] = tag_ptr(ret_conv_29_conv, true);
        }
        
        FREE(ret_var.data);
@@ -39434,13 +41233,8 @@ int64_t  CS_LDK_ChainMonitor_channel_monitor_updated(int64_t this_arg, int64_t f
        funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
-       LDKMonitorUpdateId completed_update_id_conv;
-       completed_update_id_conv.inner = untag_ptr(completed_update_id);
-       completed_update_id_conv.is_owned = ptr_is_owned(completed_update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(completed_update_id_conv);
-       completed_update_id_conv = MonitorUpdateId_clone(&completed_update_id_conv);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id_conv);
+       *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id);
        return tag_ptr(ret_conv, true);
 }
 
@@ -39848,6 +41642,39 @@ int64_t  CS_LDK_HTLCUpdate_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
+int32_t  CS_LDK_BalanceSource_clone(int64_t orig) {
+       LDKBalanceSource* orig_conv = (LDKBalanceSource*)untag_ptr(orig);
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_clone(orig_conv));
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_holder_force_closed() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_holder_force_closed());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_counterparty_force_closed() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_counterparty_force_closed());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_coop_close() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_coop_close());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_BalanceSource_htlc() {
+       int32_t ret_conv = LDKBalanceSource_to_cs(BalanceSource_htlc());
+       return ret_conv;
+}
+
+jboolean  CS_LDK_BalanceSource_eq(int64_t a, int64_t b) {
+       LDKBalanceSource* a_conv = (LDKBalanceSource*)untag_ptr(a);
+       LDKBalanceSource* b_conv = (LDKBalanceSource*)untag_ptr(b);
+       jboolean ret_conv = BalanceSource_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_Balance_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -39877,16 +41704,17 @@ int64_t  CS_LDK_Balance_clone(int64_t orig) {
        return ret_ref;
 }
 
-int64_t  CS_LDK_Balance_claimable_on_channel_close(int64_t amount_satoshis) {
+int64_t  CS_LDK_Balance_claimable_on_channel_close(int64_t amount_satoshis, int64_t transaction_fee_satoshis, int64_t outbound_payment_htlc_rounded_msat, int64_t outbound_forwarded_htlc_rounded_msat, int64_t inbound_claiming_htlc_rounded_msat, int64_t inbound_htlc_rounded_msat) {
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
-       *ret_copy = Balance_claimable_on_channel_close(amount_satoshis);
+       *ret_copy = Balance_claimable_on_channel_close(amount_satoshis, transaction_fee_satoshis, outbound_payment_htlc_rounded_msat, outbound_forwarded_htlc_rounded_msat, inbound_claiming_htlc_rounded_msat, inbound_htlc_rounded_msat);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Balance_claimable_awaiting_confirmations(int64_t amount_satoshis, int32_t confirmation_height) {
+int64_t  CS_LDK_Balance_claimable_awaiting_confirmations(int64_t amount_satoshis, int32_t confirmation_height, int32_t source) {
+       LDKBalanceSource source_conv = LDKBalanceSource_from_cs(source);
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
-       *ret_copy = Balance_claimable_awaiting_confirmations(amount_satoshis, confirmation_height);
+       *ret_copy = Balance_claimable_awaiting_confirmations(amount_satoshis, confirmation_height, source_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -39904,12 +41732,12 @@ int64_t  CS_LDK_Balance_contentious_claimable(int64_t amount_satoshis, int32_t t
        return ret_ref;
 }
 
-int64_t  CS_LDK_Balance_maybe_timeout_claimable_htlc(int64_t amount_satoshis, int32_t claimable_height, int8_tArray payment_hash) {
+int64_t  CS_LDK_Balance_maybe_timeout_claimable_htlc(int64_t amount_satoshis, int32_t claimable_height, int8_tArray payment_hash, jboolean outbound_payment) {
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(payment_hash->arr_len == 32);
        memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
-       *ret_copy = Balance_maybe_timeout_claimable_htlc(amount_satoshis, claimable_height, payment_hash_ref);
+       *ret_copy = Balance_maybe_timeout_claimable_htlc(amount_satoshis, claimable_height, payment_hash_ref, outbound_payment);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -40110,7 +41938,7 @@ int64_tArray  CS_LDK_ChannelMonitor_get_and_clear_pending_monitor_events(int64_t
        return ret_arr;
 }
 
-void  CS_LDK_ChannelMonitor_process_pending_events(int64_t this_arg, int64_t handler) {
+int64_t  CS_LDK_ChannelMonitor_process_pending_events(int64_t this_arg, int64_t handler) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -40119,7 +41947,9 @@ void  CS_LDK_ChannelMonitor_process_pending_events(int64_t this_arg, int64_t han
        void* handler_ptr = untag_ptr(handler);
        if (ptr_is_owned(handler)) { CHECK_ACCESS(handler_ptr); }
        LDKEventHandler* handler_conv = (LDKEventHandler*)handler_ptr;
-       ChannelMonitor_process_pending_events(&this_arg_conv, handler_conv);
+       LDKCResult_NoneReplayEventZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneReplayEventZ), "LDKCResult_NoneReplayEventZ");
+       *ret_conv = ChannelMonitor_process_pending_events(&this_arg_conv, handler_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 int64_t  CS_LDK_ChannelMonitor_initial_counterparty_commitment_tx(int64_t this_arg) {
@@ -40481,6 +42311,16 @@ void  CS_LDK_ChannelMonitor_rebroadcast_pending_claims(int64_t this_arg, int64_t
        ChannelMonitor_rebroadcast_pending_claims(&this_arg_conv, broadcaster_conv, fee_estimator_conv, logger_conv);
 }
 
+jboolean  CS_LDK_ChannelMonitor_has_pending_claims(int64_t this_arg) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelMonitor_has_pending_claims(&this_arg_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_ChannelMonitor_signer_unblocked(int64_t this_arg, int64_t broadcaster, int64_t fee_estimator, int64_t logger) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -40884,11 +42724,19 @@ int64_t  CS_LDK_peel_payment_onion(int64_t msg, int64_t node_signer, int64_t log
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv.is_owned = false;
        void* node_signer_ptr = untag_ptr(node_signer);
-       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
-       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
        void* logger_ptr = untag_ptr(logger);
-       if (ptr_is_owned(logger)) { CHECK_ACCESS(logger_ptr); }
-       LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
        LDKCResult_PendingHTLCInfoInboundHTLCErrZ* ret_conv = MALLOC(sizeof(LDKCResult_PendingHTLCInfoInboundHTLCErrZ), "LDKCResult_PendingHTLCInfoInboundHTLCErrZ");
        *ret_conv = peel_payment_onion(&msg_conv, node_signer_conv, logger_conv, cur_height, accept_mpp_keysend, allow_skimmed_fees);
        return tag_ptr(ret_conv, true);
@@ -41065,12 +42913,38 @@ void  CS_LDK_BlindedForward_set_failure(int64_t this_ptr, int32_t val) {
        BlindedForward_set_failure(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_BlindedForward_new(int8_tArray inbound_blinding_point_arg, int32_t failure_arg) {
+int8_tArray  CS_LDK_BlindedForward_get_next_blinding_override(int64_t this_ptr) {
+       LDKBlindedForward this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedForward_get_next_blinding_override(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_BlindedForward_set_next_blinding_override(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedForward this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       BlindedForward_set_next_blinding_override(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_BlindedForward_new(int8_tArray inbound_blinding_point_arg, int32_t failure_arg, int8_tArray next_blinding_override_arg) {
        LDKPublicKey inbound_blinding_point_arg_ref;
        CHECK(inbound_blinding_point_arg->arr_len == 33);
        memcpy(inbound_blinding_point_arg_ref.compressed_form, inbound_blinding_point_arg->elems, 33); FREE(inbound_blinding_point_arg);
        LDKBlindedFailure failure_arg_conv = LDKBlindedFailure_from_cs(failure_arg);
-       LDKBlindedForward ret_var = BlindedForward_new(inbound_blinding_point_arg_ref, failure_arg_conv);
+       LDKPublicKey next_blinding_override_arg_ref;
+       CHECK(next_blinding_override_arg->arr_len == 33);
+       memcpy(next_blinding_override_arg_ref.compressed_form, next_blinding_override_arg->elems, 33); FREE(next_blinding_override_arg);
+       LDKBlindedForward ret_var = BlindedForward_new(inbound_blinding_point_arg_ref, failure_arg_conv, next_blinding_override_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -42038,7 +43912,7 @@ int64_t  CS_LDK_ChannelManager_close_channel_with_feerate_and_script(int64_t thi
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelManager_force_close_broadcasting_latest_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id) {
+int64_t  CS_LDK_ChannelManager_force_close_broadcasting_latest_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -42052,12 +43926,13 @@ int64_t  CS_LDK_ChannelManager_force_close_broadcasting_latest_txn(int64_t this_
        LDKPublicKey counterparty_node_id_ref;
        CHECK(counterparty_node_id->arr_len == 33);
        memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChannelManager_force_close_broadcasting_latest_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref);
+       *ret_conv = ChannelManager_force_close_broadcasting_latest_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref, error_message_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelManager_force_close_without_broadcasting_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id) {
+int64_t  CS_LDK_ChannelManager_force_close_without_broadcasting_txn(int64_t this_arg, int64_t channel_id, int8_tArray counterparty_node_id, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -42071,27 +43946,30 @@ int64_t  CS_LDK_ChannelManager_force_close_without_broadcasting_txn(int64_t this
        LDKPublicKey counterparty_node_id_ref;
        CHECK(counterparty_node_id->arr_len == 33);
        memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChannelManager_force_close_without_broadcasting_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref);
+       *ret_conv = ChannelManager_force_close_without_broadcasting_txn(&this_arg_conv, &channel_id_conv, counterparty_node_id_ref, error_message_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelManager_force_close_all_channels_broadcasting_latest_txn(int64_t this_arg) {
+void  CS_LDK_ChannelManager_force_close_all_channels_broadcasting_latest_txn(int64_t this_arg, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelManager_force_close_all_channels_broadcasting_latest_txn(&this_arg_conv);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
+       ChannelManager_force_close_all_channels_broadcasting_latest_txn(&this_arg_conv, error_message_conv);
 }
 
-void  CS_LDK_ChannelManager_force_close_all_channels_without_broadcasting_txn(int64_t this_arg) {
+void  CS_LDK_ChannelManager_force_close_all_channels_without_broadcasting_txn(int64_t this_arg, jstring error_message) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelManager_force_close_all_channels_without_broadcasting_txn(&this_arg_conv);
+       LDKStr error_message_conv = str_ref_to_owned_c(error_message);
+       ChannelManager_force_close_all_channels_without_broadcasting_txn(&this_arg_conv, error_message_conv);
 }
 
 int64_t  CS_LDK_ChannelManager_send_payment_with_route(int64_t this_arg, int64_t route, int8_tArray payment_hash, int64_t recipient_onion, int8_tArray payment_id) {
@@ -42104,7 +43982,7 @@ int64_t  CS_LDK_ChannelManager_send_payment_with_route(int64_t this_arg, int64_t
        route_conv.inner = untag_ptr(route);
        route_conv.is_owned = ptr_is_owned(route);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
-       route_conv.is_owned = false;
+       route_conv = Route_clone(&route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(payment_hash->arr_len == 32);
        memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
@@ -42117,7 +43995,7 @@ int64_t  CS_LDK_ChannelManager_send_payment_with_route(int64_t this_arg, int64_t
        CHECK(payment_id->arr_len == 32);
        memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
        LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
-       *ret_conv = ChannelManager_send_payment_with_route(&this_arg_conv, &route_conv, payment_hash_ref, recipient_onion_conv, payment_id_ref);
+       *ret_conv = ChannelManager_send_payment_with_route(&this_arg_conv, route_conv, payment_hash_ref, recipient_onion_conv, payment_id_ref);
        return tag_ptr(ret_conv, true);
 }
 
@@ -42288,7 +44166,7 @@ int64_t  CS_LDK_ChannelManager_funding_transaction_generated(int64_t this_arg, i
        temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
        temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
-       temporary_channel_id_conv.is_owned = false;
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
        LDKPublicKey counterparty_node_id_ref;
        CHECK(counterparty_node_id->arr_len == 33);
        memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
@@ -42298,7 +44176,31 @@ int64_t  CS_LDK_ChannelManager_funding_transaction_generated(int64_t this_arg, i
        memcpy(funding_transaction_ref.data, funding_transaction->elems, funding_transaction_ref.datalen); FREE(funding_transaction);
        funding_transaction_ref.data_is_owned = true;
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
-       *ret_conv = ChannelManager_funding_transaction_generated(&this_arg_conv, &temporary_channel_id_conv, counterparty_node_id_ref, funding_transaction_ref);
+       *ret_conv = ChannelManager_funding_transaction_generated(&this_arg_conv, temporary_channel_id_conv, counterparty_node_id_ref, funding_transaction_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_ChannelManager_unsafe_manual_funding_transaction_generated(int64_t this_arg, int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelId temporary_channel_id_conv;
+       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
+       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKOutPoint funding_conv;
+       funding_conv.inner = untag_ptr(funding);
+       funding_conv.is_owned = ptr_is_owned(funding);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_conv);
+       funding_conv = OutPoint_clone(&funding_conv);
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = ChannelManager_unsafe_manual_funding_transaction_generated(&this_arg_conv, temporary_channel_id_conv, counterparty_node_id_ref, funding_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -42569,14 +44471,18 @@ int64_t  CS_LDK_ChannelManager_accept_inbound_channel_from_trusted_peer_0conf(in
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelManager_create_offer_builder(int64_t this_arg) {
+int64_t  CS_LDK_ChannelManager_create_offer_builder(int64_t this_arg, int64_t absolute_expiry) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
+       void* absolute_expiry_ptr = untag_ptr(absolute_expiry);
+       CHECK_ACCESS(absolute_expiry_ptr);
+       LDKCOption_u64Z absolute_expiry_conv = *(LDKCOption_u64Z*)(absolute_expiry_ptr);
+       absolute_expiry_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(absolute_expiry));
        LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ");
-       *ret_conv = ChannelManager_create_offer_builder(&this_arg_conv);
+       *ret_conv = ChannelManager_create_offer_builder(&this_arg_conv, absolute_expiry_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -42915,6 +44821,17 @@ int64_t  CS_LDK_ChannelManager_as_OffersMessageHandler(int64_t this_arg) {
        return tag_ptr(ret_ret, true);
 }
 
+int64_t  CS_LDK_ChannelManager_as_AsyncPaymentsMessageHandler(int64_t this_arg) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAsyncPaymentsMessageHandler* ret_ret = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler), "LDKAsyncPaymentsMessageHandler");
+       *ret_ret = ChannelManager_as_AsyncPaymentsMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
 int64_t  CS_LDK_ChannelManager_as_NodeIdLookUp(int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -45717,23 +47634,23 @@ void  CS_LDK_ChannelDetails_set_is_usable(int64_t this_ptr, jboolean val) {
        ChannelDetails_set_is_usable(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_ChannelDetails_get_is_public(int64_t this_ptr) {
+jboolean  CS_LDK_ChannelDetails_get_is_announced(int64_t this_ptr) {
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelDetails_get_is_public(&this_ptr_conv);
+       jboolean ret_conv = ChannelDetails_get_is_announced(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelDetails_set_is_public(int64_t this_ptr, jboolean val) {
+void  CS_LDK_ChannelDetails_set_is_announced(int64_t this_ptr, jboolean val) {
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelDetails_set_is_public(&this_ptr_conv, val);
+       ChannelDetails_set_is_announced(&this_ptr_conv, val);
 }
 
 int64_t  CS_LDK_ChannelDetails_get_inbound_htlc_minimum_msat(int64_t this_ptr) {
@@ -45909,7 +47826,7 @@ void  CS_LDK_ChannelDetails_set_pending_outbound_htlcs(int64_t this_ptr, int64_t
        ChannelDetails_set_pending_outbound_htlcs(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_arg, int64_t funding_txo_arg, int64_t channel_type_arg, int64_t short_channel_id_arg, int64_t outbound_scid_alias_arg, int64_t inbound_scid_alias_arg, int64_t channel_value_satoshis_arg, int64_t unspendable_punishment_reserve_arg, int8_tArray user_channel_id_arg, int64_t feerate_sat_per_1000_weight_arg, int64_t balance_msat_arg, int64_t outbound_capacity_msat_arg, int64_t next_outbound_htlc_limit_msat_arg, int64_t next_outbound_htlc_minimum_msat_arg, int64_t inbound_capacity_msat_arg, int64_t confirmations_required_arg, int64_t confirmations_arg, int64_t force_close_spend_delay_arg, jboolean is_outbound_arg, jboolean is_channel_ready_arg, int64_t channel_shutdown_state_arg, jboolean is_usable_arg, jboolean is_public_arg, int64_t inbound_htlc_minimum_msat_arg, int64_t inbound_htlc_maximum_msat_arg, int64_t config_arg, int64_tArray pending_inbound_htlcs_arg, int64_tArray pending_outbound_htlcs_arg) {
+int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_arg, int64_t funding_txo_arg, int64_t channel_type_arg, int64_t short_channel_id_arg, int64_t outbound_scid_alias_arg, int64_t inbound_scid_alias_arg, int64_t channel_value_satoshis_arg, int64_t unspendable_punishment_reserve_arg, int8_tArray user_channel_id_arg, int64_t feerate_sat_per_1000_weight_arg, int64_t balance_msat_arg, int64_t outbound_capacity_msat_arg, int64_t next_outbound_htlc_limit_msat_arg, int64_t next_outbound_htlc_minimum_msat_arg, int64_t inbound_capacity_msat_arg, int64_t confirmations_required_arg, int64_t confirmations_arg, int64_t force_close_spend_delay_arg, jboolean is_outbound_arg, jboolean is_channel_ready_arg, int64_t channel_shutdown_state_arg, jboolean is_usable_arg, jboolean is_announced_arg, int64_t inbound_htlc_minimum_msat_arg, int64_t inbound_htlc_maximum_msat_arg, int64_t config_arg, int64_tArray pending_inbound_htlcs_arg, int64_tArray pending_outbound_htlcs_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -45945,6 +47862,7 @@ int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_
        void* unspendable_punishment_reserve_arg_ptr = untag_ptr(unspendable_punishment_reserve_arg);
        CHECK_ACCESS(unspendable_punishment_reserve_arg_ptr);
        LDKCOption_u64Z unspendable_punishment_reserve_arg_conv = *(LDKCOption_u64Z*)(unspendable_punishment_reserve_arg_ptr);
+       unspendable_punishment_reserve_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(unspendable_punishment_reserve_arg));
        LDKU128 user_channel_id_arg_ref;
        CHECK(user_channel_id_arg->arr_len == 16);
        memcpy(user_channel_id_arg_ref.le_bytes, user_channel_id_arg->elems, 16); FREE(user_channel_id_arg);
@@ -46015,7 +47933,7 @@ int64_t  CS_LDK_ChannelDetails_new(int64_t channel_id_arg, int64_t counterparty_
                pending_outbound_htlcs_arg_constr.data[v] = pending_outbound_htlcs_arg_conv_21_conv;
        }
        FREE(pending_outbound_htlcs_arg);
-       LDKChannelDetails ret_var = ChannelDetails_new(channel_id_arg_conv, counterparty_arg_conv, funding_txo_arg_conv, channel_type_arg_conv, short_channel_id_arg_conv, outbound_scid_alias_arg_conv, inbound_scid_alias_arg_conv, channel_value_satoshis_arg, unspendable_punishment_reserve_arg_conv, user_channel_id_arg_ref, feerate_sat_per_1000_weight_arg_conv, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg_conv, confirmations_arg_conv, force_close_spend_delay_arg_conv, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg_conv, is_usable_arg, is_public_arg, inbound_htlc_minimum_msat_arg_conv, inbound_htlc_maximum_msat_arg_conv, config_arg_conv, pending_inbound_htlcs_arg_constr, pending_outbound_htlcs_arg_constr);
+       LDKChannelDetails ret_var = ChannelDetails_new(channel_id_arg_conv, counterparty_arg_conv, funding_txo_arg_conv, channel_type_arg_conv, short_channel_id_arg_conv, outbound_scid_alias_arg_conv, inbound_scid_alias_arg_conv, channel_value_satoshis_arg, unspendable_punishment_reserve_arg_conv, user_channel_id_arg_ref, feerate_sat_per_1000_weight_arg_conv, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg_conv, confirmations_arg_conv, force_close_spend_delay_arg_conv, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg_conv, is_usable_arg, is_announced_arg, inbound_htlc_minimum_msat_arg_conv, inbound_htlc_maximum_msat_arg_conv, config_arg_conv, pending_inbound_htlcs_arg_constr, pending_outbound_htlcs_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -46417,6 +48335,7 @@ int64_t  CS_LDK_Init_new(int64_t features_arg, int64_t networks_arg, int64_t rem
        void* remote_network_address_arg_ptr = untag_ptr(remote_network_address_arg);
        CHECK_ACCESS(remote_network_address_arg_ptr);
        LDKCOption_SocketAddressZ remote_network_address_arg_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_arg_ptr);
+       remote_network_address_arg_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(remote_network_address_arg));
        LDKInit ret_var = Init_new(features_arg_conv, networks_arg_conv, remote_network_address_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
@@ -47428,6 +49347,204 @@ jboolean  CS_LDK_CommonOpenChannelFields_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
+int64_t  CS_LDK_CommonOpenChannelFields_channel_parameters(int64_t this_arg) {
+       LDKCommonOpenChannelFields this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelParameters ret_var = CommonOpenChannelFields_channel_parameters(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ChannelParameters_free(int64_t this_obj) {
+       LDKChannelParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelParameters_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_ChannelParameters_get_dust_limit_satoshis(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_get_dust_limit_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_dust_limit_satoshis(int64_t this_ptr, int64_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_dust_limit_satoshis(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelParameters_get_max_htlc_value_in_flight_msat(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_max_htlc_value_in_flight_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelParameters_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_htlc_minimum_msat(&this_ptr_conv, val);
+}
+
+int32_t  CS_LDK_ChannelParameters_get_commitment_feerate_sat_per_1000_weight(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = ChannelParameters_get_commitment_feerate_sat_per_1000_weight(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_commitment_feerate_sat_per_1000_weight(int64_t this_ptr, int32_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_commitment_feerate_sat_per_1000_weight(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_ChannelParameters_get_to_self_delay(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelParameters_get_to_self_delay(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_to_self_delay(int64_t this_ptr, int16_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_to_self_delay(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_ChannelParameters_get_max_accepted_htlcs(int64_t this_ptr) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelParameters_get_max_accepted_htlcs(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelParameters_set_max_accepted_htlcs(int64_t this_ptr, int16_t val) {
+       LDKChannelParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelParameters_set_max_accepted_htlcs(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelParameters_new(int64_t dust_limit_satoshis_arg, int64_t max_htlc_value_in_flight_msat_arg, int64_t htlc_minimum_msat_arg, int32_t commitment_feerate_sat_per_1000_weight_arg, int16_t to_self_delay_arg, int16_t max_accepted_htlcs_arg) {
+       LDKChannelParameters ret_var = ChannelParameters_new(dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, htlc_minimum_msat_arg, commitment_feerate_sat_per_1000_weight_arg, to_self_delay_arg, max_accepted_htlcs_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ChannelParameters_clone_ptr(LDKChannelParameters *NONNULL_PTR arg) {
+       LDKChannelParameters ret_var = ChannelParameters_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ChannelParameters_clone_ptr(int64_t arg) {
+       LDKChannelParameters arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelParameters_clone(int64_t orig) {
+       LDKChannelParameters orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKChannelParameters ret_var = ChannelParameters_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ChannelParameters_hash(int64_t o) {
+       LDKChannelParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelParameters_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelParameters_eq(int64_t a, int64_t b) {
+       LDKChannelParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_OpenChannel_free(int64_t this_obj) {
        LDKOpenChannel this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -49055,29 +51172,29 @@ jboolean  CS_LDK_Stfu_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
-void  CS_LDK_Splice_free(int64_t this_obj) {
-       LDKSplice this_obj_conv;
+void  CS_LDK_SpliceInit_free(int64_t this_obj) {
+       LDKSpliceInit this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Splice_free(this_obj_conv);
+       SpliceInit_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Splice_get_channel_id(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int64_t  CS_LDK_SpliceInit_get_channel_id(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelId ret_var = Splice_get_channel_id(&this_ptr_conv);
+       LDKChannelId ret_var = SpliceInit_get_channel_id(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Splice_set_channel_id(int64_t this_ptr, int64_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_channel_id(int64_t this_ptr, int64_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -49087,173 +51204,168 @@ void  CS_LDK_Splice_set_channel_id(int64_t this_ptr, int64_t val) {
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelId_clone(&val_conv);
-       Splice_set_channel_id(&this_ptr_conv, val_conv);
+       SpliceInit_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_Splice_get_chain_hash(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int64_t  CS_LDK_SpliceInit_get_funding_contribution_satoshis(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *Splice_get_chain_hash(&this_ptr_conv), 32);
-       return ret_arr;
+       int64_t ret_conv = SpliceInit_get_funding_contribution_satoshis(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Splice_set_chain_hash(int64_t this_ptr, int8_tArray val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_funding_contribution_satoshis(int64_t this_ptr, int64_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       Splice_set_chain_hash(&this_ptr_conv, val_ref);
+       SpliceInit_set_funding_contribution_satoshis(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Splice_get_relative_satoshis(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int32_t  CS_LDK_SpliceInit_get_funding_feerate_perkw(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = Splice_get_relative_satoshis(&this_ptr_conv);
+       int32_t ret_conv = SpliceInit_get_funding_feerate_perkw(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Splice_set_relative_satoshis(int64_t this_ptr, int64_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_funding_feerate_perkw(int64_t this_ptr, int32_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Splice_set_relative_satoshis(&this_ptr_conv, val);
+       SpliceInit_set_funding_feerate_perkw(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_Splice_get_funding_feerate_perkw(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int32_t  CS_LDK_SpliceInit_get_locktime(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = Splice_get_funding_feerate_perkw(&this_ptr_conv);
+       int32_t ret_conv = SpliceInit_get_locktime(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Splice_set_funding_feerate_perkw(int64_t this_ptr, int32_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_locktime(int64_t this_ptr, int32_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Splice_set_funding_feerate_perkw(&this_ptr_conv, val);
+       SpliceInit_set_locktime(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_Splice_get_locktime(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int8_tArray  CS_LDK_SpliceInit_get_funding_pubkey(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = Splice_get_locktime(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, SpliceInit_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_Splice_set_locktime(int64_t this_ptr, int32_t val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_funding_pubkey(int64_t this_ptr, int8_tArray val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Splice_set_locktime(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       SpliceInit_set_funding_pubkey(&this_ptr_conv, val_ref);
 }
 
-int8_tArray  CS_LDK_Splice_get_funding_pubkey(int64_t this_ptr) {
-       LDKSplice this_ptr_conv;
+int32_t  CS_LDK_SpliceInit_get_require_confirmed_inputs(int64_t this_ptr) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Splice_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       int32_t ret_conv = LDKCOption_NoneZ_to_cs(SpliceInit_get_require_confirmed_inputs(&this_ptr_conv));
+       return ret_conv;
 }
 
-void  CS_LDK_Splice_set_funding_pubkey(int64_t this_ptr, int8_tArray val) {
-       LDKSplice this_ptr_conv;
+void  CS_LDK_SpliceInit_set_require_confirmed_inputs(int64_t this_ptr, int32_t val) {
+       LDKSpliceInit this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       Splice_set_funding_pubkey(&this_ptr_conv, val_ref);
+       LDKCOption_NoneZ val_conv = LDKCOption_NoneZ_from_cs(val);
+       SpliceInit_set_require_confirmed_inputs(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Splice_new(int64_t channel_id_arg, int8_tArray chain_hash_arg, int64_t relative_satoshis_arg, int32_t funding_feerate_perkw_arg, int32_t locktime_arg, int8_tArray funding_pubkey_arg) {
+int64_t  CS_LDK_SpliceInit_new(int64_t channel_id_arg, int64_t funding_contribution_satoshis_arg, int32_t funding_feerate_perkw_arg, int32_t locktime_arg, int8_tArray funding_pubkey_arg, int32_t require_confirmed_inputs_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
        channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKThirtyTwoBytes chain_hash_arg_ref;
-       CHECK(chain_hash_arg->arr_len == 32);
-       memcpy(chain_hash_arg_ref.data, chain_hash_arg->elems, 32); FREE(chain_hash_arg);
        LDKPublicKey funding_pubkey_arg_ref;
        CHECK(funding_pubkey_arg->arr_len == 33);
        memcpy(funding_pubkey_arg_ref.compressed_form, funding_pubkey_arg->elems, 33); FREE(funding_pubkey_arg);
-       LDKSplice ret_var = Splice_new(channel_id_arg_conv, chain_hash_arg_ref, relative_satoshis_arg, funding_feerate_perkw_arg, locktime_arg, funding_pubkey_arg_ref);
+       LDKCOption_NoneZ require_confirmed_inputs_arg_conv = LDKCOption_NoneZ_from_cs(require_confirmed_inputs_arg);
+       LDKSpliceInit ret_var = SpliceInit_new(channel_id_arg_conv, funding_contribution_satoshis_arg, funding_feerate_perkw_arg, locktime_arg, funding_pubkey_arg_ref, require_confirmed_inputs_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Splice_clone_ptr(LDKSplice *NONNULL_PTR arg) {
-       LDKSplice ret_var = Splice_clone(arg);
+static inline uint64_t SpliceInit_clone_ptr(LDKSpliceInit *NONNULL_PTR arg) {
+       LDKSpliceInit ret_var = SpliceInit_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Splice_clone_ptr(int64_t arg) {
-       LDKSplice arg_conv;
+int64_t  CS_LDK_SpliceInit_clone_ptr(int64_t arg) {
+       LDKSpliceInit arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Splice_clone_ptr(&arg_conv);
+       int64_t ret_conv = SpliceInit_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Splice_clone(int64_t orig) {
-       LDKSplice orig_conv;
+int64_t  CS_LDK_SpliceInit_clone(int64_t orig) {
+       LDKSpliceInit orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKSplice ret_var = Splice_clone(&orig_conv);
+       LDKSpliceInit ret_var = SpliceInit_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Splice_eq(int64_t a, int64_t b) {
-       LDKSplice a_conv;
+jboolean  CS_LDK_SpliceInit_eq(int64_t a, int64_t b) {
+       LDKSpliceInit a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKSplice b_conv;
+       LDKSpliceInit b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Splice_eq(&a_conv, &b_conv);
+       jboolean ret_conv = SpliceInit_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
@@ -49292,46 +51404,23 @@ void  CS_LDK_SpliceAck_set_channel_id(int64_t this_ptr, int64_t val) {
        SpliceAck_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_SpliceAck_get_chain_hash(int64_t this_ptr) {
-       LDKSpliceAck this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *SpliceAck_get_chain_hash(&this_ptr_conv), 32);
-       return ret_arr;
-}
-
-void  CS_LDK_SpliceAck_set_chain_hash(int64_t this_ptr, int8_tArray val) {
-       LDKSpliceAck this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       SpliceAck_set_chain_hash(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_SpliceAck_get_relative_satoshis(int64_t this_ptr) {
+int64_t  CS_LDK_SpliceAck_get_funding_contribution_satoshis(int64_t this_ptr) {
        LDKSpliceAck this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = SpliceAck_get_relative_satoshis(&this_ptr_conv);
+       int64_t ret_conv = SpliceAck_get_funding_contribution_satoshis(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_SpliceAck_set_relative_satoshis(int64_t this_ptr, int64_t val) {
+void  CS_LDK_SpliceAck_set_funding_contribution_satoshis(int64_t this_ptr, int64_t val) {
        LDKSpliceAck this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       SpliceAck_set_relative_satoshis(&this_ptr_conv, val);
+       SpliceAck_set_funding_contribution_satoshis(&this_ptr_conv, val);
 }
 
 int8_tArray  CS_LDK_SpliceAck_get_funding_pubkey(int64_t this_ptr) {
@@ -49357,19 +51446,37 @@ void  CS_LDK_SpliceAck_set_funding_pubkey(int64_t this_ptr, int8_tArray val) {
        SpliceAck_set_funding_pubkey(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_SpliceAck_new(int64_t channel_id_arg, int8_tArray chain_hash_arg, int64_t relative_satoshis_arg, int8_tArray funding_pubkey_arg) {
+int32_t  CS_LDK_SpliceAck_get_require_confirmed_inputs(int64_t this_ptr) {
+       LDKSpliceAck this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = LDKCOption_NoneZ_to_cs(SpliceAck_get_require_confirmed_inputs(&this_ptr_conv));
+       return ret_conv;
+}
+
+void  CS_LDK_SpliceAck_set_require_confirmed_inputs(int64_t this_ptr, int32_t val) {
+       LDKSpliceAck this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_NoneZ val_conv = LDKCOption_NoneZ_from_cs(val);
+       SpliceAck_set_require_confirmed_inputs(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_SpliceAck_new(int64_t channel_id_arg, int64_t funding_contribution_satoshis_arg, int8_tArray funding_pubkey_arg, int32_t require_confirmed_inputs_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
        channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKThirtyTwoBytes chain_hash_arg_ref;
-       CHECK(chain_hash_arg->arr_len == 32);
-       memcpy(chain_hash_arg_ref.data, chain_hash_arg->elems, 32); FREE(chain_hash_arg);
        LDKPublicKey funding_pubkey_arg_ref;
        CHECK(funding_pubkey_arg->arr_len == 33);
        memcpy(funding_pubkey_arg_ref.compressed_form, funding_pubkey_arg->elems, 33); FREE(funding_pubkey_arg);
-       LDKSpliceAck ret_var = SpliceAck_new(channel_id_arg_conv, chain_hash_arg_ref, relative_satoshis_arg, funding_pubkey_arg_ref);
+       LDKCOption_NoneZ require_confirmed_inputs_arg_conv = LDKCOption_NoneZ_from_cs(require_confirmed_inputs_arg);
+       LDKSpliceAck ret_var = SpliceAck_new(channel_id_arg_conv, funding_contribution_satoshis_arg, funding_pubkey_arg_ref, require_confirmed_inputs_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -49456,13 +51563,39 @@ void  CS_LDK_SpliceLocked_set_channel_id(int64_t this_ptr, int64_t val) {
        SpliceLocked_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_SpliceLocked_new(int64_t channel_id_arg) {
+int8_tArray  CS_LDK_SpliceLocked_get_splice_txid(int64_t this_ptr) {
+       LDKSpliceLocked this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *SpliceLocked_get_splice_txid(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_SpliceLocked_set_splice_txid(int64_t this_ptr, int8_tArray val) {
+       LDKSpliceLocked this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       SpliceLocked_set_splice_txid(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_SpliceLocked_new(int64_t channel_id_arg, int8_tArray splice_txid_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
        channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKSpliceLocked ret_var = SpliceLocked_new(channel_id_arg_conv);
+       LDKThirtyTwoBytes splice_txid_arg_ref;
+       CHECK(splice_txid_arg->arr_len == 32);
+       memcpy(splice_txid_arg_ref.data, splice_txid_arg->elems, 32); FREE(splice_txid_arg);
+       LDKSpliceLocked ret_var = SpliceLocked_new(channel_id_arg_conv, splice_txid_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -49633,7 +51766,32 @@ void  CS_LDK_TxAddInput_set_sequence(int64_t this_ptr, int32_t val) {
        TxAddInput_set_sequence(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_TxAddInput_new(int64_t channel_id_arg, int64_t serial_id_arg, int64_t prevtx_arg, int32_t prevtx_out_arg, int32_t sequence_arg) {
+int64_t  CS_LDK_TxAddInput_get_shared_input_txid(int64_t this_ptr) {
+       LDKTxAddInput this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = TxAddInput_get_shared_input_txid(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_TxAddInput_set_shared_input_txid(int64_t this_ptr, int64_t val) {
+       LDKTxAddInput this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       TxAddInput_set_shared_input_txid(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_TxAddInput_new(int64_t channel_id_arg, int64_t serial_id_arg, int64_t prevtx_arg, int32_t prevtx_out_arg, int32_t sequence_arg, int64_t shared_input_txid_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -49644,7 +51802,11 @@ int64_t  CS_LDK_TxAddInput_new(int64_t channel_id_arg, int64_t serial_id_arg, in
        prevtx_arg_conv.is_owned = ptr_is_owned(prevtx_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(prevtx_arg_conv);
        prevtx_arg_conv = TransactionU16LenLimited_clone(&prevtx_arg_conv);
-       LDKTxAddInput ret_var = TxAddInput_new(channel_id_arg_conv, serial_id_arg, prevtx_arg_conv, prevtx_out_arg, sequence_arg);
+       void* shared_input_txid_arg_ptr = untag_ptr(shared_input_txid_arg);
+       CHECK_ACCESS(shared_input_txid_arg_ptr);
+       LDKCOption_ThirtyTwoBytesZ shared_input_txid_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(shared_input_txid_arg_ptr);
+       shared_input_txid_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(shared_input_txid_arg));
+       LDKTxAddInput ret_var = TxAddInput_new(channel_id_arg_conv, serial_id_arg, prevtx_arg_conv, prevtx_out_arg, sequence_arg, shared_input_txid_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -50330,19 +52492,19 @@ void  CS_LDK_TxSignatures_set_witnesses(int64_t this_ptr, ptrArray val) {
        TxSignatures_set_witnesses(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_TxSignatures_get_funding_outpoint_sig(int64_t this_ptr) {
+int64_t  CS_LDK_TxSignatures_get_shared_input_signature(int64_t this_ptr) {
        LDKTxSignatures this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        LDKCOption_ECDSASignatureZ *ret_copy = MALLOC(sizeof(LDKCOption_ECDSASignatureZ), "LDKCOption_ECDSASignatureZ");
-       *ret_copy = TxSignatures_get_funding_outpoint_sig(&this_ptr_conv);
+       *ret_copy = TxSignatures_get_shared_input_signature(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_TxSignatures_set_funding_outpoint_sig(int64_t this_ptr, int64_t val) {
+void  CS_LDK_TxSignatures_set_shared_input_signature(int64_t this_ptr, int64_t val) {
        LDKTxSignatures this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
@@ -50352,10 +52514,10 @@ void  CS_LDK_TxSignatures_set_funding_outpoint_sig(int64_t this_ptr, int64_t val
        CHECK_ACCESS(val_ptr);
        LDKCOption_ECDSASignatureZ val_conv = *(LDKCOption_ECDSASignatureZ*)(val_ptr);
        val_conv = COption_ECDSASignatureZ_clone((LDKCOption_ECDSASignatureZ*)untag_ptr(val));
-       TxSignatures_set_funding_outpoint_sig(&this_ptr_conv, val_conv);
+       TxSignatures_set_shared_input_signature(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_TxSignatures_new(int64_t channel_id_arg, int8_tArray tx_hash_arg, ptrArray witnesses_arg, int64_t funding_outpoint_sig_arg) {
+int64_t  CS_LDK_TxSignatures_new(int64_t channel_id_arg, int8_tArray tx_hash_arg, ptrArray witnesses_arg, int64_t shared_input_signature_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -50381,11 +52543,11 @@ int64_t  CS_LDK_TxSignatures_new(int64_t channel_id_arg, int8_tArray tx_hash_arg
                witnesses_arg_constr.data[i] = witnesses_arg_conv_8_ref;
        }
        FREE(witnesses_arg);
-       void* funding_outpoint_sig_arg_ptr = untag_ptr(funding_outpoint_sig_arg);
-       CHECK_ACCESS(funding_outpoint_sig_arg_ptr);
-       LDKCOption_ECDSASignatureZ funding_outpoint_sig_arg_conv = *(LDKCOption_ECDSASignatureZ*)(funding_outpoint_sig_arg_ptr);
-       funding_outpoint_sig_arg_conv = COption_ECDSASignatureZ_clone((LDKCOption_ECDSASignatureZ*)untag_ptr(funding_outpoint_sig_arg));
-       LDKTxSignatures ret_var = TxSignatures_new(channel_id_arg_conv, tx_hash_arg_ref, witnesses_arg_constr, funding_outpoint_sig_arg_conv);
+       void* shared_input_signature_arg_ptr = untag_ptr(shared_input_signature_arg);
+       CHECK_ACCESS(shared_input_signature_arg_ptr);
+       LDKCOption_ECDSASignatureZ shared_input_signature_arg_conv = *(LDKCOption_ECDSASignatureZ*)(shared_input_signature_arg_ptr);
+       shared_input_signature_arg_conv = COption_ECDSASignatureZ_clone((LDKCOption_ECDSASignatureZ*)untag_ptr(shared_input_signature_arg));
+       LDKTxSignatures ret_var = TxSignatures_new(channel_id_arg_conv, tx_hash_arg_ref, witnesses_arg_constr, shared_input_signature_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -52091,6 +54253,122 @@ jboolean  CS_LDK_UpdateFailMalformedHTLC_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
+void  CS_LDK_CommitmentSignedBatch_free(int64_t this_obj) {
+       LDKCommitmentSignedBatch this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       CommitmentSignedBatch_free(this_obj_conv);
+}
+
+int16_t  CS_LDK_CommitmentSignedBatch_get_batch_size(int64_t this_ptr) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = CommitmentSignedBatch_get_batch_size(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_CommitmentSignedBatch_set_batch_size(int64_t this_ptr, int16_t val) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       CommitmentSignedBatch_set_batch_size(&this_ptr_conv, val);
+}
+
+int8_tArray  CS_LDK_CommitmentSignedBatch_get_funding_txid(int64_t this_ptr) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *CommitmentSignedBatch_get_funding_txid(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_CommitmentSignedBatch_set_funding_txid(int64_t this_ptr, int8_tArray val) {
+       LDKCommitmentSignedBatch this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       CommitmentSignedBatch_set_funding_txid(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_new(int16_t batch_size_arg, int8_tArray funding_txid_arg) {
+       LDKThirtyTwoBytes funding_txid_arg_ref;
+       CHECK(funding_txid_arg->arr_len == 32);
+       memcpy(funding_txid_arg_ref.data, funding_txid_arg->elems, 32); FREE(funding_txid_arg);
+       LDKCommitmentSignedBatch ret_var = CommitmentSignedBatch_new(batch_size_arg, funding_txid_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t CommitmentSignedBatch_clone_ptr(LDKCommitmentSignedBatch *NONNULL_PTR arg) {
+       LDKCommitmentSignedBatch ret_var = CommitmentSignedBatch_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_CommitmentSignedBatch_clone_ptr(int64_t arg) {
+       LDKCommitmentSignedBatch arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = CommitmentSignedBatch_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_clone(int64_t orig) {
+       LDKCommitmentSignedBatch orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKCommitmentSignedBatch ret_var = CommitmentSignedBatch_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_hash(int64_t o) {
+       LDKCommitmentSignedBatch o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = CommitmentSignedBatch_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_CommitmentSignedBatch_eq(int64_t a, int64_t b) {
+       LDKCommitmentSignedBatch a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKCommitmentSignedBatch b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = CommitmentSignedBatch_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
 void  CS_LDK_CommitmentSigned_free(int64_t this_obj) {
        LDKCommitmentSigned this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -52193,7 +54471,34 @@ void  CS_LDK_CommitmentSigned_set_htlc_signatures(int64_t this_ptr, ptrArray val
        CommitmentSigned_set_htlc_signatures(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_CommitmentSigned_new(int64_t channel_id_arg, int8_tArray signature_arg, ptrArray htlc_signatures_arg) {
+int64_t  CS_LDK_CommitmentSigned_get_batch(int64_t this_ptr) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCommitmentSignedBatch ret_var = CommitmentSigned_get_batch(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_CommitmentSigned_set_batch(int64_t this_ptr, int64_t val) {
+       LDKCommitmentSigned this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCommitmentSignedBatch val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = CommitmentSignedBatch_clone(&val_conv);
+       CommitmentSigned_set_batch(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_CommitmentSigned_new(int64_t channel_id_arg, int8_tArray signature_arg, ptrArray htlc_signatures_arg, int64_t batch_arg) {
        LDKChannelId channel_id_arg_conv;
        channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
        channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
@@ -52217,7 +54522,12 @@ int64_t  CS_LDK_CommitmentSigned_new(int64_t channel_id_arg, int8_tArray signatu
                htlc_signatures_arg_constr.data[i] = htlc_signatures_arg_conv_8_ref;
        }
        FREE(htlc_signatures_arg);
-       LDKCommitmentSigned ret_var = CommitmentSigned_new(channel_id_arg_conv, signature_arg_ref, htlc_signatures_arg_constr);
+       LDKCommitmentSignedBatch batch_arg_conv;
+       batch_arg_conv.inner = untag_ptr(batch_arg);
+       batch_arg_conv.is_owned = ptr_is_owned(batch_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(batch_arg_conv);
+       batch_arg_conv = CommitmentSignedBatch_clone(&batch_arg_conv);
+       LDKCommitmentSigned ret_var = CommitmentSigned_new(channel_id_arg_conv, signature_arg_ref, htlc_signatures_arg_constr, batch_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -53468,6 +55778,7 @@ int64_t  CS_LDK_UnsignedNodeAnnouncement_new(int64_t features_arg, int32_t times
                void* addresses_arg_conv_15_ptr = untag_ptr(addresses_arg_conv_15);
                CHECK_ACCESS(addresses_arg_conv_15_ptr);
                LDKSocketAddress addresses_arg_conv_15_conv = *(LDKSocketAddress*)(addresses_arg_conv_15_ptr);
+               addresses_arg_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_arg_conv_15));
                addresses_arg_constr.data[p] = addresses_arg_conv_15_conv;
        }
        FREE(addresses_arg);
@@ -54252,23 +56563,42 @@ void  CS_LDK_UnsignedChannelUpdate_set_timestamp(int64_t this_ptr, int32_t val)
        UnsignedChannelUpdate_set_timestamp(&this_ptr_conv, val);
 }
 
-int8_t  CS_LDK_UnsignedChannelUpdate_get_flags(int64_t this_ptr) {
+int8_t  CS_LDK_UnsignedChannelUpdate_get_message_flags(int64_t this_ptr) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = UnsignedChannelUpdate_get_message_flags(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_UnsignedChannelUpdate_set_message_flags(int64_t this_ptr, int8_t val) {
+       LDKUnsignedChannelUpdate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       UnsignedChannelUpdate_set_message_flags(&this_ptr_conv, val);
+}
+
+int8_t  CS_LDK_UnsignedChannelUpdate_get_channel_flags(int64_t this_ptr) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_t ret_conv = UnsignedChannelUpdate_get_flags(&this_ptr_conv);
+       int8_t ret_conv = UnsignedChannelUpdate_get_channel_flags(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_UnsignedChannelUpdate_set_flags(int64_t this_ptr, int8_t val) {
+void  CS_LDK_UnsignedChannelUpdate_set_channel_flags(int64_t this_ptr, int8_t val) {
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       UnsignedChannelUpdate_set_flags(&this_ptr_conv, val);
+       UnsignedChannelUpdate_set_channel_flags(&this_ptr_conv, val);
 }
 
 int16_t  CS_LDK_UnsignedChannelUpdate_get_cltv_expiry_delta(int64_t this_ptr) {
@@ -54392,7 +56722,7 @@ void  CS_LDK_UnsignedChannelUpdate_set_excess_data(int64_t this_ptr, int8_tArray
        UnsignedChannelUpdate_set_excess_data(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_UnsignedChannelUpdate_new(int8_tArray chain_hash_arg, int64_t short_channel_id_arg, int32_t timestamp_arg, int8_t flags_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int8_tArray excess_data_arg) {
+int64_t  CS_LDK_UnsignedChannelUpdate_new(int8_tArray chain_hash_arg, int64_t short_channel_id_arg, int32_t timestamp_arg, int8_t message_flags_arg, int8_t channel_flags_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int8_tArray excess_data_arg) {
        LDKThirtyTwoBytes chain_hash_arg_ref;
        CHECK(chain_hash_arg->arr_len == 32);
        memcpy(chain_hash_arg_ref.data, chain_hash_arg->elems, 32); FREE(chain_hash_arg);
@@ -54400,7 +56730,7 @@ int64_t  CS_LDK_UnsignedChannelUpdate_new(int8_tArray chain_hash_arg, int64_t sh
        excess_data_arg_ref.datalen = excess_data_arg->arr_len;
        excess_data_arg_ref.data = MALLOC(excess_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
        memcpy(excess_data_arg_ref.data, excess_data_arg->elems, excess_data_arg_ref.datalen); FREE(excess_data_arg);
-       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_new(chain_hash_arg_ref, short_channel_id_arg, timestamp_arg, flags_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fee_base_msat_arg, fee_proportional_millionths_arg, excess_data_arg_ref);
+       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_new(chain_hash_arg_ref, short_channel_id_arg, timestamp_arg, message_flags_arg, channel_flags_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fee_base_msat_arg, fee_proportional_millionths_arg, excess_data_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -56440,25 +58770,25 @@ int64_t  CS_LDK_Stfu_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_Splice_write(int64_t obj) {
-       LDKSplice obj_conv;
+int8_tArray  CS_LDK_SpliceInit_write(int64_t obj) {
+       LDKSpliceInit obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Splice_write(&obj_conv);
+       LDKCVec_u8Z ret_var = SpliceInit_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Splice_read(int8_tArray ser) {
+int64_t  CS_LDK_SpliceInit_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_SpliceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceDecodeErrorZ), "LDKCResult_SpliceDecodeErrorZ");
-       *ret_conv = Splice_read(ser_ref);
+       LDKCResult_SpliceInitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpliceInitDecodeErrorZ), "LDKCResult_SpliceInitDecodeErrorZ");
+       *ret_conv = SpliceInit_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
@@ -56808,6 +59138,29 @@ int64_t  CS_LDK_ClosingSignedFeeRange_read(int8_tArray ser) {
        return tag_ptr(ret_conv, true);
 }
 
+int8_tArray  CS_LDK_CommitmentSignedBatch_write(int64_t obj) {
+       LDKCommitmentSignedBatch obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = CommitmentSignedBatch_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_CommitmentSignedBatch_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_CommitmentSignedBatchDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedBatchDecodeErrorZ), "LDKCResult_CommitmentSignedBatchDecodeErrorZ");
+       *ret_conv = CommitmentSignedBatch_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
 int8_tArray  CS_LDK_CommitmentSigned_write(int64_t obj) {
        LDKCommitmentSigned obj_conv;
        obj_conv.inner = untag_ptr(obj);
@@ -57579,17 +59932,6 @@ int64_t  CS_LDK_IgnoringMessageHandler_new() {
        return ret_ref;
 }
 
-int64_t  CS_LDK_IgnoringMessageHandler_as_EventsProvider(int64_t this_arg) {
-       LDKIgnoringMessageHandler this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
-       *ret_ret = IgnoringMessageHandler_as_EventsProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
 int64_t  CS_LDK_IgnoringMessageHandler_as_MessageSendEventsProvider(int64_t this_arg) {
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -57634,6 +59976,17 @@ int64_t  CS_LDK_IgnoringMessageHandler_as_OffersMessageHandler(int64_t this_arg)
        return tag_ptr(ret_ret, true);
 }
 
+int64_t  CS_LDK_IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(int64_t this_arg) {
+       LDKIgnoringMessageHandler this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAsyncPaymentsMessageHandler* ret_ret = MALLOC(sizeof(LDKAsyncPaymentsMessageHandler), "LDKAsyncPaymentsMessageHandler");
+       *ret_ret = IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
 int64_t  CS_LDK_IgnoringMessageHandler_as_CustomOnionMessageHandler(int64_t this_arg) {
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -57997,6 +60350,7 @@ int64_t  CS_LDK_PeerDetails_new(int8_tArray counterparty_node_id_arg, int64_t so
        void* socket_address_arg_ptr = untag_ptr(socket_address_arg);
        CHECK_ACCESS(socket_address_arg_ptr);
        LDKCOption_SocketAddressZ socket_address_arg_conv = *(LDKCOption_SocketAddressZ*)(socket_address_arg_ptr);
+       socket_address_arg_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(socket_address_arg));
        LDKInitFeatures init_features_arg_conv;
        init_features_arg_conv.inner = untag_ptr(init_features_arg);
        init_features_arg_conv.is_owned = ptr_is_owned(init_features_arg);
@@ -58164,6 +60518,7 @@ int64_t  CS_LDK_PeerManager_new_outbound_connection(int64_t this_arg, int8_tArra
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
        LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
+       remote_network_address_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(remote_network_address));
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = PeerManager_new_outbound_connection(&this_arg_conv, their_node_id_ref, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -58185,6 +60540,7 @@ int64_t  CS_LDK_PeerManager_new_inbound_connection(int64_t this_arg, int64_t des
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
        LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
+       remote_network_address_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(remote_network_address));
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = PeerManager_new_inbound_connection(&this_arg_conv, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -58297,6 +60653,7 @@ void  CS_LDK_PeerManager_broadcast_node_announcement(int64_t this_arg, int8_tArr
                void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
                CHECK_ACCESS(addresses_conv_15_ptr);
                LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
+               addresses_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_conv_15));
                addresses_constr.data[p] = addresses_conv_15_conv;
        }
        FREE(addresses);
@@ -59274,6 +61631,16 @@ jboolean  CS_LDK_HTLCOutputInCommitment_eq(int64_t a, int64_t b) {
        return ret_conv;
 }
 
+int64_t  CS_LDK_HTLCOutputInCommitment_to_bitcoin_amount(int64_t this_arg) {
+       LDKHTLCOutputInCommitment this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = HTLCOutputInCommitment_to_bitcoin_amount(&this_arg_conv);
+       return ret_conv;
+}
+
 int8_tArray  CS_LDK_HTLCOutputInCommitment_write(int64_t obj) {
        LDKHTLCOutputInCommitment obj_conv;
        obj_conv.inner = untag_ptr(obj);
@@ -60780,7752 +63147,8407 @@ int64_t  CS_LDK_get_commitment_transaction_number_obscure_factor(int8_tArray bro
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_eq(int64_t a, int64_t b) {
-       LDKInitFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKInitFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_InitFeatures_write(int64_t obj) {
+       LDKInitFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_eq(int64_t a, int64_t b) {
-       LDKNodeFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKNodeFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_InitFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
+       *ret_conv = InitFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelFeatures_eq(int64_t a, int64_t b) {
-       LDKChannelFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_ChannelFeatures_write(int64_t obj) {
+       LDKChannelFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_eq(int64_t a, int64_t b) {
-       LDKBolt11InvoiceFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt11InvoiceFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_ChannelFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
+       *ret_conv = ChannelFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_OfferFeatures_eq(int64_t a, int64_t b) {
-       LDKOfferFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKOfferFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = OfferFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_NodeFeatures_write(int64_t obj) {
+       LDKNodeFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InvoiceRequestFeatures_eq(int64_t a, int64_t b) {
-       LDKInvoiceRequestFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKInvoiceRequestFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_NodeFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
+       *ret_conv = NodeFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_Bolt12InvoiceFeatures_eq(int64_t a, int64_t b) {
-       LDKBolt12InvoiceFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Bolt11InvoiceFeatures_write(int64_t obj) {
+       LDKBolt11InvoiceFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt11InvoiceFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_BlindedHopFeatures_eq(int64_t a, int64_t b) {
-       LDKBlindedHopFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedHopFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedHopFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ");
+       *ret_conv = Bolt11InvoiceFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_eq(int64_t a, int64_t b) {
-       LDKChannelTypeFeatures a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelTypeFeatures b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_eq(&a_conv, &b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Bolt12InvoiceFeatures_write(int64_t obj) {
+       LDKBolt12InvoiceFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12InvoiceFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
-       LDKInitFeatures ret_var = InitFeatures_clone(arg);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ");
+       *ret_conv = Bolt12InvoiceFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_BlindedHopFeatures_write(int64_t obj) {
+       LDKBlindedHopFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHopFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedHopFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedHopFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopFeaturesDecodeErrorZ), "LDKCResult_BlindedHopFeaturesDecodeErrorZ");
+       *ret_conv = BlindedHopFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_ChannelTypeFeatures_write(int64_t obj) {
+       LDKChannelTypeFeatures obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelTypeFeatures_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelTypeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTypeFeaturesDecodeErrorZ), "LDKCResult_ChannelTypeFeaturesDecodeErrorZ");
+       *ret_conv = ChannelTypeFeatures_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_ShutdownScript_free(int64_t this_obj) {
+       LDKShutdownScript this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ShutdownScript_free(this_obj_conv);
+}
+
+static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
+       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InitFeatures_clone_ptr(int64_t arg) {
-       LDKInitFeatures arg_conv;
+int64_t  CS_LDK_ShutdownScript_clone_ptr(int64_t arg) {
+       LDKShutdownScript arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InitFeatures_clone_ptr(&arg_conv);
+       int64_t ret_conv = ShutdownScript_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InitFeatures_clone(int64_t orig) {
-       LDKInitFeatures orig_conv;
+int64_t  CS_LDK_ShutdownScript_clone(int64_t orig) {
+       LDKShutdownScript orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
+       LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
-       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_NodeFeatures_clone_ptr(int64_t arg) {
-       LDKNodeFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = NodeFeatures_clone_ptr(&arg_conv);
+jboolean  CS_LDK_ShutdownScript_eq(int64_t a, int64_t b) {
+       LDKShutdownScript a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKShutdownScript b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ShutdownScript_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_clone(int64_t orig) {
-       LDKNodeFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
+void  CS_LDK_InvalidShutdownScript_free(int64_t this_obj) {
+       LDKInvalidShutdownScript this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvalidShutdownScript_free(this_obj_conv);
+}
+
+int8_tArray  CS_LDK_InvalidShutdownScript_get_script(int64_t this_ptr) {
+       LDKInvalidShutdownScript this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+void  CS_LDK_InvalidShutdownScript_set_script(int64_t this_ptr, int8_tArray val) {
+       LDKInvalidShutdownScript this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = val->arr_len;
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
+       InvalidShutdownScript_set_script(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_InvalidShutdownScript_new(int8_tArray script_arg) {
+       LDKCVec_u8Z script_arg_ref;
+       script_arg_ref.datalen = script_arg->arr_len;
+       script_arg_ref.data = MALLOC(script_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(script_arg_ref.data, script_arg->elems, script_arg_ref.datalen); FREE(script_arg);
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_new(script_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
-       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
+static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelFeatures_clone_ptr(int64_t arg) {
-       LDKChannelFeatures arg_conv;
+int64_t  CS_LDK_InvalidShutdownScript_clone_ptr(int64_t arg) {
+       LDKInvalidShutdownScript arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelFeatures_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvalidShutdownScript_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelFeatures_clone(int64_t orig) {
-       LDKChannelFeatures orig_conv;
+int64_t  CS_LDK_InvalidShutdownScript_clone(int64_t orig) {
+       LDKInvalidShutdownScript orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt11InvoiceFeatures_clone_ptr(LDKBolt11InvoiceFeatures *NONNULL_PTR arg) {
-       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_ShutdownScript_write(int64_t obj) {
+       LDKShutdownScript obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
-int64_t  CS_LDK_Bolt11InvoiceFeatures_clone_ptr(int64_t arg) {
-       LDKBolt11InvoiceFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt11InvoiceFeatures_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_t  CS_LDK_ShutdownScript_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
+       *ret_conv = ShutdownScript_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_clone(int64_t orig) {
-       LDKBolt11InvoiceFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ShutdownScript_new_p2wpkh(int8_tArray pubkey_hash) {
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       LDKShutdownScript ret_var = ShutdownScript_new_p2wpkh(pubkey_hash_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t OfferFeatures_clone_ptr(LDKOfferFeatures *NONNULL_PTR arg) {
-       LDKOfferFeatures ret_var = OfferFeatures_clone(arg);
+int64_t  CS_LDK_ShutdownScript_new_p2wsh(int8_tArray script_hash) {
+       uint8_t script_hash_arr[32];
+       CHECK(script_hash->arr_len == 32);
+       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
+       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
+       LDKShutdownScript ret_var = ShutdownScript_new_p2wsh(script_hash_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_OfferFeatures_clone_ptr(int64_t arg) {
-       LDKOfferFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OfferFeatures_clone_ptr(&arg_conv);
+
+int64_t  CS_LDK_ShutdownScript_new_witness_program(int64_t witness_program) {
+       void* witness_program_ptr = untag_ptr(witness_program);
+       CHECK_ACCESS(witness_program_ptr);
+       LDKWitnessProgram witness_program_conv = *(LDKWitnessProgram*)(witness_program_ptr);
+       witness_program_conv = WitnessProgram_clone((LDKWitnessProgram*)untag_ptr(witness_program));
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
+       *ret_conv = ShutdownScript_new_witness_program(witness_program_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_ShutdownScript_into_inner(int64_t this_arg) {
+       LDKShutdownScript this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = ShutdownScript_clone(&this_arg_conv);
+       LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_ShutdownScript_as_legacy_pubkey(int64_t this_arg) {
+       LDKShutdownScript this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+jboolean  CS_LDK_ShutdownScript_is_compatible(int64_t this_arg, int64_t features) {
+       LDKShutdownScript this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInitFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv.is_owned = false;
+       jboolean ret_conv = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_clone(int64_t orig) {
-       LDKOfferFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOfferFeatures ret_var = OfferFeatures_clone(&orig_conv);
+jstring  CS_LDK_ShutdownScript_to_str(int64_t o) {
+       LDKShutdownScript o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = ShutdownScript_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelId_free(int64_t this_obj) {
+       LDKChannelId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelId_free(this_obj_conv);
+}
+
+int8_tArray  CS_LDK_ChannelId_get_a(int64_t this_ptr) {
+       LDKChannelId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ChannelId_get_a(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_ChannelId_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKChannelId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ChannelId_set_a(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_ChannelId_new(int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK(a_arg->arr_len == 32);
+       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
+       LDKChannelId ret_var = ChannelId_new(a_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t InvoiceRequestFeatures_clone_ptr(LDKInvoiceRequestFeatures *NONNULL_PTR arg) {
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(arg);
+static inline uint64_t ChannelId_clone_ptr(LDKChannelId *NONNULL_PTR arg) {
+       LDKChannelId ret_var = ChannelId_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InvoiceRequestFeatures_clone_ptr(int64_t arg) {
-       LDKInvoiceRequestFeatures arg_conv;
+int64_t  CS_LDK_ChannelId_clone_ptr(int64_t arg) {
+       LDKChannelId arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequestFeatures_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelId_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_clone(int64_t orig) {
-       LDKInvoiceRequestFeatures orig_conv;
+int64_t  CS_LDK_ChannelId_clone(int64_t orig) {
+       LDKChannelId orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(&orig_conv);
+       LDKChannelId ret_var = ChannelId_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt12InvoiceFeatures_clone_ptr(LDKBolt12InvoiceFeatures *NONNULL_PTR arg) {
-       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(arg);
+jboolean  CS_LDK_ChannelId_eq(int64_t a, int64_t b) {
+       LDKChannelId a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelId b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelId_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelId_hash(int64_t o) {
+       LDKChannelId o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelId_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelId_v1_from_funding_txid(int8_tArray txid, int16_t output_index) {
+       uint8_t txid_arr[32];
+       CHECK(txid->arr_len == 32);
+       memcpy(txid_arr, txid->elems, 32); FREE(txid);
+       uint8_t (*txid_ref)[32] = &txid_arr;
+       LDKChannelId ret_var = ChannelId_v1_from_funding_txid(txid_ref, output_index);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12InvoiceFeatures_clone_ptr(int64_t arg) {
-       LDKBolt12InvoiceFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12InvoiceFeatures_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_clone(int64_t orig) {
-       LDKBolt12InvoiceFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ChannelId_v1_from_funding_outpoint(int64_t outpoint) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       LDKChannelId ret_var = ChannelId_v1_from_funding_outpoint(outpoint_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedHopFeatures_clone_ptr(LDKBlindedHopFeatures *NONNULL_PTR arg) {
-       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(arg);
+int64_t  CS_LDK_ChannelId_temporary_from_entropy_source(int64_t entropy_source) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       LDKChannelId ret_var = ChannelId_temporary_from_entropy_source(entropy_source_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedHopFeatures_clone_ptr(int64_t arg) {
-       LDKBlindedHopFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedHopFeatures_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_BlindedHopFeatures_clone(int64_t orig) {
-       LDKBlindedHopFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ChannelId_from_bytes(int8_tArray data) {
+       LDKThirtyTwoBytes data_ref;
+       CHECK(data->arr_len == 32);
+       memcpy(data_ref.data, data->elems, 32); FREE(data);
+       LDKChannelId ret_var = ChannelId_from_bytes(data_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelTypeFeatures_clone_ptr(LDKChannelTypeFeatures *NONNULL_PTR arg) {
-       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(arg);
+int64_t  CS_LDK_ChannelId_new_zero() {
+       LDKChannelId ret_var = ChannelId_new_zero();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelTypeFeatures_clone_ptr(int64_t arg) {
-       LDKChannelTypeFeatures arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelTypeFeatures_clone_ptr(&arg_conv);
+
+jboolean  CS_LDK_ChannelId_is_zero(int64_t this_arg) {
+       LDKChannelId this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelId_is_zero(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_clone(int64_t orig) {
-       LDKChannelTypeFeatures orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(&orig_conv);
+int64_t  CS_LDK_ChannelId_v2_from_revocation_basepoints(int64_t ours, int64_t theirs) {
+       LDKRevocationBasepoint ours_conv;
+       ours_conv.inner = untag_ptr(ours);
+       ours_conv.is_owned = ptr_is_owned(ours);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ours_conv);
+       ours_conv.is_owned = false;
+       LDKRevocationBasepoint theirs_conv;
+       theirs_conv.inner = untag_ptr(theirs);
+       theirs_conv.is_owned = ptr_is_owned(theirs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(theirs_conv);
+       theirs_conv.is_owned = false;
+       LDKChannelId ret_var = ChannelId_v2_from_revocation_basepoints(&ours_conv, &theirs_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InitFeatures_hash(int64_t o) {
-       LDKInitFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = InitFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ChannelId_temporary_v2_from_revocation_basepoint(int64_t our_revocation_basepoint) {
+       LDKRevocationBasepoint our_revocation_basepoint_conv;
+       our_revocation_basepoint_conv.inner = untag_ptr(our_revocation_basepoint);
+       our_revocation_basepoint_conv.is_owned = ptr_is_owned(our_revocation_basepoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(our_revocation_basepoint_conv);
+       our_revocation_basepoint_conv.is_owned = false;
+       LDKChannelId ret_var = ChannelId_temporary_v2_from_revocation_basepoint(&our_revocation_basepoint_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NodeFeatures_hash(int64_t o) {
-       LDKNodeFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = NodeFeatures_hash(&o_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_ChannelId_write(int64_t obj) {
+       LDKChannelId obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelId_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelFeatures_hash(int64_t o) {
-       LDKChannelFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = ChannelFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ChannelId_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelIdDecodeErrorZ), "LDKCResult_ChannelIdDecodeErrorZ");
+       *ret_conv = ChannelId_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_hash(int64_t o) {
-       LDKBolt11InvoiceFeatures o_conv;
+jstring  CS_LDK_ChannelId_to_str(int64_t o) {
+       LDKChannelId o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Bolt11InvoiceFeatures_hash(&o_conv);
+       LDKStr ret_str = ChannelId_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_hash(int64_t o) {
-       LDKOfferFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = OfferFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_phantom_invoice(int64_t amt_msat, int64_t payment_hash, jstring description, int32_t invoice_expiry_delta_secs, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
+       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
+       if (phantom_route_hints_constr.datalen > 0)
+               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
+       else
+               phantom_route_hints_constr.data = NULL;
+       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
+       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
+               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
+               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
+               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
+               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
+               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
+               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
+       }
+       FREE(phantom_route_hints);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_phantom_invoice(amt_msat_conv, payment_hash_conv, description_conv, invoice_expiry_delta_secs, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_hash(int64_t o) {
-       LDKInvoiceRequestFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequestFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_phantom_invoice_with_description_hash(int64_t amt_msat, int64_t payment_hash, int32_t invoice_expiry_delta_secs, int64_t description_hash, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       LDKSha256 description_hash_conv;
+       description_hash_conv.inner = untag_ptr(description_hash);
+       description_hash_conv.is_owned = ptr_is_owned(description_hash);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
+       description_hash_conv = Sha256_clone(&description_hash_conv);
+       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
+       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
+       if (phantom_route_hints_constr.datalen > 0)
+               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
+       else
+               phantom_route_hints_constr.data = NULL;
+       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
+       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
+               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
+               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
+               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
+               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
+               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
+               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
+       }
+       FREE(phantom_route_hints);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_phantom_invoice_with_description_hash(amt_msat_conv, payment_hash_conv, invoice_expiry_delta_secs, description_hash_conv, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_hash(int64_t o) {
-       LDKBolt12InvoiceFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Bolt12InvoiceFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_invoice_from_channelmanager(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_hash(int64_t o) {
-       LDKBlindedHopFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedHopFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKSha256 description_hash_conv;
+       description_hash_conv.inner = untag_ptr(description_hash);
+       description_hash_conv.is_owned = ptr_is_owned(description_hash);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
+       description_hash_conv = Sha256_clone(&description_hash_conv);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_with_description_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_hash(int64_t o) {
-       LDKChannelTypeFeatures o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = ChannelTypeFeatures_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKSha256 description_hash_conv;
+       description_hash_conv.inner = untag_ptr(description_hash);
+       description_hash_conv.is_owned = ptr_is_owned(description_hash);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
+       description_hash_conv = Sha256_clone(&description_hash_conv);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_free(int64_t this_obj) {
-       LDKInitFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InitFeatures_free(this_obj_conv);
+int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_free(int64_t this_obj) {
-       LDKNodeFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeFeatures_free(this_obj_conv);
+int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int8_tArray payment_hash, int64_t min_final_cltv_expiry_delta) {
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKCurrency network_conv = LDKCurrency_from_cs(network);
+       void* amt_msat_ptr = untag_ptr(amt_msat);
+       CHECK_ACCESS(amt_msat_ptr);
+       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
+       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
+       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
+       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
+       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
+       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
+       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, payment_hash_ref, min_final_cltv_expiry_delta_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelFeatures_free(int64_t this_obj) {
-       LDKChannelFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelFeatures_free(this_obj_conv);
+int64_t  CS_LDK_payment_parameters_from_zero_amount_invoice(int64_t invoice, int64_t amount_msat) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = payment_parameters_from_zero_amount_invoice(&invoice_conv, amount_msat);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_free(int64_t this_obj) {
-       LDKBolt11InvoiceFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt11InvoiceFeatures_free(this_obj_conv);
+int64_t  CS_LDK_payment_parameters_from_invoice(int64_t invoice) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
+       *ret_conv = payment_parameters_from_invoice(&invoice_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_OfferFeatures_free(int64_t this_obj) {
-       LDKOfferFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferFeatures_free(this_obj_conv);
+void  CS_LDK_Retry_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKRetry this_ptr_conv = *(LDKRetry*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Retry_free(this_ptr_conv);
 }
 
-void  CS_LDK_InvoiceRequestFeatures_free(int64_t this_obj) {
-       LDKInvoiceRequestFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestFeatures_free(this_obj_conv);
+static inline uint64_t Retry_clone_ptr(LDKRetry *NONNULL_PTR arg) {
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-
-void  CS_LDK_Bolt12InvoiceFeatures_free(int64_t this_obj) {
-       LDKBolt12InvoiceFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12InvoiceFeatures_free(this_obj_conv);
+int64_t  CS_LDK_Retry_clone_ptr(int64_t arg) {
+       LDKRetry* arg_conv = (LDKRetry*)untag_ptr(arg);
+       int64_t ret_conv = Retry_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_BlindedHopFeatures_free(int64_t this_obj) {
-       LDKBlindedHopFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedHopFeatures_free(this_obj_conv);
+int64_t  CS_LDK_Retry_clone(int64_t orig) {
+       LDKRetry* orig_conv = (LDKRetry*)untag_ptr(orig);
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_free(int64_t this_obj) {
-       LDKChannelTypeFeatures this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelTypeFeatures_free(this_obj_conv);
+int64_t  CS_LDK_Retry_attempts(int32_t a) {
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_attempts(a);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InitFeatures_empty() {
-       LDKInitFeatures ret_var = InitFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Retry_timeout(int64_t a) {
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = Retry_timeout(a);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInitFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+jboolean  CS_LDK_Retry_eq(int64_t a, int64_t b) {
+       LDKRetry* a_conv = (LDKRetry*)untag_ptr(a);
+       LDKRetry* b_conv = (LDKRetry*)untag_ptr(b);
+       jboolean ret_conv = Retry_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_unknown_bits(&this_arg_conv);
+int64_t  CS_LDK_Retry_hash(int64_t o) {
+       LDKRetry* o_conv = (LDKRetry*)untag_ptr(o);
+       int64_t ret_conv = Retry_hash(o_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InitFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InitFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_Retry_write(int64_t obj) {
+       LDKRetry* obj_conv = (LDKRetry*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = Retry_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InitFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_required_custom_bit(&this_arg_conv, bit);
+int64_t  CS_LDK_Retry_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = Retry_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InitFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InitFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_RetryableSendFailure_clone(int64_t orig) {
+       LDKRetryableSendFailure* orig_conv = (LDKRetryableSendFailure*)untag_ptr(orig);
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_clone(orig_conv));
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_empty() {
-       LDKNodeFeatures ret_var = NodeFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_RetryableSendFailure_payment_expired() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_payment_expired());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+int32_t  CS_LDK_RetryableSendFailure_route_not_found() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_route_not_found());
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_unknown_bits(&this_arg_conv);
+int32_t  CS_LDK_RetryableSendFailure_duplicate_payment() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_duplicate_payment());
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_RetryableSendFailure_onion_packet_size_exceeded() {
+       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_onion_packet_size_exceeded());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_RetryableSendFailure_eq(int64_t a, int64_t b) {
+       LDKRetryableSendFailure* a_conv = (LDKRetryableSendFailure*)untag_ptr(a);
+       LDKRetryableSendFailure* b_conv = (LDKRetryableSendFailure*)untag_ptr(b);
+       jboolean ret_conv = RetryableSendFailure_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NodeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_NodeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = NodeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_PaymentSendFailure_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPaymentSendFailure this_ptr_conv = *(LDKPaymentSendFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PaymentSendFailure_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_ChannelFeatures_empty() {
-       LDKChannelFeatures ret_var = ChannelFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-
-jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = ChannelFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+int64_t  CS_LDK_PaymentSendFailure_clone_ptr(int64_t arg) {
+       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)untag_ptr(arg);
+       int64_t ret_conv = PaymentSendFailure_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_PaymentSendFailure_clone(int64_t orig) {
+       LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)untag_ptr(orig);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_parameter_error(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKAPIError a_conv = *(LDKAPIError*)(a_ptr);
+       a_conv = APIError_clone((LDKAPIError*)untag_ptr(a));
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_parameter_error(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_path_parameter_error(int64_tArray a) {
+       LDKCVec_CResult_NoneAPIErrorZZ a_constr;
+       a_constr.datalen = a->arr_len;
+       if (a_constr.datalen > 0)
+               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
+       else
+               a_constr.data = NULL;
+       int64_t* a_vals = a->elems;
+       for (size_t w = 0; w < a_constr.datalen; w++) {
+               int64_t a_conv_22 = a_vals[w];
+               void* a_conv_22_ptr = untag_ptr(a_conv_22);
+               CHECK_ACCESS(a_conv_22_ptr);
+               LDKCResult_NoneAPIErrorZ a_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(a_conv_22_ptr);
+               a_conv_22_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)untag_ptr(a_conv_22));
+               a_constr.data[w] = a_conv_22_conv;
+       }
+       FREE(a);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_path_parameter_error(a_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_all_failed_resend_safe(int64_tArray a) {
+       LDKCVec_APIErrorZ a_constr;
+       a_constr.datalen = a->arr_len;
+       if (a_constr.datalen > 0)
+               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKAPIError), "LDKCVec_APIErrorZ Elements");
+       else
+               a_constr.data = NULL;
+       int64_t* a_vals = a->elems;
+       for (size_t k = 0; k < a_constr.datalen; k++) {
+               int64_t a_conv_10 = a_vals[k];
+               void* a_conv_10_ptr = untag_ptr(a_conv_10);
+               CHECK_ACCESS(a_conv_10_ptr);
+               LDKAPIError a_conv_10_conv = *(LDKAPIError*)(a_conv_10_ptr);
+               a_conv_10_conv = APIError_clone((LDKAPIError*)untag_ptr(a_conv_10));
+               a_constr.data[k] = a_conv_10_conv;
+       }
+       FREE(a);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_all_failed_resend_safe(a_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentSendFailure_duplicate_payment() {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_duplicate_payment();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_empty() {
-       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_PaymentSendFailure_partial_failure(int64_tArray results, int64_t failed_paths_retry, int8_tArray payment_id) {
+       LDKCVec_CResult_NoneAPIErrorZZ results_constr;
+       results_constr.datalen = results->arr_len;
+       if (results_constr.datalen > 0)
+               results_constr.data = MALLOC(results_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
+       else
+               results_constr.data = NULL;
+       int64_t* results_vals = results->elems;
+       for (size_t w = 0; w < results_constr.datalen; w++) {
+               int64_t results_conv_22 = results_vals[w];
+               void* results_conv_22_ptr = untag_ptr(results_conv_22);
+               CHECK_ACCESS(results_conv_22_ptr);
+               LDKCResult_NoneAPIErrorZ results_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(results_conv_22_ptr);
+               results_conv_22_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)untag_ptr(results_conv_22));
+               results_constr.data[w] = results_conv_22_conv;
+       }
+       FREE(results);
+       LDKRouteParameters failed_paths_retry_conv;
+       failed_paths_retry_conv.inner = untag_ptr(failed_paths_retry);
+       failed_paths_retry_conv.is_owned = ptr_is_owned(failed_paths_retry);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
+       failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_partial_failure(results_constr, failed_paths_retry_conv, payment_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBolt11InvoiceFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+jboolean  CS_LDK_PaymentSendFailure_eq(int64_t a, int64_t b) {
+       LDKPaymentSendFailure* a_conv = (LDKPaymentSendFailure*)untag_ptr(a);
+       LDKPaymentSendFailure* b_conv = (LDKPaymentSendFailure*)untag_ptr(b);
+       jboolean ret_conv = PaymentSendFailure_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_Bolt12PaymentError_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKBolt12PaymentError this_ptr_conv = *(LDKBolt12PaymentError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Bolt12PaymentError_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t Bolt12PaymentError_clone_ptr(LDKBolt12PaymentError *NONNULL_PTR arg) {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Bolt12PaymentError_clone_ptr(int64_t arg) {
+       LDKBolt12PaymentError* arg_conv = (LDKBolt12PaymentError*)untag_ptr(arg);
+       int64_t ret_conv = Bolt12PaymentError_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Bolt12PaymentError_clone(int64_t orig) {
+       LDKBolt12PaymentError* orig_conv = (LDKBolt12PaymentError*)untag_ptr(orig);
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Bolt12PaymentError_unexpected_invoice() {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_unexpected_invoice();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt11InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Bolt12PaymentError_duplicate_invoice() {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_duplicate_invoice();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferFeatures_empty() {
-       LDKOfferFeatures ret_var = OfferFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Bolt12PaymentError_unknown_required_features() {
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_unknown_required_features();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_OfferFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = OfferFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt12PaymentError_sending_failed(int32_t a) {
+       LDKRetryableSendFailure a_conv = LDKRetryableSendFailure_from_cs(a);
+       LDKBolt12PaymentError *ret_copy = MALLOC(sizeof(LDKBolt12PaymentError), "LDKBolt12PaymentError");
+       *ret_copy = Bolt12PaymentError_sending_failed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_OfferFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = OfferFeatures_requires_unknown_bits(&this_arg_conv);
+jboolean  CS_LDK_Bolt12PaymentError_eq(int64_t a, int64_t b) {
+       LDKBolt12PaymentError* a_conv = (LDKBolt12PaymentError*)untag_ptr(a);
+       LDKBolt12PaymentError* b_conv = (LDKBolt12PaymentError*)untag_ptr(b);
+       jboolean ret_conv = Bolt12PaymentError_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ProbeSendFailure_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKProbeSendFailure this_ptr_conv = *(LDKProbeSendFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ProbeSendFailure_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_OfferFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg) {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_ProbeSendFailure_clone_ptr(int64_t arg) {
+       LDKProbeSendFailure* arg_conv = (LDKProbeSendFailure*)untag_ptr(arg);
+       int64_t ret_conv = ProbeSendFailure_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_OfferFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_ProbeSendFailure_clone(int64_t orig) {
+       LDKProbeSendFailure* orig_conv = (LDKProbeSendFailure*)untag_ptr(orig);
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKOfferFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = OfferFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_ProbeSendFailure_route_not_found() {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_route_not_found();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_empty() {
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_ProbeSendFailure_sending_failed(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKPaymentSendFailure a_conv = *(LDKPaymentSendFailure*)(a_ptr);
+       a_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(a));
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_sending_failed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+jboolean  CS_LDK_ProbeSendFailure_eq(int64_t a, int64_t b) {
+       LDKProbeSendFailure* a_conv = (LDKProbeSendFailure*)untag_ptr(a);
+       LDKProbeSendFailure* b_conv = (LDKProbeSendFailure*)untag_ptr(b);
+       jboolean ret_conv = ProbeSendFailure_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_RecipientOnionFields_free(int64_t this_obj) {
+       LDKRecipientOnionFields this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RecipientOnionFields_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RecipientOnionFields_get_payment_secret(int64_t this_ptr) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = RecipientOnionFields_get_payment_secret(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_RecipientOnionFields_set_payment_secret(int64_t this_ptr, int64_t val) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       RecipientOnionFields_set_payment_secret(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RecipientOnionFields_get_payment_metadata(int64_t this_ptr) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = RecipientOnionFields_get_payment_metadata(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKInvoiceRequestFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = InvoiceRequestFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_RecipientOnionFields_set_payment_metadata(int64_t this_ptr, int64_t val) {
+       LDKRecipientOnionFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
+       RecipientOnionFields_set_payment_metadata(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_empty() {
-       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_empty();
+static inline uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg) {
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
+int64_t  CS_LDK_RecipientOnionFields_clone_ptr(int64_t arg) {
+       LDKRecipientOnionFields arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = RecipientOnionFields_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = Bolt12InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_BlindedHopFeatures_empty() {
-       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_empty();
+int64_t  CS_LDK_RecipientOnionFields_clone(int64_t orig) {
+       LDKRecipientOnionFields orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBlindedHopFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits(&this_arg_conv);
+jboolean  CS_LDK_RecipientOnionFields_eq(int64_t a, int64_t b) {
+       LDKRecipientOnionFields a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRecipientOnionFields b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RecipientOnionFields_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_BlindedHopFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_RecipientOnionFields_write(int64_t obj) {
+       LDKRecipientOnionFields obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RecipientOnionFields_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_required_custom_bit(&this_arg_conv, bit);
+int64_t  CS_LDK_RecipientOnionFields_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RecipientOnionFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsDecodeErrorZ), "LDKCResult_RecipientOnionFieldsDecodeErrorZ");
+       *ret_conv = RecipientOnionFields_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKBlindedHopFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = BlindedHopFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RecipientOnionFields_secret_only(int8_tArray payment_secret) {
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_secret_only(payment_secret_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_empty() {
-       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_empty();
+int64_t  CS_LDK_RecipientOnionFields_spontaneous_empty() {
+       LDKRecipientOnionFields ret_var = RecipientOnionFields_spontaneous_empty();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_RecipientOnionFields_with_custom_tlvs(int64_t this_arg, int64_tArray custom_tlvs) {
+       LDKRecipientOnionFields this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTypeFeatures other_conv;
-       other_conv.inner = untag_ptr(other);
-       other_conv.is_owned = ptr_is_owned(other);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
-       other_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
-       return ret_conv;
+       this_arg_conv = RecipientOnionFields_clone(&this_arg_conv);
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs_constr;
+       custom_tlvs_constr.datalen = custom_tlvs->arr_len;
+       if (custom_tlvs_constr.datalen > 0)
+               custom_tlvs_constr.data = MALLOC(custom_tlvs_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
+       else
+               custom_tlvs_constr.data = NULL;
+       int64_t* custom_tlvs_vals = custom_tlvs->elems;
+       for (size_t x = 0; x < custom_tlvs_constr.datalen; x++) {
+               int64_t custom_tlvs_conv_23 = custom_tlvs_vals[x];
+               void* custom_tlvs_conv_23_ptr = untag_ptr(custom_tlvs_conv_23);
+               CHECK_ACCESS(custom_tlvs_conv_23_ptr);
+               LDKC2Tuple_u64CVec_u8ZZ custom_tlvs_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(custom_tlvs_conv_23_ptr);
+               custom_tlvs_conv_23_conv = C2Tuple_u64CVec_u8ZZ_clone((LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(custom_tlvs_conv_23));
+               custom_tlvs_constr.data[x] = custom_tlvs_conv_23_conv;
+       }
+       FREE(custom_tlvs);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = RecipientOnionFields_with_custom_tlvs(this_arg_conv, custom_tlvs_constr);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_tArray  CS_LDK_RecipientOnionFields_custom_tlvs(int64_t this_arg) {
+       LDKRecipientOnionFields this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret_var = RecipientOnionFields_custom_tlvs(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_u64CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+               *ret_conv_23_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_required_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_CustomMessageReader_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomMessageReader this_ptr_conv = *(LDKCustomMessageReader*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomMessageReader_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(arg);
+       return tag_ptr(ret_ret, true);
 }
-
-int64_t  CS_LDK_ChannelTypeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_required_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Type_clone_ptr(int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKType* arg_conv = (LDKType*)arg_ptr;
+       int64_t ret_conv = Type_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
-       *ret_conv = ChannelTypeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Type_clone(int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKType* orig_conv = (LDKType*)orig_ptr;
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int8_tArray  CS_LDK_InitFeatures_write(int64_t obj) {
-       LDKInitFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_Type_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKType this_ptr_conv = *(LDKType*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Type_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_InitFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
-       *ret_conv = InitFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_OfferId_free(int64_t this_obj) {
+       LDKOfferId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferId_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_ChannelFeatures_write(int64_t obj) {
-       LDKChannelFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int8_tArray  CS_LDK_OfferId_get_a(int64_t this_ptr) {
+       LDKOfferId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *OfferId_get_a(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
-       *ret_conv = ChannelFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_OfferId_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKOfferId this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       OfferId_set_a(&this_ptr_conv, val_ref);
 }
 
-int8_tArray  CS_LDK_NodeFeatures_write(int64_t obj) {
-       LDKNodeFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_OfferId_new(int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK(a_arg->arr_len == 32);
+       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
+       LDKOfferId ret_var = OfferId_new(a_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NodeFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
-       *ret_conv = NodeFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t OfferId_clone_ptr(LDKOfferId *NONNULL_PTR arg) {
+       LDKOfferId ret_var = OfferId_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OfferId_clone_ptr(int64_t arg) {
+       LDKOfferId arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OfferId_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_Bolt11InvoiceFeatures_write(int64_t obj) {
-       LDKBolt11InvoiceFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt11InvoiceFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_OfferId_clone(int64_t orig) {
+       LDKOfferId orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOfferId ret_var = OfferId_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt11InvoiceFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt11InvoiceFeaturesDecodeErrorZ");
-       *ret_conv = Bolt11InvoiceFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_OfferId_eq(int64_t a, int64_t b) {
+       LDKOfferId a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKOfferId b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = OfferId_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_Bolt12InvoiceFeatures_write(int64_t obj) {
-       LDKBolt12InvoiceFeatures obj_conv;
+int8_tArray  CS_LDK_OfferId_write(int64_t obj) {
+       LDKOfferId obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12InvoiceFeatures_write(&obj_conv);
+       LDKCVec_u8Z ret_var = OfferId_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Bolt12InvoiceFeatures_read(int8_tArray ser) {
+int64_t  CS_LDK_OfferId_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ), "LDKCResult_Bolt12InvoiceFeaturesDecodeErrorZ");
-       *ret_conv = Bolt12InvoiceFeatures_read(ser_ref);
+       LDKCResult_OfferIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferIdDecodeErrorZ), "LDKCResult_OfferIdDecodeErrorZ");
+       *ret_conv = OfferId_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_BlindedHopFeatures_write(int64_t obj) {
-       LDKBlindedHopFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHopFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_free(int64_t this_obj) {
+       LDKOfferWithExplicitMetadataBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferWithExplicitMetadataBuilder_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_BlindedHopFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedHopFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopFeaturesDecodeErrorZ), "LDKCResult_BlindedHopFeaturesDecodeErrorZ");
-       *ret_conv = BlindedHopFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t OfferWithExplicitMetadataBuilder_clone_ptr(LDKOfferWithExplicitMetadataBuilder *NONNULL_PTR arg) {
+       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone_ptr(int64_t arg) {
+       LDKOfferWithExplicitMetadataBuilder arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OfferWithExplicitMetadataBuilder_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelTypeFeatures_write(int64_t obj) {
-       LDKChannelTypeFeatures obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelTypeFeatures_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone(int64_t orig) {
+       LDKOfferWithExplicitMetadataBuilder orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelTypeFeatures_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ChannelTypeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTypeFeaturesDecodeErrorZ), "LDKCResult_ChannelTypeFeaturesDecodeErrorZ");
-       *ret_conv = ChannelTypeFeatures_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_OfferWithDerivedMetadataBuilder_free(int64_t this_obj) {
+       LDKOfferWithDerivedMetadataBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferWithDerivedMetadataBuilder_free(this_obj_conv);
 }
 
-void  CS_LDK_InitFeatures_set_data_loss_protect_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_data_loss_protect_optional(&this_arg_conv);
+static inline uint64_t OfferWithDerivedMetadataBuilder_clone_ptr(LDKOfferWithDerivedMetadataBuilder *NONNULL_PTR arg) {
+       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
+       LDKOfferWithDerivedMetadataBuilder arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OfferWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_data_loss_protect_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_data_loss_protect_required(&this_arg_conv);
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone(int64_t orig) {
+       LDKOfferWithDerivedMetadataBuilder orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_data_loss_protect(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_new(int8_tArray signing_pubkey) {
+       LDKPublicKey signing_pubkey_ref;
+       CHECK(signing_pubkey->arr_len == 33);
+       memcpy(signing_pubkey_ref.compressed_form, signing_pubkey->elems, 33); FREE(signing_pubkey);
+       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_new(signing_pubkey_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_data_loss_protect_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_metadata(int64_t this_arg, int8_tArray metadata) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_data_loss_protect_optional(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKCVec_u8Z metadata_ref;
+       metadata_ref.datalen = metadata->arr_len;
+       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = OfferWithExplicitMetadataBuilder_metadata(this_arg_conv, metadata_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_data_loss_protect_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_data_loss_protect_required(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       OfferWithExplicitMetadataBuilder_chain(this_arg_conv, network_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_data_loss_protect(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       OfferWithExplicitMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_data_loss_protect(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       OfferWithExplicitMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_data_loss_protect(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_description(int64_t this_arg, jstring description) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_data_loss_protect(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       OfferWithExplicitMetadataBuilder_description(this_arg_conv, description_conv);
 }
 
-void  CS_LDK_InitFeatures_set_initial_routing_sync_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_initial_routing_sync_optional(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
+       OfferWithExplicitMetadataBuilder_issuer(this_arg_conv, issuer_conv);
 }
 
-void  CS_LDK_InitFeatures_set_initial_routing_sync_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_path(int64_t this_arg, int64_t path) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_initial_routing_sync_required(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKBlindedMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = BlindedMessagePath_clone(&path_conv);
+       OfferWithExplicitMetadataBuilder_path(this_arg_conv, path_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_initial_routing_sync(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithExplicitMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_initial_routing_sync(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       void* quantity_ptr = untag_ptr(quantity);
+       CHECK_ACCESS(quantity_ptr);
+       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
+       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
+       OfferWithExplicitMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
 }
 
-void  CS_LDK_InitFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_build(int64_t this_arg) {
+       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
+       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
+       *ret_conv = OfferWithExplicitMetadataBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(int8_tArray node_id, int64_t expanded_key, int64_t nonce) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(node_id_ref, &expanded_key_conv, nonce_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       OfferWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
 }
 
-void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       OfferWithDerivedMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
 }
 
-void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       OfferWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       OfferWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
+       OfferWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_upfront_shutdown_script(&this_arg_conv);
-       return ret_conv;
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKBlindedMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = BlindedMessagePath_clone(&path_conv);
+       OfferWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
 }
 
-void  CS_LDK_InitFeatures_set_gossip_queries_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_OfferWithDerivedMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_gossip_queries_optional(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       void* quantity_ptr = untag_ptr(quantity);
+       CHECK_ACCESS(quantity_ptr);
+       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
+       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
+       OfferWithDerivedMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
 }
 
-void  CS_LDK_InitFeatures_set_gossip_queries_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_build(int64_t this_arg) {
+       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_gossip_queries_required(&this_arg_conv);
+       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
+       *ret_conv = OfferWithDerivedMetadataBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_gossip_queries(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_gossip_queries(&this_arg_conv);
+void  CS_LDK_Offer_free(int64_t this_obj) {
+       LDKOffer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Offer_free(this_obj_conv);
+}
+
+static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
+       LDKOffer ret_var = Offer_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Offer_clone_ptr(int64_t arg) {
+       LDKOffer arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_gossip_queries_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_gossip_queries_optional(&this_arg_conv);
+int64_t  CS_LDK_Offer_clone(int64_t orig) {
+       LDKOffer orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOffer ret_var = Offer_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_gossip_queries_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+ptrArray  CS_LDK_Offer_chains(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_gossip_queries_required(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = Offer_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_gossip_queries(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_metadata(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_gossip_queries(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = Offer_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_gossip_queries(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_amount(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_gossip_queries(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = Offer_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_gossip_queries(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_description(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_gossip_queries(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_variable_length_onion_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_offer_features(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_variable_length_onion_optional(&this_arg_conv);
+       LDKOfferFeatures ret_var = Offer_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_variable_length_onion_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_absolute_expiry(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_variable_length_onion_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_variable_length_onion(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_issuer(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_variable_length_onion(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_variable_length_onion_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_tArray  CS_LDK_Offer_paths(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_variable_length_onion_optional(&this_arg_conv);
+       LDKCVec_BlindedMessagePathZ ret_var = Offer_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_variable_length_onion_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_supported_quantity(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_variable_length_onion_required(&this_arg_conv);
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Offer_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_variable_length_onion(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Offer_signing_pubkey(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_variable_length_onion(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Offer_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_id(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_variable_length_onion_optional(&this_arg_conv);
+       LDKOfferId ret_var = Offer_id(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_supports_chain(int64_t this_arg, int8_tArray chain) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_variable_length_onion_required(&this_arg_conv);
+       LDKThirtyTwoBytes chain_ref;
+       CHECK(chain->arr_len == 32);
+       memcpy(chain_ref.data, chain->elems, 32); FREE(chain);
+       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_variable_length_onion(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_is_expired(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_variable_length_onion(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_is_expired_no_std(&this_arg_conv, duration_since_epoch);
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_variable_length_onion(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_is_valid_quantity(int64_t this_arg, int64_t quantity) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_variable_length_onion(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+jboolean  CS_LDK_Offer_expects_quantity(int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_variable_length_onion(&this_arg_conv);
+       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_static_remote_key_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_request_invoice_deriving_payer_id(int64_t this_arg, int64_t expanded_key, int64_t nonce, int8_tArray payment_id) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_static_remote_key_optional(&this_arg_conv);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ");
+       *ret_conv = Offer_request_invoice_deriving_payer_id(&this_arg_conv, &expanded_key_conv, nonce_conv, payment_id_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_static_remote_key_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_request_invoice_deriving_metadata(int64_t this_arg, int8_tArray payer_id, int64_t expanded_key, int64_t nonce, int8_tArray payment_id) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_static_remote_key_required(&this_arg_conv);
+       LDKPublicKey payer_id_ref;
+       CHECK(payer_id->arr_len == 33);
+       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
+       *ret_conv = Offer_request_invoice_deriving_metadata(&this_arg_conv, payer_id_ref, &expanded_key_conv, nonce_conv, payment_id_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_static_remote_key(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Offer_request_invoice(int64_t this_arg, int8_tArray metadata, int8_tArray payer_id) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_u8Z metadata_ref;
+       metadata_ref.datalen = metadata->arr_len;
+       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
+       LDKPublicKey payer_id_ref;
+       CHECK(payer_id->arr_len == 33);
+       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
+       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
+       *ret_conv = Offer_request_invoice(&this_arg_conv, metadata_ref, payer_id_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_static_remote_key_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_static_remote_key_optional(&this_arg_conv);
+int64_t  CS_LDK_Offer_hash(int64_t o) {
+       LDKOffer o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Offer_hash(&o_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_static_remote_key_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_static_remote_key_required(&this_arg_conv);
+int64_t  CS_LDK_Offer_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_OfferDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferDecodeErrorZ), "LDKCResult_OfferDecodeErrorZ");
+       *ret_conv = Offer_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_static_remote_key(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_static_remote_key(&this_arg_conv);
+int8_tArray  CS_LDK_Offer_write(int64_t obj) {
+       LDKOffer obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Offer_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+void  CS_LDK_Amount_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKAmount this_ptr_conv = *(LDKAmount*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Amount_free(this_ptr_conv);
+}
+
+static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Amount_clone_ptr(int64_t arg) {
+       LDKAmount* arg_conv = (LDKAmount*)untag_ptr(arg);
+       int64_t ret_conv = Amount_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Amount_clone(int64_t orig) {
+       LDKAmount* orig_conv = (LDKAmount*)untag_ptr(orig);
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Amount_bitcoin(int64_t amount_msats) {
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_bitcoin(amount_msats);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Amount_currency(int8_tArray iso4217_code, int64_t amount) {
+       LDKThreeBytes iso4217_code_ref;
+       CHECK(iso4217_code->arr_len == 3);
+       memcpy(iso4217_code_ref.data, iso4217_code->elems, 3); FREE(iso4217_code);
+       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
+       *ret_copy = Amount_currency(iso4217_code_ref, amount);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_Quantity_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKQuantity this_ptr_conv = *(LDKQuantity*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Quantity_free(this_ptr_conv);
+}
+
+static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Quantity_clone_ptr(int64_t arg) {
+       LDKQuantity* arg_conv = (LDKQuantity*)untag_ptr(arg);
+       int64_t ret_conv = Quantity_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Quantity_clone(int64_t orig) {
+       LDKQuantity* orig_conv = (LDKQuantity*)untag_ptr(orig);
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Quantity_bounded(int64_t a) {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_bounded(a);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Quantity_unbounded() {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_unbounded();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Quantity_one() {
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = Quantity_one();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Offer_from_str(jstring s) {
+       LDKStr s_conv = str_ref_to_owned_c(s);
+       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
+       *ret_conv = Offer_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+jstring  CS_LDK_Offer_to_str(int64_t o) {
+       LDKOffer o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = Offer_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_free(int64_t this_obj) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceWithExplicitSigningPubkeyBuilder_free(this_obj_conv);
+}
+
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_free(int64_t this_obj) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceWithDerivedSigningPubkeyBuilder_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_build(int64_t this_arg) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_static_remote_key_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ");
+       *ret_conv = InvoiceWithExplicitSigningPubkeyBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_static_remote_key_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_static_remote_key(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       uint8_t script_hash_arr[32];
+       CHECK(script_hash->arr_len == 32);
+       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
+       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
+       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_static_remote_key(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_static_remote_key(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       LDKTweakedPublicKey utput_key_ref;
+       CHECK(utput_key->arr_len == 32);
+       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
+       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_static_remote_key(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
+       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_static_remote_key(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
+       
+       InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(this_arg_conv);
 }
 
-void  CS_LDK_InitFeatures_set_payment_secret_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(int64_t this_arg) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_payment_secret_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ");
+       *ret_conv = InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_payment_secret_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_payment_secret_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_payment_secret(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_payment_secret(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       uint8_t script_hash_arr[32];
+       CHECK(script_hash->arr_len == 32);
+       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
+       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
+       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
 }
 
-void  CS_LDK_NodeFeatures_set_payment_secret_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_payment_secret_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
 }
 
-void  CS_LDK_NodeFeatures_set_payment_secret_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_payment_secret_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       LDKTweakedPublicKey utput_key_ref;
+       CHECK(utput_key->arr_len == 32);
+       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
+       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_payment_secret(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
+       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_payment_secret(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
+       
+       InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(this_arg_conv);
+}
+
+void  CS_LDK_UnsignedBolt12Invoice_free(int64_t this_obj) {
+       LDKUnsignedBolt12Invoice this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedBolt12Invoice_free(this_obj_conv);
+}
+
+static inline uint64_t UnsignedBolt12Invoice_clone_ptr(LDKUnsignedBolt12Invoice *NONNULL_PTR arg) {
+       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_UnsignedBolt12Invoice_clone_ptr(int64_t arg) {
+       LDKUnsignedBolt12Invoice arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedBolt12Invoice_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_secret_optional(&this_arg_conv);
+int64_t  CS_LDK_UnsignedBolt12Invoice_clone(int64_t orig) {
+       LDKUnsignedBolt12Invoice orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+void  CS_LDK_SignBolt12InvoiceFn_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignBolt12InvoiceFn this_ptr_conv = *(LDKSignBolt12InvoiceFn*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignBolt12InvoiceFn_free(this_ptr_conv);
+}
+
+int64_t  CS_LDK_UnsignedBolt12Invoice_tagged_hash(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_secret_required(&this_arg_conv);
+       LDKTaggedHash ret_var = UnsignedBolt12Invoice_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_secret(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+void  CS_LDK_Bolt12Invoice_free(int64_t this_obj) {
+       LDKBolt12Invoice this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12Invoice_free(this_obj_conv);
+}
+
+static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Bolt12Invoice_clone_ptr(int64_t arg) {
+       LDKBolt12Invoice arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Bolt12Invoice_clone(int64_t orig) {
+       LDKBolt12Invoice orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_UnsignedBolt12Invoice_created_at(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_secret(&this_arg_conv);
+       int64_t ret_conv = UnsignedBolt12Invoice_created_at(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_payment_secret(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_relative_expiry(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_payment_secret(&this_arg_conv);
+       int64_t ret_conv = UnsignedBolt12Invoice_relative_expiry(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_payment_secret(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+jboolean  CS_LDK_UnsignedBolt12Invoice_is_expired(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_payment_secret(&this_arg_conv);
+       jboolean ret_conv = UnsignedBolt12Invoice_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_secret(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+ptrArray  CS_LDK_UnsignedBolt12Invoice_fallbacks(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_secret(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_StrZ ret_var = UnsignedBolt12Invoice_fallbacks(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       jstring *ret_arr_ptr = (jstring*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKStr ret_conv_8_str = ret_var.data[i];
+               jstring ret_conv_8_conv = str_ref_to_cs(ret_conv_8_str.chars, ret_conv_8_str.len);
+               Str_free(ret_conv_8_str);
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_features(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_basic_mpp_optional(&this_arg_conv);
+       LDKBolt12InvoiceFeatures ret_var = UnsignedBolt12Invoice_invoice_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_signing_pubkey(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_basic_mpp_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_offer_chains(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = UnsignedBolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_chain(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_basic_mpp_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_metadata(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_basic_mpp_required(&this_arg_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = UnsignedBolt12Invoice_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_amount(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = UnsignedBolt12Invoice_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_offer_features(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+       LDKOfferFeatures ret_var = UnsignedBolt12Invoice_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_description(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_absolute_expiry(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedBolt12Invoice_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_issuer(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt12InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int64_tArray  CS_LDK_UnsignedBolt12Invoice_message_paths(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt12InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+       LDKCVec_BlindedMessagePathZ ret_var = UnsignedBolt12Invoice_message_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_supported_quantity(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
+       *ret_copy = UnsignedBolt12Invoice_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_metadata(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = UnsignedBolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_request_features(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKInvoiceRequestFeatures ret_var = UnsignedBolt12Invoice_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_quantity(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedBolt12Invoice_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
-       LDKBolt12InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_id(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_wumbo_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_payer_note(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_wumbo_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_wumbo_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_payment_hash(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_wumbo_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payment_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_wumbo(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedBolt12Invoice_amount_msats(int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_wumbo(&this_arg_conv);
+       int64_t ret_conv = UnsignedBolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_wumbo_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_created_at(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_wumbo_optional(&this_arg_conv);
+       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_wumbo_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_relative_expiry(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_wumbo_required(&this_arg_conv);
+       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_wumbo(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+jboolean  CS_LDK_Bolt12Invoice_is_expired(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_wumbo(&this_arg_conv);
+       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_wumbo(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+ptrArray  CS_LDK_Bolt12Invoice_fallbacks(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_wumbo(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_StrZ ret_var = Bolt12Invoice_fallbacks(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       jstring *ret_arr_ptr = (jstring*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKStr ret_conv_8_str = ret_var.data[i];
+               jstring ret_conv_8_conv = str_ref_to_cs(ret_conv_8_str.chars, ret_conv_8_str.len);
+               Str_free(ret_conv_8_str);
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_wumbo(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_invoice_features(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_wumbo(&this_arg_conv);
-       return ret_conv;
+       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_invoice_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_signing_pubkey(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_offer_chains(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = Bolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_chain(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_metadata(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = Bolt12Invoice_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_amount(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = Bolt12Invoice_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_offer_features(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKOfferFeatures ret_var = Bolt12Invoice_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_description(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_absolute_expiry(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_issuer(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Bolt12Invoice_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_tArray  CS_LDK_Bolt12Invoice_message_paths(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedMessagePathZ ret_var = Bolt12Invoice_message_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_supported_quantity(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
+       *ret_copy = Bolt12Invoice_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_payer_metadata(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = Bolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_invoice_request_features(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = Bolt12Invoice_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_quantity(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_payer_id(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_payer_note(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_payment_hash(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_payment_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_amount_msats(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_signature(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_signature(&this_arg_conv).compact_form, 64);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int8_tArray  CS_LDK_Bolt12Invoice_signable_hash(int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Bolt12Invoice_signable_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_verify_using_metadata(int64_t this_arg, int64_t key) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = Bolt12Invoice_verify_using_metadata(&this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_Bolt12Invoice_verify_using_payer_data(int64_t this_arg, int8_tArray payment_id, int64_t nonce, int64_t key) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = Bolt12Invoice_verify_using_payer_data(&this_arg_conv, payment_id_ref, nonce_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+int64_t  CS_LDK_Bolt12Invoice_hash(int64_t o) {
+       LDKBolt12Invoice o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_UnsignedBolt12Invoice_write(int64_t obj) {
+       LDKUnsignedBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedBolt12Invoice_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_route_blinding_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_route_blinding_optional(&this_arg_conv);
+int8_tArray  CS_LDK_Bolt12Invoice_write(int64_t obj) {
+       LDKBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_route_blinding_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_route_blinding_required(&this_arg_conv);
+int64_t  CS_LDK_Bolt12Invoice_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12InvoiceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceDecodeErrorZ), "LDKCResult_Bolt12InvoiceDecodeErrorZ");
+       *ret_conv = Bolt12Invoice_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_route_blinding(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_route_blinding(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_InvoiceError_free(int64_t this_obj) {
+       LDKInvoiceError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceError_free(this_obj_conv);
 }
 
-void  CS_LDK_NodeFeatures_set_route_blinding_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_route_blinding_optional(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_get_erroneous_field(int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_route_blinding_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_route_blinding_required(&this_arg_conv);
+void  CS_LDK_InvoiceError_set_erroneous_field(int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ErroneousField_clone(&val_conv);
+       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_route_blinding(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_route_blinding(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_InvoiceError_get_message(int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_route_blinding(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_route_blinding(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_InvoiceError_set_message(int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = UntrustedString_clone(&val_conv);
+       InvoiceError_set_message(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_route_blinding(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_route_blinding(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_new(int64_t erroneous_field_arg, int64_t message_arg) {
+       LDKErroneousField erroneous_field_arg_conv;
+       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
+       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
+       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
+       LDKUntrustedString message_arg_conv;
+       message_arg_conv.inner = untag_ptr(message_arg);
+       message_arg_conv.is_owned = ptr_is_owned(message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
+       message_arg_conv = UntrustedString_clone(&message_arg_conv);
+       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
+       LDKInvoiceError ret_var = InvoiceError_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_InvoiceError_clone_ptr(int64_t arg) {
+       LDKInvoiceError arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_clone(int64_t orig) {
+       LDKInvoiceError orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+void  CS_LDK_ErroneousField_free(int64_t this_obj) {
+       LDKErroneousField this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ErroneousField_free(this_obj_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_shutdown_anysegwit(&this_arg_conv);
+int64_t  CS_LDK_ErroneousField_get_tlv_fieldnum(int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+void  CS_LDK_ErroneousField_set_tlv_fieldnum(int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
 }
 
-void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+int64_t  CS_LDK_ErroneousField_get_suggested_value(int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_shutdown_anysegwit(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_ErroneousField_set_suggested_value(int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
+       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_shutdown_anysegwit(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_ErroneousField_new(int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
+       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
+       CHECK_ACCESS(suggested_value_arg_ptr);
+       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
+       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
+       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_shutdown_anysegwit(&this_arg_conv);
+static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
+       LDKErroneousField ret_var = ErroneousField_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ErroneousField_clone_ptr(int64_t arg) {
+       LDKErroneousField arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_taproot_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_taproot_optional(&this_arg_conv);
+int64_t  CS_LDK_ErroneousField_clone(int64_t orig) {
+       LDKErroneousField orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_taproot_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_taproot_required(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_from_string(jstring s) {
+       LDKStr s_conv = str_ref_to_owned_c(s);
+       LDKInvoiceError ret_var = InvoiceError_from_string(s_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_taproot(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_taproot(&this_arg_conv);
+jstring  CS_LDK_InvoiceError_to_str(int64_t o) {
+       LDKInvoiceError o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = InvoiceError_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_taproot_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_taproot_optional(&this_arg_conv);
+int8_tArray  CS_LDK_InvoiceError_write(int64_t obj) {
+       LDKInvoiceError obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_taproot_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_taproot_required(&this_arg_conv);
+int64_t  CS_LDK_InvoiceError_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
+       *ret_conv = InvoiceError_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_taproot(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_taproot(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_free(int64_t this_obj) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequestWithExplicitPayerIdBuilder_free(this_obj_conv);
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_taproot_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_taproot_optional(&this_arg_conv);
+void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_free(int64_t this_obj) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequestWithDerivedPayerIdBuilder_free(this_obj_conv);
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_taproot_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_build(int64_t this_arg) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_taproot_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ), "LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_taproot(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_chain(this_arg_conv, network_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_taproot(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_taproot(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_quantity(this_arg_conv, quantity);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_taproot(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
+       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_taproot(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
+       
+       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
+       InvoiceRequestWithExplicitPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
 }
 
-void  CS_LDK_InitFeatures_set_onion_messages_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(int64_t this_arg) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_onion_messages_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKCResult_InvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InitFeatures_set_onion_messages_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_onion_messages_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_chain(this_arg_conv, network_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_onion_messages(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_onion_messages(&this_arg_conv);
-       return ret_conv;
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_onion_messages_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_onion_messages_optional(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_quantity(this_arg_conv, quantity);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeFeatures_set_onion_messages_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
+       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_onion_messages_required(&this_arg_conv);
+       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
+       
+       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
+       InvoiceRequestWithDerivedPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_onion_messages(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_onion_messages(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_UnsignedInvoiceRequest_free(int64_t this_obj) {
+       LDKUnsignedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedInvoiceRequest_free(this_obj_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_requires_onion_messages(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_onion_messages(&this_arg_conv);
-       return ret_conv;
+static inline uint64_t UnsignedInvoiceRequest_clone_ptr(LDKUnsignedInvoiceRequest *NONNULL_PTR arg) {
+       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-jboolean  CS_LDK_NodeFeatures_requires_onion_messages(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_onion_messages(&this_arg_conv);
+int64_t  CS_LDK_UnsignedInvoiceRequest_clone_ptr(int64_t arg) {
+       LDKUnsignedInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedInvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_InitFeatures_set_channel_type_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_channel_type_optional(&this_arg_conv);
+int64_t  CS_LDK_UnsignedInvoiceRequest_clone(int64_t orig) {
+       LDKUnsignedInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_channel_type_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_channel_type_required(&this_arg_conv);
+void  CS_LDK_SignInvoiceRequestFn_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignInvoiceRequestFn this_ptr_conv = *(LDKSignInvoiceRequestFn*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignInvoiceRequestFn_free(this_ptr_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_channel_type(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_tagged_hash(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_channel_type(&this_arg_conv);
-       return ret_conv;
+       LDKTaggedHash ret_var = UnsignedInvoiceRequest_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_channel_type_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_channel_type_optional(&this_arg_conv);
+void  CS_LDK_InvoiceRequest_free(int64_t this_obj) {
+       LDKInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequest_free(this_obj_conv);
 }
 
-void  CS_LDK_NodeFeatures_set_channel_type_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NodeFeatures_set_channel_type_required(&this_arg_conv);
+static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-jboolean  CS_LDK_NodeFeatures_supports_channel_type(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_channel_type(&this_arg_conv);
+int64_t  CS_LDK_InvoiceRequest_clone_ptr(int64_t arg) {
+       LDKInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_channel_type(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_channel_type(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_InvoiceRequest_clone(int64_t orig) {
+       LDKInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_channel_type(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_channel_type(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_VerifiedInvoiceRequest_free(int64_t this_obj) {
+       LDKVerifiedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       VerifiedInvoiceRequest_free(this_obj_conv);
 }
 
-void  CS_LDK_InitFeatures_set_scid_privacy_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_scid_privacy_optional(&this_arg_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_get_offer_id(int64_t this_ptr) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOfferId ret_var = VerifiedInvoiceRequest_get_offer_id(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_scid_privacy_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       InitFeatures_set_scid_privacy_required(&this_arg_conv);
+void  CS_LDK_VerifiedInvoiceRequest_set_offer_id(int64_t this_ptr, int64_t val) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOfferId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OfferId_clone(&val_conv);
+       VerifiedInvoiceRequest_set_offer_id(&this_ptr_conv, val_conv);
 }
 
-jboolean  CS_LDK_InitFeatures_supports_scid_privacy(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_scid_privacy(&this_arg_conv);
+static inline uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg) {
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_VerifiedInvoiceRequest_clone_ptr(int64_t arg) {
+       LDKVerifiedInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = VerifiedInvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeFeatures_set_scid_privacy_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_clone(int64_t orig) {
+       LDKVerifiedInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+ptrArray  CS_LDK_UnsignedInvoiceRequest_chains(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_scid_privacy_optional(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = UnsignedInvoiceRequest_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_scid_privacy_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_metadata(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_scid_privacy_required(&this_arg_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = UnsignedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_scid_privacy(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_amount(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = UnsignedInvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_description(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_scid_privacy_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_offer_features(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_scid_privacy_required(&this_arg_conv);
+       LDKOfferFeatures ret_var = UnsignedInvoiceRequest_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_scid_privacy(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_absolute_expiry(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_scid_privacy(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_issuer(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_scid_privacy(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_tArray  CS_LDK_UnsignedInvoiceRequest_paths(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedMessagePathZ ret_var = UnsignedInvoiceRequest_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_scid_privacy(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_supported_quantity(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_scid_privacy(&this_arg_conv);
-       return ret_conv;
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = UnsignedInvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_signing_pubkey(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_metadata_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_metadata(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_payment_metadata_required(&this_arg_conv);
+       LDKu8slice ret_var = UnsignedInvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_metadata(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_chain(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_metadata(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, UnsignedInvoiceRequest_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_metadata(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_amount_msats(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_metadata(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_zero_conf_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_invoice_request_features(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_zero_conf_optional(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = UnsignedInvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_zero_conf_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_quantity(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_zero_conf_required(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_zero_conf(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_id(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_zero_conf(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, UnsignedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_zero_conf_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_UnsignedInvoiceRequest_payer_note(int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_zero_conf_optional(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_zero_conf_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+ptrArray  CS_LDK_InvoiceRequest_chains(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_zero_conf_required(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = InvoiceRequest_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_zero_conf(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_metadata(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = InvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_zero_conf_optional(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_amount(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_zero_conf_optional(&this_arg_conv);
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = InvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelTypeFeatures_set_zero_conf_required(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_description(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       ChannelTypeFeatures_set_zero_conf_required(&this_arg_conv);
+       LDKPrintableString ret_var = InvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_supports_zero_conf(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_offer_features(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_supports_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKOfferFeatures ret_var = InvoiceRequest_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_zero_conf(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_absolute_expiry(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_zero_conf(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_issuer(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = InvoiceRequest_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelTypeFeatures_requires_zero_conf(int64_t this_arg) {
-       LDKChannelTypeFeatures this_arg_conv;
+int64_tArray  CS_LDK_InvoiceRequest_paths(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelTypeFeatures_requires_zero_conf(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedMessagePathZ ret_var = InvoiceRequest_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_keysend_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_supported_quantity(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_keysend_optional(&this_arg_conv);
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = InvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_keysend_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_signing_pubkey(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_keysend_required(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_keysend(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_payer_metadata(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_keysend(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = InvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_keysend(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_chain(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_keysend(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_InitFeatures_set_trampoline_routing_optional(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_amount_msats(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_trampoline_routing_optional(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InitFeatures_set_trampoline_routing_required(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_invoice_request_features(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       InitFeatures_set_trampoline_routing_required(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_InitFeatures_supports_trampoline_routing(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_quantity(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_supports_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeFeatures_set_trampoline_routing_optional(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int8_tArray  CS_LDK_InvoiceRequest_payer_id(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_trampoline_routing_optional(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_NodeFeatures_set_trampoline_routing_required(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_payer_note(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NodeFeatures_set_trampoline_routing_required(&this_arg_conv);
+       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_NodeFeatures_supports_trampoline_routing(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_supports_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_optional(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_trampoline_routing_optional(&this_arg_conv);
-}
-
-void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_required(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = InvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_InvoiceRequest_verify_using_metadata(int64_t this_arg, int64_t key) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       Bolt11InvoiceFeatures_set_trampoline_routing_required(&this_arg_conv);
+       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = InvoiceRequest_verify_using_metadata(this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_trampoline_routing(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_InvoiceRequest_verify_using_recipient_data(int64_t this_arg, int64_t nonce, int64_t key) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = InvoiceRequest_verify_using_recipient_data(this_arg_conv, nonce_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_InvoiceRequest_signature(int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_supports_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequest_signature(&this_arg_conv).compact_form, 64);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_InitFeatures_requires_trampoline_routing(int64_t this_arg) {
-       LDKInitFeatures this_arg_conv;
+ptrArray  CS_LDK_VerifiedInvoiceRequest_chains(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InitFeatures_requires_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_ThirtyTwoBytesZ ret_var = VerifiedInvoiceRequest_chains(&this_arg_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
+               ret_arr_ptr[i] = ret_conv_8_arr;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_NodeFeatures_requires_trampoline_routing(int64_t this_arg) {
-       LDKNodeFeatures this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_metadata(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeFeatures_requires_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = VerifiedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_trampoline_routing(int64_t this_arg) {
-       LDKBolt11InvoiceFeatures this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_amount(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt11InvoiceFeatures_requires_trampoline_routing(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
+       *ret_copy = VerifiedInvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ShutdownScript_free(int64_t this_obj) {
-       LDKShutdownScript this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ShutdownScript_free(this_obj_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_description(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
-       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
+int64_t  CS_LDK_VerifiedInvoiceRequest_offer_features(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = VerifiedInvoiceRequest_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ShutdownScript_clone_ptr(int64_t arg) {
-       LDKShutdownScript arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ShutdownScript_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_t  CS_LDK_VerifiedInvoiceRequest_absolute_expiry(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_ShutdownScript_clone(int64_t orig) {
-       LDKShutdownScript orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_issuer(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ShutdownScript_eq(int64_t a, int64_t b) {
-       LDKShutdownScript a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKShutdownScript b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ShutdownScript_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_tArray  CS_LDK_VerifiedInvoiceRequest_paths(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedMessagePathZ ret_var = VerifiedInvoiceRequest_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_InvalidShutdownScript_free(int64_t this_obj) {
-       LDKInvalidShutdownScript this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvalidShutdownScript_free(this_obj_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_supported_quantity(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
+       *ret_copy = VerifiedInvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InvalidShutdownScript_get_script(int64_t this_ptr) {
-       LDKInvalidShutdownScript this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_signing_pubkey(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, VerifiedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_metadata(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = VerifiedInvoiceRequest_payer_metadata(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_InvalidShutdownScript_set_script(int64_t this_ptr, int8_tArray val) {
-       LDKInvalidShutdownScript this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z val_ref;
-       val_ref.datalen = val->arr_len;
-       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
-       InvalidShutdownScript_set_script(&this_ptr_conv, val_ref);
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_chain(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, VerifiedInvoiceRequest_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InvalidShutdownScript_new(int8_tArray script_arg) {
-       LDKCVec_u8Z script_arg_ref;
-       script_arg_ref.datalen = script_arg->arr_len;
-       script_arg_ref.data = MALLOC(script_arg_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(script_arg_ref.data, script_arg->elems, script_arg_ref.datalen); FREE(script_arg);
-       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_new(script_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_VerifiedInvoiceRequest_amount_msats(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
-       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
+int64_t  CS_LDK_VerifiedInvoiceRequest_invoice_request_features(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = VerifiedInvoiceRequest_invoice_request_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InvalidShutdownScript_clone_ptr(int64_t arg) {
-       LDKInvalidShutdownScript arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvalidShutdownScript_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_InvalidShutdownScript_clone(int64_t orig) {
-       LDKInvalidShutdownScript orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_VerifiedInvoiceRequest_quantity(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_ShutdownScript_write(int64_t obj) {
-       LDKShutdownScript obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_id(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, VerifiedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ShutdownScript_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
-       *ret_conv = ShutdownScript_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_ShutdownScript_new_p2wpkh(int8_tArray pubkey_hash) {
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       LDKShutdownScript ret_var = ShutdownScript_new_p2wpkh(pubkey_hash_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ShutdownScript_new_p2wsh(int8_tArray script_hash) {
-       uint8_t script_hash_arr[32];
-       CHECK(script_hash->arr_len == 32);
-       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
-       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
-       LDKShutdownScript ret_var = ShutdownScript_new_p2wsh(script_hash_ref);
+int64_t  CS_LDK_VerifiedInvoiceRequest_payer_note(int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_payer_note(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ShutdownScript_new_witness_program(int64_t witness_program) {
-       void* witness_program_ptr = untag_ptr(witness_program);
-       CHECK_ACCESS(witness_program_ptr);
-       LDKWitnessProgram witness_program_conv = *(LDKWitnessProgram*)(witness_program_ptr);
-       witness_program_conv = WitnessProgram_clone((LDKWitnessProgram*)untag_ptr(witness_program));
-       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
-       *ret_conv = ShutdownScript_new_witness_program(witness_program_conv);
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_ShutdownScript_into_inner(int64_t this_arg) {
-       LDKShutdownScript this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = ShutdownScript_clone(&this_arg_conv);
-       LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_ShutdownScript_as_legacy_pubkey(int64_t this_arg) {
-       LDKShutdownScript this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys(&this_arg_conv, payment_paths_constr, payment_hash_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_ShutdownScript_is_compatible(int64_t this_arg, int64_t features) {
-       LDKShutdownScript this_arg_conv;
+int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKInitFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv.is_owned = false;
-       jboolean ret_conv = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
-       return ret_conv;
+       LDKCVec_BlindedPaymentPathZ payment_paths_constr;
+       payment_paths_constr.datalen = payment_paths->arr_len;
+       if (payment_paths_constr.datalen > 0)
+               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               payment_paths_constr.data = NULL;
+       int64_t* payment_paths_vals = payment_paths->elems;
+       for (size_t u = 0; u < payment_paths_constr.datalen; u++) {
+               int64_t payment_paths_conv_20 = payment_paths_vals[u];
+               LDKBlindedPaymentPath payment_paths_conv_20_conv;
+               payment_paths_conv_20_conv.inner = untag_ptr(payment_paths_conv_20);
+               payment_paths_conv_20_conv.is_owned = ptr_is_owned(payment_paths_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_paths_conv_20_conv);
+               payment_paths_conv_20_conv = BlindedPaymentPath_clone(&payment_paths_conv_20_conv);
+               payment_paths_constr.data[u] = payment_paths_conv_20_conv;
+       }
+       FREE(payment_paths);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
+       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
+       return tag_ptr(ret_conv, true);
 }
 
-jstring  CS_LDK_ShutdownScript_to_str(int64_t o) {
-       LDKShutdownScript o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ShutdownScript_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+int8_tArray  CS_LDK_UnsignedInvoiceRequest_write(int64_t obj) {
+       LDKUnsignedInvoiceRequest obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedInvoiceRequest_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelId_free(int64_t this_obj) {
-       LDKChannelId this_obj_conv;
+int8_tArray  CS_LDK_InvoiceRequest_write(int64_t obj) {
+       LDKInvoiceRequest obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+void  CS_LDK_InvoiceRequestFields_free(int64_t this_obj) {
+       LDKInvoiceRequestFields this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelId_free(this_obj_conv);
+       InvoiceRequestFields_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_ChannelId_get_a(int64_t this_ptr) {
-       LDKChannelId this_ptr_conv;
+int8_tArray  CS_LDK_InvoiceRequestFields_get_payer_id(int64_t this_ptr) {
+       LDKInvoiceRequestFields this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *ChannelId_get_a(&this_ptr_conv), 32);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, InvoiceRequestFields_get_payer_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
 }
 
-void  CS_LDK_ChannelId_set_a(int64_t this_ptr, int8_tArray val) {
-       LDKChannelId this_ptr_conv;
+void  CS_LDK_InvoiceRequestFields_set_payer_id(int64_t this_ptr, int8_tArray val) {
+       LDKInvoiceRequestFields this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       ChannelId_set_a(&this_ptr_conv, val_ref);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       InvoiceRequestFields_set_payer_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_ChannelId_new(int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK(a_arg->arr_len == 32);
-       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
-       LDKChannelId ret_var = ChannelId_new(a_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
+int64_t  CS_LDK_InvoiceRequestFields_get_quantity(int64_t this_ptr) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequestFields_get_quantity(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
 
-static inline uint64_t ChannelId_clone_ptr(LDKChannelId *NONNULL_PTR arg) {
-       LDKChannelId ret_var = ChannelId_clone(arg);
+void  CS_LDK_InvoiceRequestFields_set_quantity(int64_t this_ptr, int64_t val) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       InvoiceRequestFields_set_quantity(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_InvoiceRequestFields_get_payer_note_truncated(int64_t this_ptr) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString ret_var = InvoiceRequestFields_get_payer_note_truncated(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelId_clone_ptr(int64_t arg) {
-       LDKChannelId arg_conv;
+
+void  CS_LDK_InvoiceRequestFields_set_payer_note_truncated(int64_t this_ptr, int64_t val) {
+       LDKInvoiceRequestFields this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = UntrustedString_clone(&val_conv);
+       InvoiceRequestFields_set_payer_note_truncated(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_InvoiceRequestFields_new(int8_tArray payer_id_arg, int64_t quantity_arg, int64_t payer_note_truncated_arg) {
+       LDKPublicKey payer_id_arg_ref;
+       CHECK(payer_id_arg->arr_len == 33);
+       memcpy(payer_id_arg_ref.compressed_form, payer_id_arg->elems, 33); FREE(payer_id_arg);
+       void* quantity_arg_ptr = untag_ptr(quantity_arg);
+       CHECK_ACCESS(quantity_arg_ptr);
+       LDKCOption_u64Z quantity_arg_conv = *(LDKCOption_u64Z*)(quantity_arg_ptr);
+       quantity_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(quantity_arg));
+       LDKUntrustedString payer_note_truncated_arg_conv;
+       payer_note_truncated_arg_conv.inner = untag_ptr(payer_note_truncated_arg);
+       payer_note_truncated_arg_conv.is_owned = ptr_is_owned(payer_note_truncated_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payer_note_truncated_arg_conv);
+       payer_note_truncated_arg_conv = UntrustedString_clone(&payer_note_truncated_arg_conv);
+       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_new(payer_id_arg_ref, quantity_arg_conv, payer_note_truncated_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t InvoiceRequestFields_clone_ptr(LDKInvoiceRequestFields *NONNULL_PTR arg) {
+       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_InvoiceRequestFields_clone_ptr(int64_t arg) {
+       LDKInvoiceRequestFields arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelId_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvoiceRequestFields_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelId_clone(int64_t orig) {
-       LDKChannelId orig_conv;
+int64_t  CS_LDK_InvoiceRequestFields_clone(int64_t orig) {
+       LDKInvoiceRequestFields orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelId ret_var = ChannelId_clone(&orig_conv);
+       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelId_eq(int64_t a, int64_t b) {
-       LDKChannelId a_conv;
+jboolean  CS_LDK_InvoiceRequestFields_eq(int64_t a, int64_t b) {
+       LDKInvoiceRequestFields a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKChannelId b_conv;
+       LDKInvoiceRequestFields b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = ChannelId_eq(&a_conv, &b_conv);
+       jboolean ret_conv = InvoiceRequestFields_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelId_hash(int64_t o) {
-       LDKChannelId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = ChannelId_hash(&o_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_InvoiceRequestFields_write(int64_t obj) {
+       LDKInvoiceRequestFields obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceRequestFields_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelId_v1_from_funding_txid(int8_tArray txid, int16_t output_index) {
-       uint8_t txid_arr[32];
-       CHECK(txid->arr_len == 32);
-       memcpy(txid_arr, txid->elems, 32); FREE(txid);
-       uint8_t (*txid_ref)[32] = &txid_arr;
-       LDKChannelId ret_var = ChannelId_v1_from_funding_txid(txid_ref, output_index);
+int64_t  CS_LDK_InvoiceRequestFields_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InvoiceRequestFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestFieldsDecodeErrorZ), "LDKCResult_InvoiceRequestFieldsDecodeErrorZ");
+       *ret_conv = InvoiceRequestFields_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_TaggedHash_free(int64_t this_obj) {
+       LDKTaggedHash this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       TaggedHash_free(this_obj_conv);
+}
+
+static inline uint64_t TaggedHash_clone_ptr(LDKTaggedHash *NONNULL_PTR arg) {
+       LDKTaggedHash ret_var = TaggedHash_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_TaggedHash_clone_ptr(int64_t arg) {
+       LDKTaggedHash arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = TaggedHash_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_ChannelId_v1_from_funding_outpoint(int64_t outpoint) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       LDKChannelId ret_var = ChannelId_v1_from_funding_outpoint(outpoint_conv);
+int64_t  CS_LDK_TaggedHash_clone(int64_t orig) {
+       LDKTaggedHash orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKTaggedHash ret_var = TaggedHash_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelId_temporary_from_entropy_source(int64_t entropy_source) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       LDKChannelId ret_var = ChannelId_temporary_from_entropy_source(entropy_source_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int8_tArray  CS_LDK_TaggedHash_as_digest(int64_t this_arg) {
+       LDKTaggedHash this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *TaggedHash_as_digest(&this_arg_conv), 32);
+       return ret_arr;
+}
+
+jstring  CS_LDK_TaggedHash_tag(int64_t this_arg) {
+       LDKTaggedHash this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKStr ret_str = TaggedHash_tag(&this_arg_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_TaggedHash_merkle_root(int64_t this_arg) {
+       LDKTaggedHash this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, TaggedHash_merkle_root(&this_arg_conv).data, 32);
+       return ret_arr;
+}
+
+void  CS_LDK_SignError_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignError this_ptr_conv = *(LDKSignError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignError_free(this_ptr_conv);
+}
+
+static inline uint64_t SignError_clone_ptr(LDKSignError *NONNULL_PTR arg) {
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_SignError_clone_ptr(int64_t arg) {
+       LDKSignError* arg_conv = (LDKSignError*)untag_ptr(arg);
+       int64_t ret_conv = SignError_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_ChannelId_from_bytes(int8_tArray data) {
-       LDKThirtyTwoBytes data_ref;
-       CHECK(data->arr_len == 32);
-       memcpy(data_ref.data, data->elems, 32); FREE(data);
-       LDKChannelId ret_var = ChannelId_from_bytes(data_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SignError_clone(int64_t orig) {
+       LDKSignError* orig_conv = (LDKSignError*)untag_ptr(orig);
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelId_new_zero() {
-       LDKChannelId ret_var = ChannelId_new_zero();
+int64_t  CS_LDK_SignError_signing() {
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_signing();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SignError_verification(int32_t a) {
+       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
+       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
+       *ret_copy = SignError_verification(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_Nonce_free(int64_t this_obj) {
+       LDKNonce this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Nonce_free(this_obj_conv);
+}
+
+static inline uint64_t Nonce_clone_ptr(LDKNonce *NONNULL_PTR arg) {
+       LDKNonce ret_var = Nonce_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-jboolean  CS_LDK_ChannelId_is_zero(int64_t this_arg) {
-       LDKChannelId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = ChannelId_is_zero(&this_arg_conv);
+int64_t  CS_LDK_Nonce_clone_ptr(int64_t arg) {
+       LDKNonce arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Nonce_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelId_v2_from_revocation_basepoints(int64_t ours, int64_t theirs) {
-       LDKRevocationBasepoint ours_conv;
-       ours_conv.inner = untag_ptr(ours);
-       ours_conv.is_owned = ptr_is_owned(ours);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ours_conv);
-       ours_conv.is_owned = false;
-       LDKRevocationBasepoint theirs_conv;
-       theirs_conv.inner = untag_ptr(theirs);
-       theirs_conv.is_owned = ptr_is_owned(theirs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(theirs_conv);
-       theirs_conv.is_owned = false;
-       LDKChannelId ret_var = ChannelId_v2_from_revocation_basepoints(&ours_conv, &theirs_conv);
+int64_t  CS_LDK_Nonce_clone(int64_t orig) {
+       LDKNonce orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKNonce ret_var = Nonce_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ChannelId_temporary_v2_from_revocation_basepoint(int64_t our_revocation_basepoint) {
-       LDKRevocationBasepoint our_revocation_basepoint_conv;
-       our_revocation_basepoint_conv.inner = untag_ptr(our_revocation_basepoint);
-       our_revocation_basepoint_conv.is_owned = ptr_is_owned(our_revocation_basepoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(our_revocation_basepoint_conv);
-       our_revocation_basepoint_conv.is_owned = false;
-       LDKChannelId ret_var = ChannelId_temporary_v2_from_revocation_basepoint(&our_revocation_basepoint_conv);
+jboolean  CS_LDK_Nonce_eq(int64_t a, int64_t b) {
+       LDKNonce a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNonce b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Nonce_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Nonce_from_entropy_source(int64_t entropy_source) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKNonce ret_var = Nonce_from_entropy_source(entropy_source_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_ChannelId_write(int64_t obj) {
-       LDKChannelId obj_conv;
+int8_tArray  CS_LDK_Nonce_as_slice(int64_t this_arg) {
+       LDKNonce this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Nonce_as_slice(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_Nonce_write(int64_t obj) {
+       LDKNonce obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelId_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Nonce_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelId_read(int8_tArray ser) {
+int64_t  CS_LDK_Nonce_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_ChannelIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelIdDecodeErrorZ), "LDKCResult_ChannelIdDecodeErrorZ");
-       *ret_conv = ChannelId_read(ser_ref);
+       LDKCResult_NonceDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonceDecodeErrorZ), "LDKCResult_NonceDecodeErrorZ");
+       *ret_conv = Nonce_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-jstring  CS_LDK_ChannelId_to_str(int64_t o) {
-       LDKChannelId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ChannelId_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+void  CS_LDK_Bolt12ParseError_free(int64_t this_obj) {
+       LDKBolt12ParseError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12ParseError_free(this_obj_conv);
 }
 
-void  CS_LDK_Retry_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKRetry this_ptr_conv = *(LDKRetry*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Retry_free(this_ptr_conv);
+static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Bolt12ParseError_clone_ptr(int64_t arg) {
+       LDKBolt12ParseError arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Retry_clone_ptr(LDKRetry *NONNULL_PTR arg) {
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_Bolt12ParseError_clone(int64_t orig) {
+       LDKBolt12ParseError orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Retry_clone_ptr(int64_t arg) {
-       LDKRetry* arg_conv = (LDKRetry*)untag_ptr(arg);
-       int64_t ret_conv = Retry_clone_ptr(arg_conv);
+
+int32_t  CS_LDK_Bolt12SemanticError_clone(int64_t orig) {
+       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_clone(orig_conv));
        return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_clone(int64_t orig) {
-       LDKRetry* orig_conv = (LDKRetry*)untag_ptr(orig);
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_already_expired() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_already_expired());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_attempts(int32_t a) {
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_attempts(a);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unsupported_chain() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_chain());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_timeout(int64_t a) {
-       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
-       *ret_copy = Retry_timeout(a);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_chain() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_chain());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_Retry_eq(int64_t a, int64_t b) {
-       LDKRetry* a_conv = (LDKRetry*)untag_ptr(a);
-       LDKRetry* b_conv = (LDKRetry*)untag_ptr(b);
-       jboolean ret_conv = Retry_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_amount());
        return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_hash(int64_t o) {
-       LDKRetry* o_conv = (LDKRetry*)untag_ptr(o);
-       int64_t ret_conv = Retry_hash(o_conv);
+int32_t  CS_LDK_Bolt12SemanticError_invalid_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_amount());
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Retry_write(int64_t obj) {
-       LDKRetry* obj_conv = (LDKRetry*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = Retry_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int32_t  CS_LDK_Bolt12SemanticError_insufficient_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_insufficient_amount());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Retry_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
-       *ret_conv = Retry_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_amount() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_amount());
+       return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_clone(int64_t orig) {
-       LDKRetryableSendFailure* orig_conv = (LDKRetryableSendFailure*)untag_ptr(orig);
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_clone(orig_conv));
+int32_t  CS_LDK_Bolt12SemanticError_unsupported_currency() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_currency());
        return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_payment_expired() {
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_payment_expired());
+int32_t  CS_LDK_Bolt12SemanticError_unknown_required_features() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unknown_required_features());
        return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_route_not_found() {
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_route_not_found());
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_features() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_features());
        return ret_conv;
 }
 
-int32_t  CS_LDK_RetryableSendFailure_duplicate_payment() {
-       int32_t ret_conv = LDKRetryableSendFailure_to_cs(RetryableSendFailure_duplicate_payment());
+int32_t  CS_LDK_Bolt12SemanticError_missing_description() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_description());
        return ret_conv;
 }
 
-jboolean  CS_LDK_RetryableSendFailure_eq(int64_t a, int64_t b) {
-       LDKRetryableSendFailure* a_conv = (LDKRetryableSendFailure*)untag_ptr(a);
-       LDKRetryableSendFailure* b_conv = (LDKRetryableSendFailure*)untag_ptr(b);
-       jboolean ret_conv = RetryableSendFailure_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_signing_pubkey() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signing_pubkey());
        return ret_conv;
 }
 
-void  CS_LDK_PaymentSendFailure_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPaymentSendFailure this_ptr_conv = *(LDKPaymentSendFailure*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PaymentSendFailure_free(this_ptr_conv);
+int32_t  CS_LDK_Bolt12SemanticError_invalid_signing_pubkey() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_signing_pubkey());
+       return ret_conv;
 }
 
-static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_signing_pubkey() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_signing_pubkey());
+       return ret_conv;
 }
-int64_t  CS_LDK_PaymentSendFailure_clone_ptr(int64_t arg) {
-       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)untag_ptr(arg);
-       int64_t ret_conv = PaymentSendFailure_clone_ptr(arg_conv);
+
+int32_t  CS_LDK_Bolt12SemanticError_missing_quantity() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_quantity());
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_clone(int64_t orig) {
-       LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)untag_ptr(orig);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_invalid_quantity() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_quantity());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_parameter_error(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKAPIError a_conv = *(LDKAPIError*)(a_ptr);
-       a_conv = APIError_clone((LDKAPIError*)untag_ptr(a));
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_parameter_error(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_quantity() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_quantity());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_path_parameter_error(int64_tArray a) {
-       LDKCVec_CResult_NoneAPIErrorZZ a_constr;
-       a_constr.datalen = a->arr_len;
-       if (a_constr.datalen > 0)
-               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
-       else
-               a_constr.data = NULL;
-       int64_t* a_vals = a->elems;
-       for (size_t w = 0; w < a_constr.datalen; w++) {
-               int64_t a_conv_22 = a_vals[w];
-               void* a_conv_22_ptr = untag_ptr(a_conv_22);
-               CHECK_ACCESS(a_conv_22_ptr);
-               LDKCResult_NoneAPIErrorZ a_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(a_conv_22_ptr);
-               a_conv_22_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)untag_ptr(a_conv_22));
-               a_constr.data[w] = a_conv_22_conv;
-       }
-       FREE(a);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_path_parameter_error(a_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_invalid_metadata() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_metadata());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_all_failed_resend_safe(int64_tArray a) {
-       LDKCVec_APIErrorZ a_constr;
-       a_constr.datalen = a->arr_len;
-       if (a_constr.datalen > 0)
-               a_constr.data = MALLOC(a_constr.datalen * sizeof(LDKAPIError), "LDKCVec_APIErrorZ Elements");
-       else
-               a_constr.data = NULL;
-       int64_t* a_vals = a->elems;
-       for (size_t k = 0; k < a_constr.datalen; k++) {
-               int64_t a_conv_10 = a_vals[k];
-               void* a_conv_10_ptr = untag_ptr(a_conv_10);
-               CHECK_ACCESS(a_conv_10_ptr);
-               LDKAPIError a_conv_10_conv = *(LDKAPIError*)(a_conv_10_ptr);
-               a_conv_10_conv = APIError_clone((LDKAPIError*)untag_ptr(a_conv_10));
-               a_constr.data[k] = a_conv_10_conv;
-       }
-       FREE(a);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_all_failed_resend_safe(a_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_metadata() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_metadata());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_duplicate_payment() {
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_duplicate_payment();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_payer_metadata() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_metadata());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentSendFailure_partial_failure(int64_tArray results, int64_t failed_paths_retry, int8_tArray payment_id) {
-       LDKCVec_CResult_NoneAPIErrorZZ results_constr;
-       results_constr.datalen = results->arr_len;
-       if (results_constr.datalen > 0)
-               results_constr.data = MALLOC(results_constr.datalen * sizeof(LDKCResult_NoneAPIErrorZ), "LDKCVec_CResult_NoneAPIErrorZZ Elements");
-       else
-               results_constr.data = NULL;
-       int64_t* results_vals = results->elems;
-       for (size_t w = 0; w < results_constr.datalen; w++) {
-               int64_t results_conv_22 = results_vals[w];
-               void* results_conv_22_ptr = untag_ptr(results_conv_22);
-               CHECK_ACCESS(results_conv_22_ptr);
-               LDKCResult_NoneAPIErrorZ results_conv_22_conv = *(LDKCResult_NoneAPIErrorZ*)(results_conv_22_ptr);
-               results_constr.data[w] = results_conv_22_conv;
-       }
-       FREE(results);
-       LDKRouteParameters failed_paths_retry_conv;
-       failed_paths_retry_conv.inner = untag_ptr(failed_paths_retry);
-       failed_paths_retry_conv.is_owned = ptr_is_owned(failed_paths_retry);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
-       failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = PaymentSendFailure_partial_failure(results_constr, failed_paths_retry_conv, payment_id_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_payer_id() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_id());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_PaymentSendFailure_eq(int64_t a, int64_t b) {
-       LDKPaymentSendFailure* a_conv = (LDKPaymentSendFailure*)untag_ptr(a);
-       LDKPaymentSendFailure* b_conv = (LDKPaymentSendFailure*)untag_ptr(b);
-       jboolean ret_conv = PaymentSendFailure_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_duplicate_payment_id() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_duplicate_payment_id());
        return ret_conv;
 }
 
-void  CS_LDK_ProbeSendFailure_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKProbeSendFailure this_ptr_conv = *(LDKProbeSendFailure*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ProbeSendFailure_free(this_ptr_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_paths() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_paths());
+       return ret_conv;
 }
 
-static inline uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg) {
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_paths() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_paths());
+       return ret_conv;
 }
-int64_t  CS_LDK_ProbeSendFailure_clone_ptr(int64_t arg) {
-       LDKProbeSendFailure* arg_conv = (LDKProbeSendFailure*)untag_ptr(arg);
-       int64_t ret_conv = ProbeSendFailure_clone_ptr(arg_conv);
+
+int32_t  CS_LDK_Bolt12SemanticError_invalid_pay_info() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_pay_info());
        return ret_conv;
 }
 
-int64_t  CS_LDK_ProbeSendFailure_clone(int64_t orig) {
-       LDKProbeSendFailure* orig_conv = (LDKProbeSendFailure*)untag_ptr(orig);
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_creation_time() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_creation_time());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ProbeSendFailure_route_not_found() {
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_route_not_found();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_missing_payment_hash() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payment_hash());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ProbeSendFailure_sending_failed(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKPaymentSendFailure a_conv = *(LDKPaymentSendFailure*)(a_ptr);
-       a_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(a));
-       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
-       *ret_copy = ProbeSendFailure_sending_failed(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int32_t  CS_LDK_Bolt12SemanticError_unexpected_payment_hash() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_payment_hash());
+       return ret_conv;
 }
 
-jboolean  CS_LDK_ProbeSendFailure_eq(int64_t a, int64_t b) {
-       LDKProbeSendFailure* a_conv = (LDKProbeSendFailure*)untag_ptr(a);
-       LDKProbeSendFailure* b_conv = (LDKProbeSendFailure*)untag_ptr(b);
-       jboolean ret_conv = ProbeSendFailure_eq(a_conv, b_conv);
+int32_t  CS_LDK_Bolt12SemanticError_missing_signature() {
+       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signature());
        return ret_conv;
 }
 
-void  CS_LDK_RecipientOnionFields_free(int64_t this_obj) {
-       LDKRecipientOnionFields this_obj_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_free(int64_t this_obj) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RecipientOnionFields_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_RecipientOnionFields_get_payment_secret(int64_t this_ptr) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
-       *ret_copy = RecipientOnionFields_get_payment_secret(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_RecipientOnionFields_set_payment_secret(int64_t this_ptr, int64_t val) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
-       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
-       RecipientOnionFields_set_payment_secret(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_RecipientOnionFields_get_payment_metadata(int64_t this_ptr) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = RecipientOnionFields_get_payment_metadata(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_RecipientOnionFields_set_payment_metadata(int64_t this_ptr, int64_t val) {
-       LDKRecipientOnionFields this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
-       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
-       RecipientOnionFields_set_payment_metadata(&this_ptr_conv, val_conv);
+       RefundMaybeWithDerivedMetadataBuilder_free(this_obj_conv);
 }
 
-static inline uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg) {
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(arg);
+static inline uint64_t RefundMaybeWithDerivedMetadataBuilder_clone_ptr(LDKRefundMaybeWithDerivedMetadataBuilder *NONNULL_PTR arg) {
+       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RecipientOnionFields_clone_ptr(int64_t arg) {
-       LDKRecipientOnionFields arg_conv;
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
+       LDKRefundMaybeWithDerivedMetadataBuilder arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RecipientOnionFields_clone_ptr(&arg_conv);
+       int64_t ret_conv = RefundMaybeWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RecipientOnionFields_clone(int64_t orig) {
-       LDKRecipientOnionFields orig_conv;
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone(int64_t orig) {
+       LDKRefundMaybeWithDerivedMetadataBuilder orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(&orig_conv);
+       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_RecipientOnionFields_eq(int64_t a, int64_t b) {
-       LDKRecipientOnionFields a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRecipientOnionFields b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RecipientOnionFields_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_RecipientOnionFields_write(int64_t obj) {
-       LDKRecipientOnionFields obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RecipientOnionFields_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_new(int8_tArray metadata, int8_tArray payer_id, int64_t amount_msats) {
+       LDKCVec_u8Z metadata_ref;
+       metadata_ref.datalen = metadata->arr_len;
+       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
+       LDKPublicKey payer_id_ref;
+       CHECK(payer_id->arr_len == 33);
+       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
+       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
+       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_new(metadata_ref, payer_id_ref, amount_msats);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RecipientOnionFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsDecodeErrorZ), "LDKCResult_RecipientOnionFieldsDecodeErrorZ");
-       *ret_conv = RecipientOnionFields_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(int8_tArray node_id, int64_t expanded_key, int64_t nonce, int64_t amount_msats, int8_tArray payment_id) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKExpandedKey expanded_key_conv;
+       expanded_key_conv.inner = untag_ptr(expanded_key);
+       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
+       expanded_key_conv.is_owned = false;
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
+       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(node_id_ref, &expanded_key_conv, nonce_conv, amount_msats, payment_id_ref);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_secret_only(int8_tArray payment_secret) {
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_secret_only(payment_secret_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr description_conv = str_ref_to_owned_c(description);
+       RefundMaybeWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_spontaneous_empty() {
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_spontaneous_empty();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
 }
 
-int64_t  CS_LDK_RecipientOnionFields_with_custom_tlvs(int64_t this_arg, int64_tArray custom_tlvs) {
-       LDKRecipientOnionFields this_arg_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RecipientOnionFields_clone(&this_arg_conv);
-       LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs_constr;
-       custom_tlvs_constr.datalen = custom_tlvs->arr_len;
-       if (custom_tlvs_constr.datalen > 0)
-               custom_tlvs_constr.data = MALLOC(custom_tlvs_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
-       else
-               custom_tlvs_constr.data = NULL;
-       int64_t* custom_tlvs_vals = custom_tlvs->elems;
-       for (size_t x = 0; x < custom_tlvs_constr.datalen; x++) {
-               int64_t custom_tlvs_conv_23 = custom_tlvs_vals[x];
-               void* custom_tlvs_conv_23_ptr = untag_ptr(custom_tlvs_conv_23);
-               CHECK_ACCESS(custom_tlvs_conv_23_ptr);
-               LDKC2Tuple_u64CVec_u8ZZ custom_tlvs_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(custom_tlvs_conv_23_ptr);
-               custom_tlvs_conv_23_conv = C2Tuple_u64CVec_u8ZZ_clone((LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(custom_tlvs_conv_23));
-               custom_tlvs_constr.data[x] = custom_tlvs_conv_23_conv;
-       }
-       FREE(custom_tlvs);
-       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
-       *ret_conv = RecipientOnionFields_with_custom_tlvs(this_arg_conv, custom_tlvs_constr);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
+       RefundMaybeWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
 }
 
-int64_tArray  CS_LDK_RecipientOnionFields_custom_tlvs(int64_t this_arg) {
-       LDKRecipientOnionFields this_arg_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret_var = RecipientOnionFields_custom_tlvs(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t x = 0; x < ret_var.datalen; x++) {
-               LDKC2Tuple_u64CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
-               *ret_conv_23_conv = ret_var.data[x];
-               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKBlindedMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = BlindedMessagePath_clone(&path_conv);
+       RefundMaybeWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
 }
 
-void  CS_LDK_CustomMessageReader_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomMessageReader this_ptr_conv = *(LDKCustomMessageReader*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomMessageReader_free(this_ptr_conv);
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       RefundMaybeWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
 }
 
-static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
-       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
-       *ret_ret = Type_clone(arg);
-       return tag_ptr(ret_ret, true);
-}
-int64_t  CS_LDK_Type_clone_ptr(int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKType* arg_conv = (LDKType*)arg_ptr;
-       int64_t ret_conv = Type_clone_ptr(arg_conv);
-       return ret_conv;
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_quantity(int64_t this_arg, int64_t quantity) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       RefundMaybeWithDerivedMetadataBuilder_quantity(this_arg_conv, quantity);
 }
 
-int64_t  CS_LDK_Type_clone(int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKType* orig_conv = (LDKType*)orig_ptr;
-       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
-       *ret_ret = Type_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_payer_note(int64_t this_arg, jstring payer_note) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
+       RefundMaybeWithDerivedMetadataBuilder_payer_note(this_arg_conv, payer_note_conv);
 }
 
-void  CS_LDK_Type_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKType this_ptr_conv = *(LDKType*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Type_free(this_ptr_conv);
+int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_build(int64_t this_arg) {
+       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
+       LDKCResult_RefundBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12SemanticErrorZ), "LDKCResult_RefundBolt12SemanticErrorZ");
+       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_build(this_arg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_OfferId_free(int64_t this_obj) {
-       LDKOfferId this_obj_conv;
+void  CS_LDK_Refund_free(int64_t this_obj) {
+       LDKRefund this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferId_free(this_obj_conv);
-}
-
-int8_tArray  CS_LDK_OfferId_get_a(int64_t this_ptr) {
-       LDKOfferId this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *OfferId_get_a(&this_ptr_conv), 32);
-       return ret_arr;
-}
-
-void  CS_LDK_OfferId_set_a(int64_t this_ptr, int8_tArray val) {
-       LDKOfferId this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       OfferId_set_a(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_OfferId_new(int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK(a_arg->arr_len == 32);
-       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
-       LDKOfferId ret_var = OfferId_new(a_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       Refund_free(this_obj_conv);
 }
 
-static inline uint64_t OfferId_clone_ptr(LDKOfferId *NONNULL_PTR arg) {
-       LDKOfferId ret_var = OfferId_clone(arg);
+static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
+       LDKRefund ret_var = Refund_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_OfferId_clone_ptr(int64_t arg) {
-       LDKOfferId arg_conv;
+int64_t  CS_LDK_Refund_clone_ptr(int64_t arg) {
+       LDKRefund arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = OfferId_clone_ptr(&arg_conv);
+       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferId_clone(int64_t orig) {
-       LDKOfferId orig_conv;
+int64_t  CS_LDK_Refund_clone(int64_t orig) {
+       LDKRefund orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOfferId ret_var = OfferId_clone(&orig_conv);
+       LDKRefund ret_var = Refund_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_OfferId_eq(int64_t a, int64_t b) {
-       LDKOfferId a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKOfferId b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = OfferId_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_OfferId_write(int64_t obj) {
-       LDKOfferId obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = OfferId_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_Refund_description(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferId_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_OfferIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferIdDecodeErrorZ), "LDKCResult_OfferIdDecodeErrorZ");
-       *ret_conv = OfferId_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_OfferWithExplicitMetadataBuilder_free(int64_t this_obj) {
-       LDKOfferWithExplicitMetadataBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferWithExplicitMetadataBuilder_free(this_obj_conv);
-}
-
-static inline uint64_t OfferWithExplicitMetadataBuilder_clone_ptr(LDKOfferWithExplicitMetadataBuilder *NONNULL_PTR arg) {
-       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone_ptr(int64_t arg) {
-       LDKOfferWithExplicitMetadataBuilder arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OfferWithExplicitMetadataBuilder_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_clone(int64_t orig) {
-       LDKOfferWithExplicitMetadataBuilder orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Refund_absolute_expiry(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_free(int64_t this_obj) {
-       LDKOfferWithDerivedMetadataBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OfferWithDerivedMetadataBuilder_free(this_obj_conv);
-}
-
-static inline uint64_t OfferWithDerivedMetadataBuilder_clone_ptr(LDKOfferWithDerivedMetadataBuilder *NONNULL_PTR arg) {
-       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
-       LDKOfferWithDerivedMetadataBuilder arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OfferWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
+jboolean  CS_LDK_Refund_is_expired(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_clone(int64_t orig) {
-       LDKOfferWithDerivedMetadataBuilder orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_Refund_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Refund_is_expired_no_std(&this_arg_conv, duration_since_epoch);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_new(int8_tArray signing_pubkey) {
-       LDKPublicKey signing_pubkey_ref;
-       CHECK(signing_pubkey->arr_len == 33);
-       memcpy(signing_pubkey_ref.compressed_form, signing_pubkey->elems, 33); FREE(signing_pubkey);
-       LDKOfferWithExplicitMetadataBuilder ret_var = OfferWithExplicitMetadataBuilder_new(signing_pubkey_ref);
+int64_t  CS_LDK_Refund_issuer(int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_metadata(int64_t this_arg, int8_tArray metadata) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_tArray  CS_LDK_Refund_paths(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKCVec_u8Z metadata_ref;
-       metadata_ref.datalen = metadata->arr_len;
-       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = OfferWithExplicitMetadataBuilder_metadata(this_arg_conv, metadata_ref);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedMessagePathZ ret_var = Refund_paths(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t u = 0; u < ret_var.datalen; u++) {
+               LDKBlindedMessagePath ret_conv_20_var = ret_var.data[u];
+               int64_t ret_conv_20_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_20_var);
+               ret_conv_20_ref = tag_ptr(ret_conv_20_var.inner, ret_conv_20_var.is_owned);
+               ret_arr_ptr[u] = ret_conv_20_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int8_tArray  CS_LDK_Refund_payer_metadata(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       OfferWithExplicitMetadataBuilder_chain(this_arg_conv, network_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Refund_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int8_tArray  CS_LDK_Refund_chain(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       OfferWithExplicitMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, Refund_chain(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_amount_msats(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       OfferWithExplicitMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_description(int64_t this_arg, jstring description) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_features(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       OfferWithExplicitMetadataBuilder_description(this_arg_conv, description_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_quantity(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
-       OfferWithExplicitMetadataBuilder_issuer(this_arg_conv, issuer_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_path(int64_t this_arg, int64_t path) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int8_tArray  CS_LDK_Refund_payer_id(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKBlindedPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = BlindedPath_clone(&path_conv);
-       OfferWithExplicitMetadataBuilder_path(this_arg_conv, path_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Refund_payer_id(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithExplicitMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_Refund_payer_note(int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       void* quantity_ptr = untag_ptr(quantity);
-       CHECK_ACCESS(quantity_ptr);
-       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
-       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
-       OfferWithExplicitMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OfferWithExplicitMetadataBuilder_build(int64_t this_arg) {
-       LDKOfferWithExplicitMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithExplicitMetadataBuilder_clone(&this_arg_conv);
-       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
-       *ret_conv = OfferWithExplicitMetadataBuilder_build(this_arg_conv);
+int64_t  CS_LDK_Refund_hash(int64_t o) {
+       LDKRefund o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Refund_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Refund_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RefundDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundDecodeErrorZ), "LDKCResult_RefundDecodeErrorZ");
+       *ret_conv = Refund_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(int8_tArray node_id, int64_t expanded_key, int64_t entropy_source) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKOfferWithDerivedMetadataBuilder ret_var = OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(node_id_ref, &expanded_key_conv, entropy_source_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_Refund_write(int64_t obj) {
+       LDKRefund obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Refund_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       OfferWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
+int64_t  CS_LDK_Refund_from_str(jstring s) {
+       LDKStr s_conv = str_ref_to_owned_c(s);
+       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
+       *ret_conv = Refund_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       OfferWithDerivedMetadataBuilder_amount_msats(this_arg_conv, amount_msats);
+jstring  CS_LDK_Refund_to_str(int64_t o) {
+       LDKRefund o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = Refund_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       OfferWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
+int32_t  CS_LDK_UtxoLookupError_clone(int64_t orig) {
+       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
+       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_clone(orig_conv));
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       OfferWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
+int32_t  CS_LDK_UtxoLookupError_unknown_chain() {
+       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_chain());
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
-       OfferWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
+int32_t  CS_LDK_UtxoLookupError_unknown_tx() {
+       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_tx());
+       return ret_conv;
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKBlindedPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = BlindedPath_clone(&path_conv);
-       OfferWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
+void  CS_LDK_UtxoResult_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoResult_free(this_ptr_conv);
 }
 
-void  CS_LDK_OfferWithDerivedMetadataBuilder_supported_quantity(int64_t this_arg, int64_t quantity) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       void* quantity_ptr = untag_ptr(quantity);
-       CHECK_ACCESS(quantity_ptr);
-       LDKQuantity quantity_conv = *(LDKQuantity*)(quantity_ptr);
-       quantity_conv = Quantity_clone((LDKQuantity*)untag_ptr(quantity));
-       OfferWithDerivedMetadataBuilder_supported_quantity(this_arg_conv, quantity_conv);
+static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_UtxoResult_clone_ptr(int64_t arg) {
+       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
+       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_OfferWithDerivedMetadataBuilder_build(int64_t this_arg) {
-       LDKOfferWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = OfferWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKCResult_OfferBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12SemanticErrorZ), "LDKCResult_OfferBolt12SemanticErrorZ");
-       *ret_conv = OfferWithDerivedMetadataBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_UtxoResult_clone(int64_t orig) {
+       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Offer_free(int64_t this_obj) {
-       LDKOffer this_obj_conv;
+int64_t  CS_LDK_UtxoResult_sync(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
+       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_sync(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_UtxoResult_async(int64_t a) {
+       LDKUtxoFuture a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = UtxoFuture_clone(&a_conv);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_async(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_UtxoLookup_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoLookup_free(this_ptr_conv);
+}
+
+void  CS_LDK_UtxoFuture_free(int64_t this_obj) {
+       LDKUtxoFuture this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Offer_free(this_obj_conv);
+       UtxoFuture_free(this_obj_conv);
 }
 
-static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
-       LDKOffer ret_var = Offer_clone(arg);
+static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
+       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Offer_clone_ptr(int64_t arg) {
-       LDKOffer arg_conv;
+int64_t  CS_LDK_UtxoFuture_clone_ptr(int64_t arg) {
+       LDKUtxoFuture arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
+       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_clone(int64_t orig) {
-       LDKOffer orig_conv;
+int64_t  CS_LDK_UtxoFuture_clone(int64_t orig) {
+       LDKUtxoFuture orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOffer ret_var = Offer_clone(&orig_conv);
+       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-ptrArray  CS_LDK_Offer_chains(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = Offer_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+int64_t  CS_LDK_UtxoFuture_new() {
+       LDKUtxoFuture ret_var = UtxoFuture_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Offer_metadata(int64_t this_arg) {
-       LDKOffer this_arg_conv;
+void  CS_LDK_UtxoFuture_resolve_without_forwarding(int64_t this_arg, int64_t graph, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = Offer_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       result_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(result));
+       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
 }
 
-int64_t  CS_LDK_Offer_amount(int64_t this_arg) {
-       LDKOffer this_arg_conv;
+void  CS_LDK_UtxoFuture_resolve(int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = Offer_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       LDKP2PGossipSync gossip_conv;
+       gossip_conv.inner = untag_ptr(gossip);
+       gossip_conv.is_owned = ptr_is_owned(gossip);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
+       gossip_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       result_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(result));
+       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
 }
 
-int64_t  CS_LDK_Offer_description(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_NodeId_free(int64_t this_obj) {
+       LDKNodeId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeId_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Offer_offer_features(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = Offer_offer_features(&this_arg_conv);
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-int64_t  CS_LDK_Offer_absolute_expiry(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeId_clone_ptr(int64_t arg) {
+       LDKNodeId arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_issuer(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+int64_t  CS_LDK_NodeId_clone(int64_t orig) {
+       LDKNodeId orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKNodeId ret_var = NodeId_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_Offer_paths(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Offer_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_Offer_supported_quantity(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Offer_supported_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_Offer_signing_pubkey(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Offer_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+jboolean  CS_LDK_NodeId_eq(int64_t a, int64_t b) {
+       LDKNodeId a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeId b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeId_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_id(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferId ret_var = Offer_id(&this_arg_conv);
+int64_t  CS_LDK_NodeId_from_pubkey(int8_tArray pubkey) {
+       LDKPublicKey pubkey_ref;
+       CHECK(pubkey->arr_len == 33);
+       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
+       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Offer_supports_chain(int64_t this_arg, int8_tArray chain) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKThirtyTwoBytes chain_ref;
-       CHECK(chain->arr_len == 32);
-       memcpy(chain_ref.data, chain->elems, 32); FREE(chain);
-       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Offer_is_expired(int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Offer_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_expired_no_std(&this_arg_conv, duration_since_epoch);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Offer_is_valid_quantity(int64_t this_arg, int64_t quantity) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
-       return ret_conv;
+int64_t  CS_LDK_NodeId_from_slice(int8_tArray bytes) {
+       LDKu8slice bytes_ref;
+       bytes_ref.datalen = bytes->arr_len;
+       bytes_ref.data = bytes->elems;
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = NodeId_from_slice(bytes_ref);
+       FREE(bytes);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_Offer_expects_quantity(int64_t this_arg) {
-       LDKOffer this_arg_conv;
+int8_tArray  CS_LDK_NodeId_as_slice(int64_t this_arg) {
+       LDKNodeId this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
-       return ret_conv;
+       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Offer_request_invoice_deriving_payer_id(int64_t this_arg, int64_t expanded_key, int64_t entropy_source, int8_tArray payment_id) {
-       LDKOffer this_arg_conv;
+int8_tArray  CS_LDK_NodeId_as_array(int64_t this_arg) {
+       LDKNodeId this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ");
-       *ret_conv = Offer_request_invoice_deriving_payer_id(&this_arg_conv, &expanded_key_conv, entropy_source_conv, payment_id_ref);
-       return tag_ptr(ret_conv, true);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, *NodeId_as_array(&this_arg_conv), 33);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Offer_request_invoice_deriving_metadata(int64_t this_arg, int8_tArray payer_id, int64_t expanded_key, int64_t entropy_source, int8_tArray payment_id) {
-       LDKOffer this_arg_conv;
+int64_t  CS_LDK_NodeId_as_pubkey(int64_t this_arg) {
+       LDKNodeId this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPublicKey payer_id_ref;
-       CHECK(payer_id->arr_len == 33);
-       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
-       *ret_conv = Offer_request_invoice_deriving_metadata(&this_arg_conv, payer_id_ref, &expanded_key_conv, entropy_source_conv, payment_id_ref);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Offer_request_invoice(int64_t this_arg, int8_tArray metadata, int8_tArray payer_id) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_u8Z metadata_ref;
-       metadata_ref.datalen = metadata->arr_len;
-       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
-       LDKPublicKey payer_id_ref;
-       CHECK(payer_id->arr_len == 33);
-       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
-       LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ");
-       *ret_conv = Offer_request_invoice(&this_arg_conv, metadata_ref, payer_id_ref);
-       return tag_ptr(ret_conv, true);
+jstring  CS_LDK_NodeId_to_str(int64_t o) {
+       LDKNodeId o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NodeId_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_hash(int64_t o) {
-       LDKOffer o_conv;
+int64_t  CS_LDK_NodeId_hash(int64_t o) {
+       LDKNodeId o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Offer_hash(&o_conv);
+       int64_t ret_conv = NodeId_hash(&o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Offer_write(int64_t obj) {
-       LDKOffer obj_conv;
+int8_tArray  CS_LDK_NodeId_write(int64_t obj) {
+       LDKNodeId obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Offer_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_Amount_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKAmount this_ptr_conv = *(LDKAmount*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Amount_free(this_ptr_conv);
-}
-
-static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_Amount_clone_ptr(int64_t arg) {
-       LDKAmount* arg_conv = (LDKAmount*)untag_ptr(arg);
-       int64_t ret_conv = Amount_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Amount_clone(int64_t orig) {
-       LDKAmount* orig_conv = (LDKAmount*)untag_ptr(orig);
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeId_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = NodeId_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Amount_bitcoin(int64_t amount_msats) {
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_bitcoin(amount_msats);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NetworkGraph_free(int64_t this_obj) {
+       LDKNetworkGraph this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NetworkGraph_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Amount_currency(int8_tArray iso4217_code, int64_t amount) {
-       LDKThreeBytes iso4217_code_ref;
-       CHECK(iso4217_code->arr_len == 3);
-       memcpy(iso4217_code_ref.data, iso4217_code->elems, 3); FREE(iso4217_code);
-       LDKAmount *ret_copy = MALLOC(sizeof(LDKAmount), "LDKAmount");
-       *ret_copy = Amount_currency(iso4217_code_ref, amount);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ReadOnlyNetworkGraph_free(int64_t this_obj) {
+       LDKReadOnlyNetworkGraph this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
-void  CS_LDK_Quantity_free(int64_t this_ptr) {
+void  CS_LDK_NetworkUpdate_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKQuantity this_ptr_conv = *(LDKQuantity*)(this_ptr_ptr);
+       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       Quantity_free(this_ptr_conv);
+       NetworkUpdate_free(this_ptr_conv);
 }
 
-static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_clone(arg);
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_Quantity_clone_ptr(int64_t arg) {
-       LDKQuantity* arg_conv = (LDKQuantity*)untag_ptr(arg);
-       int64_t ret_conv = Quantity_clone_ptr(arg_conv);
+int64_t  CS_LDK_NetworkUpdate_clone_ptr(int64_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
+       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Quantity_clone(int64_t orig) {
-       LDKQuantity* orig_conv = (LDKQuantity*)untag_ptr(orig);
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_clone(orig_conv);
+int64_t  CS_LDK_NetworkUpdate_clone(int64_t orig) {
+       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Quantity_bounded(int64_t a) {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_bounded(a);
+int64_t  CS_LDK_NetworkUpdate_channel_failure(int64_t short_channel_id, jboolean is_permanent) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Quantity_unbounded() {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_unbounded();
+int64_t  CS_LDK_NetworkUpdate_node_failure(int8_tArray node_id, jboolean is_permanent) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Quantity_one() {
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = Quantity_one();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NetworkUpdate_eq(int64_t a, int64_t b) {
+       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
+       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
+       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Offer_from_str(jstring s) {
-       LDKStr s_conv = str_ref_to_owned_c(s);
-       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
-       *ret_conv = Offer_from_str(s_conv);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_NetworkUpdate_write(int64_t obj) {
+       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-jstring  CS_LDK_Offer_to_str(int64_t o) {
-       LDKOffer o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = Offer_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+int64_t  CS_LDK_NetworkUpdate_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_free(int64_t this_obj) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_obj_conv;
+void  CS_LDK_P2PGossipSync_free(int64_t this_obj) {
+       LDKP2PGossipSync this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceWithExplicitSigningPubkeyBuilder_free(this_obj_conv);
+       P2PGossipSync_free(this_obj_conv);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_free(int64_t this_obj) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceWithDerivedSigningPubkeyBuilder_free(this_obj_conv);
+int64_t  CS_LDK_P2PGossipSync_new(int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_build(int64_t this_arg) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
+void  CS_LDK_P2PGossipSync_add_utxo_lookup(int64_t this_arg, int64_t utxo_lookup) {
+       LDKP2PGossipSync this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_UnsignedBolt12InvoiceBolt12SemanticErrorZ");
-       *ret_conv = InvoiceWithExplicitSigningPubkeyBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_conv);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
+void  CS_LDK_NetworkGraph_handle_network_update(int64_t this_arg, int64_t network_update) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       InvoiceWithExplicitSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
+       this_arg_conv.is_owned = false;
+       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
+       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
+int8_tArray  CS_LDK_NetworkGraph_get_chain_hash(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       uint8_t script_hash_arr[32];
-       CHECK(script_hash->arr_len == 32);
-       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
-       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
-       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, NetworkGraph_get_chain_hash(&this_arg_conv).data, 32);
+       return ret_arr;
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
+int64_t  CS_LDK_verify_node_announcement(int64_t msg) {
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_node_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       LDKTweakedPublicKey utput_key_ref;
-       CHECK(utput_key->arr_len == 32);
-       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
-       InvoiceWithExplicitSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
-}
-
-void  CS_LDK_InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
-       LDKInvoiceWithExplicitSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithExplicitSigningPubkeyBuilder
-       
-       InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(this_arg_conv);
+int64_t  CS_LDK_verify_channel_announcement(int64_t msg) {
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_channel_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(int64_t this_arg) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
+int64_t  CS_LDK_P2PGossipSync_as_RoutingMessageHandler(int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ), "LDKCResult_Bolt12InvoiceBolt12SemanticErrorZ");
-       *ret_conv = InvoiceWithDerivedSigningPubkeyBuilder_build_and_sign(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+       this_arg_conv.is_owned = false;
+       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
+       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(int64_t this_arg, int32_t relative_expiry_secs) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
+int64_t  CS_LDK_P2PGossipSync_as_MessageSendEventsProvider(int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       InvoiceWithDerivedSigningPubkeyBuilder_relative_expiry(this_arg_conv, relative_expiry_secs);
+       this_arg_conv.is_owned = false;
+       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
+       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(int64_t this_arg, int8_tArray script_hash) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       uint8_t script_hash_arr[32];
-       CHECK(script_hash->arr_len == 32);
-       memcpy(script_hash_arr, script_hash->elems, 32); FREE(script_hash);
-       uint8_t (*script_hash_ref)[32] = &script_hash_arr;
-       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wsh(this_arg_conv, script_hash_ref);
+void  CS_LDK_ChannelUpdateInfo_free(int64_t this_obj) {
+       LDKChannelUpdateInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUpdateInfo_free(this_obj_conv);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(int64_t this_arg, int8_tArray pubkey_hash) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v0_p2wpkh(this_arg_conv, pubkey_hash_ref);
+int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(int64_t this_arg, int8_tArray utput_key) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       LDKTweakedPublicKey utput_key_ref;
-       CHECK(utput_key->arr_len == 32);
-       memcpy(utput_key_ref.x_coordinate, utput_key->elems, 32); FREE(utput_key);
-       InvoiceWithDerivedSigningPubkeyBuilder_fallback_v1_p2tr_tweaked(this_arg_conv, utput_key_ref);
+void  CS_LDK_ChannelUpdateInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-void  CS_LDK_InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(int64_t this_arg) {
-       LDKInvoiceWithDerivedSigningPubkeyBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceWithDerivedSigningPubkeyBuilder
-       
-       InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(this_arg_conv);
+int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_UnsignedBolt12Invoice_free(int64_t this_obj) {
-       LDKUnsignedBolt12Invoice this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedBolt12Invoice_free(this_obj_conv);
+void  CS_LDK_ChannelUpdateInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t UnsignedBolt12Invoice_clone_ptr(LDKUnsignedBolt12Invoice *NONNULL_PTR arg) {
-       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(arg);
+int64_t  CS_LDK_ChannelUpdateInfo_get_fees(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_UnsignedBolt12Invoice_clone_ptr(int64_t arg) {
-       LDKUnsignedBolt12Invoice arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_clone_ptr(&arg_conv);
+
+void  CS_LDK_ChannelUpdateInfo_set_fees(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
+}
+
+int32_t  CS_LDK_ChannelUpdateInfo_get_last_update(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_clone(int64_t orig) {
-       LDKUnsignedBolt12Invoice orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKUnsignedBolt12Invoice ret_var = UnsignedBolt12Invoice_clone(&orig_conv);
+void  CS_LDK_ChannelUpdateInfo_set_last_update(int64_t this_ptr, int32_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_ChannelUpdateInfo_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelUpdateInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+jboolean  CS_LDK_ChannelUpdateInfo_get_enabled(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelUpdateInfo_set_enabled(int64_t this_ptr, jboolean val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_ChannelUpdateInfo_get_last_update_message(int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_SignBolt12InvoiceFn_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignBolt12InvoiceFn this_ptr_conv = *(LDKSignBolt12InvoiceFn*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignBolt12InvoiceFn_free(this_ptr_conv);
+void  CS_LDK_ChannelUpdateInfo_set_last_update_message(int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdate val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdate_clone(&val_conv);
+       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_tagged_hash(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTaggedHash ret_var = UnsignedBolt12Invoice_tagged_hash(&this_arg_conv);
+int64_t  CS_LDK_ChannelUpdateInfo_new(int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int32_t last_update_arg, int16_t cltv_expiry_delta_arg, jboolean enabled_arg, int64_t last_update_message_arg) {
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       LDKChannelUpdate last_update_message_arg_conv;
+       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
+       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
+       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_arg, cltv_expiry_delta_arg, enabled_arg, last_update_message_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Bolt12Invoice_free(int64_t this_obj) {
-       LDKBolt12Invoice this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12Invoice_free(this_obj_conv);
-}
-
-static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
+static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12Invoice_clone_ptr(int64_t arg) {
-       LDKBolt12Invoice arg_conv;
+int64_t  CS_LDK_ChannelUpdateInfo_clone_ptr(int64_t arg) {
+       LDKChannelUpdateInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_clone(int64_t orig) {
-       LDKBolt12Invoice orig_conv;
+int64_t  CS_LDK_ChannelUpdateInfo_clone(int64_t orig) {
+       LDKChannelUpdateInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_offer_chains(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
-       *ret_copy = UnsignedBolt12Invoice_offer_chains(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelUpdateInfo_eq(int64_t a, int64_t b) {
+       LDKChannelUpdateInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelUpdateInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_chain(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_chain(&this_arg_conv).data, 32);
+jstring  CS_LDK_ChannelUpdateInfo_to_str(int64_t o) {
+       LDKChannelUpdateInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = ChannelUpdateInfo_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_ChannelUpdateInfo_write(int64_t obj) {
+       LDKChannelUpdateInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_metadata(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = UnsignedBolt12Invoice_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_ChannelUpdateInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
+       *ret_conv = ChannelUpdateInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_amount(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = UnsignedBolt12Invoice_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelInfo_free(int64_t this_obj) {
+       LDKChannelInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelInfo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_offer_features(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = UnsignedBolt12Invoice_offer_features(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_features(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_description(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedBolt12Invoice_description(&this_arg_conv);
+void  CS_LDK_ChannelInfo_set_features(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       ChannelInfo_set_features(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_ChannelInfo_get_node_one(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_absolute_expiry(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedBolt12Invoice_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelInfo_set_node_one(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_issuer(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedBolt12Invoice_issuer(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_node_two(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_UnsignedBolt12Invoice_message_paths(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = UnsignedBolt12Invoice_message_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+void  CS_LDK_ChannelInfo_set_node_two(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_supported_quantity(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
-       *ret_copy = UnsignedBolt12Invoice_supported_quantity(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_capacity_sats(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_metadata(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = UnsignedBolt12Invoice_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+void  CS_LDK_ChannelInfo_set_capacity_sats(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_request_features(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = UnsignedBolt12Invoice_invoice_request_features(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_one_to_two(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_quantity(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedBolt12Invoice_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+void  CS_LDK_ChannelInfo_set_one_to_two(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_ChannelInfo_get_two_to_one(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_payer_id(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+void  CS_LDK_ChannelInfo_set_two_to_one(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_payer_note(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedBolt12Invoice_payer_note(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_get_announcement_message(int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_created_at(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_created_at(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_ChannelInfo_set_announcement_message(int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelAnnouncement val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelAnnouncement_clone(&val_conv);
+       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_relative_expiry(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_relative_expiry(&this_arg_conv);
-       return ret_conv;
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-jboolean  CS_LDK_UnsignedBolt12Invoice_is_expired(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = UnsignedBolt12Invoice_is_expired(&this_arg_conv);
+int64_t  CS_LDK_ChannelInfo_clone_ptr(int64_t arg) {
+       LDKChannelInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_payment_hash(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_payment_hash(&this_arg_conv).data, 32);
-       return ret_arr;
+int64_t  CS_LDK_ChannelInfo_clone(int64_t orig) {
+       LDKChannelInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_amount_msats(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedBolt12Invoice_amount_msats(&this_arg_conv);
+jboolean  CS_LDK_ChannelInfo_eq(int64_t a, int64_t b) {
+       LDKChannelInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UnsignedBolt12Invoice_invoice_features(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_ChannelInfo_get_directional_info(int64_t this_arg, int8_t channel_flags) {
+       LDKChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = UnsignedBolt12Invoice_invoice_features(&this_arg_conv);
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_signing_pubkey(int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+jstring  CS_LDK_ChannelInfo_to_str(int64_t o) {
+       LDKChannelInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = ChannelInfo_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_offer_chains(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
-       *ret_copy = Bolt12Invoice_offer_chains(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_ChannelInfo_write(int64_t obj) {
+       LDKChannelInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int8_tArray  CS_LDK_Bolt12Invoice_chain(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_chain(&this_arg_conv).data, 32);
-       return ret_arr;
+int64_t  CS_LDK_ChannelInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = ChannelInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12Invoice_metadata(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = Bolt12Invoice_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_DirectedChannelInfo_free(int64_t this_obj) {
+       LDKDirectedChannelInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DirectedChannelInfo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Bolt12Invoice_amount(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = Bolt12Invoice_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_DirectedChannelInfo_clone_ptr(int64_t arg) {
+       LDKDirectedChannelInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_Bolt12Invoice_offer_features(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = Bolt12Invoice_offer_features(&this_arg_conv);
+int64_t  CS_LDK_DirectedChannelInfo_clone(int64_t orig) {
+       LDKDirectedChannelInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_description(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_channel(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
+       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_absolute_expiry(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_effective_capacity(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Bolt12Invoice_absolute_expiry(&this_arg_conv);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_issuer(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_source(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_issuer(&this_arg_conv);
+       LDKNodeId ret_var = DirectedChannelInfo_source(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_Bolt12Invoice_message_paths(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+int64_t  CS_LDK_DirectedChannelInfo_target(int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Bolt12Invoice_message_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       LDKNodeId ret_var = DirectedChannelInfo_target(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_supported_quantity(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_QuantityZ *ret_copy = MALLOC(sizeof(LDKCOption_QuantityZ), "LDKCOption_QuantityZ");
-       *ret_copy = Bolt12Invoice_supported_quantity(&this_arg_conv);
+void  CS_LDK_EffectiveCapacity_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EffectiveCapacity_free(this_ptr_conv);
+}
+
+static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_EffectiveCapacity_clone_ptr(int64_t arg) {
+       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
+       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int8_tArray  CS_LDK_Bolt12Invoice_payer_metadata(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = Bolt12Invoice_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+int64_t  CS_LDK_EffectiveCapacity_clone(int64_t orig) {
+       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_invoice_request_features(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = Bolt12Invoice_invoice_request_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_EffectiveCapacity_exact_liquidity(int64_t liquidity_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_quantity(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Bolt12Invoice_quantity(&this_arg_conv);
+int64_t  CS_LDK_EffectiveCapacity_advertised_max_htlc(int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_Bolt12Invoice_payer_id(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+int64_t  CS_LDK_EffectiveCapacity_total(int64_t capacity_msat, int64_t htlc_maximum_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_payer_note(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_payer_note(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_EffectiveCapacity_infinite() {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_infinite();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_created_at(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_EffectiveCapacity_hint_max_htlc(int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_relative_expiry(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_EffectiveCapacity_unknown() {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_unknown();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12Invoice_is_expired(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
+int64_t  CS_LDK_EffectiveCapacity_as_msat(int64_t this_arg) {
+       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
+       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Bolt12Invoice_payment_hash(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_payment_hash(&this_arg_conv).data, 32);
+int8_tArray  CS_LDK_RoutingFees_write(int64_t obj) {
+       LDKRoutingFees obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Bolt12Invoice_amount_msats(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_RoutingFees_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = RoutingFees_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12Invoice_invoice_features(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_invoice_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_signing_pubkey(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_signature(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_signature(&this_arg_conv).compact_form, 64);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_signable_hash(int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Bolt12Invoice_signable_hash(&this_arg_conv).data, 32);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_Bolt12Invoice_verify(int64_t this_arg, int64_t key) {
-       LDKBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
-       *ret_conv = Bolt12Invoice_verify(&this_arg_conv, &key_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_Bolt12Invoice_hash(int64_t o) {
-       LDKBolt12Invoice o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_hash(&o_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_UnsignedBolt12Invoice_write(int64_t obj) {
-       LDKUnsignedBolt12Invoice obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UnsignedBolt12Invoice_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_Bolt12Invoice_write(int64_t obj) {
-       LDKBolt12Invoice obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-void  CS_LDK_BlindedPayInfo_free(int64_t this_obj) {
-       LDKBlindedPayInfo this_obj_conv;
+void  CS_LDK_NodeAnnouncementDetails_free(int64_t this_obj) {
+       LDKNodeAnnouncementDetails this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPayInfo_free(this_obj_conv);
+       NodeAnnouncementDetails_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_BlindedPayInfo_get_fee_base_msat(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_BlindedPayInfo_set_fee_base_msat(int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
-}
-
-int32_t  CS_LDK_BlindedPayInfo_get_fee_proportional_millionths(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_get_features(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeFeatures ret_var = NodeAnnouncementDetails_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedPayInfo_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_features(int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
+       LDKNodeFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeFeatures_clone(&val_conv);
+       NodeAnnouncementDetails_set_features(&this_ptr_conv, val_conv);
 }
 
-int16_t  CS_LDK_BlindedPayInfo_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int32_t  CS_LDK_NodeAnnouncementDetails_get_last_update(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       int32_t ret_conv = NodeAnnouncementDetails_get_last_update(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_BlindedPayInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_last_update(int64_t this_ptr, int32_t val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+       NodeAnnouncementDetails_set_last_update(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int8_tArray  CS_LDK_NodeAnnouncementDetails_get_rgb(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(3, __LINE__);
+       memcpy(ret_arr->elems, *NodeAnnouncementDetails_get_rgb(&this_ptr_conv), 3);
+       return ret_arr;
 }
 
-void  CS_LDK_BlindedPayInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_rgb(int64_t this_ptr, int8_tArray val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+       LDKThreeBytes val_ref;
+       CHECK(val->arr_len == 3);
+       memcpy(val_ref.data, val->elems, 3); FREE(val);
+       NodeAnnouncementDetails_set_rgb(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_get_alias(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeAlias ret_var = NodeAnnouncementDetails_get_alias(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedPayInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_alias(int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+       LDKNodeAlias val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeAlias_clone(&val_conv);
+       NodeAnnouncementDetails_set_alias(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_get_features(int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
+int64_tArray  CS_LDK_NodeAnnouncementDetails_get_addresses(int64_t this_ptr) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementDetails_get_addresses(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_BlindedPayInfo_set_features(int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
+void  CS_LDK_NodeAnnouncementDetails_set_addresses(int64_t this_ptr, int64_tArray val) {
+       LDKNodeAnnouncementDetails this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedHopFeatures_clone(&val_conv);
-       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
+       LDKCVec_SocketAddressZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t p = 0; p < val_constr.datalen; p++) {
+               int64_t val_conv_15 = val_vals[p];
+               void* val_conv_15_ptr = untag_ptr(val_conv_15);
+               CHECK_ACCESS(val_conv_15_ptr);
+               LDKSocketAddress val_conv_15_conv = *(LDKSocketAddress*)(val_conv_15_ptr);
+               val_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(val_conv_15));
+               val_constr.data[p] = val_conv_15_conv;
+       }
+       FREE(val);
+       NodeAnnouncementDetails_set_addresses(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_new(int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
-       LDKBlindedHopFeatures features_arg_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_new(int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_tArray addresses_arg) {
+       LDKNodeFeatures features_arg_conv;
        features_arg_conv.inner = untag_ptr(features_arg);
        features_arg_conv.is_owned = ptr_is_owned(features_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
+       LDKThreeBytes rgb_arg_ref;
+       CHECK(rgb_arg->arr_len == 3);
+       memcpy(rgb_arg_ref.data, rgb_arg->elems, 3); FREE(rgb_arg);
+       LDKNodeAlias alias_arg_conv;
+       alias_arg_conv.inner = untag_ptr(alias_arg);
+       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
+       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
+       LDKCVec_SocketAddressZ addresses_arg_constr;
+       addresses_arg_constr.datalen = addresses_arg->arr_len;
+       if (addresses_arg_constr.datalen > 0)
+               addresses_arg_constr.data = MALLOC(addresses_arg_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
+       else
+               addresses_arg_constr.data = NULL;
+       int64_t* addresses_arg_vals = addresses_arg->elems;
+       for (size_t p = 0; p < addresses_arg_constr.datalen; p++) {
+               int64_t addresses_arg_conv_15 = addresses_arg_vals[p];
+               void* addresses_arg_conv_15_ptr = untag_ptr(addresses_arg_conv_15);
+               CHECK_ACCESS(addresses_arg_conv_15_ptr);
+               LDKSocketAddress addresses_arg_conv_15_conv = *(LDKSocketAddress*)(addresses_arg_conv_15_ptr);
+               addresses_arg_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_arg_conv_15));
+               addresses_arg_constr.data[p] = addresses_arg_conv_15_conv;
+       }
+       FREE(addresses_arg);
+       LDKNodeAnnouncementDetails ret_var = NodeAnnouncementDetails_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, addresses_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+static inline uint64_t NodeAnnouncementDetails_clone_ptr(LDKNodeAnnouncementDetails *NONNULL_PTR arg) {
+       LDKNodeAnnouncementDetails ret_var = NodeAnnouncementDetails_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedPayInfo_clone_ptr(int64_t arg) {
-       LDKBlindedPayInfo arg_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_clone_ptr(int64_t arg) {
+       LDKNodeAnnouncementDetails arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAnnouncementDetails_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPayInfo_clone(int64_t orig) {
-       LDKBlindedPayInfo orig_conv;
+int64_t  CS_LDK_NodeAnnouncementDetails_clone(int64_t orig) {
+       LDKNodeAnnouncementDetails orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
+       LDKNodeAnnouncementDetails ret_var = NodeAnnouncementDetails_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedPayInfo_hash(int64_t o) {
-       LDKBlindedPayInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_BlindedPayInfo_eq(int64_t a, int64_t b) {
-       LDKBlindedPayInfo a_conv;
+jboolean  CS_LDK_NodeAnnouncementDetails_eq(int64_t a, int64_t b) {
+       LDKNodeAnnouncementDetails a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedPayInfo b_conv;
+       LDKNodeAnnouncementDetails b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeAnnouncementDetails_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_BlindedPayInfo_write(int64_t obj) {
-       LDKBlindedPayInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_NodeAnnouncementInfo_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeAnnouncementInfo this_ptr_conv = *(LDKNodeAnnouncementInfo*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeAnnouncementInfo_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_BlindedPayInfo_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = BlindedPayInfo_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-
-void  CS_LDK_InvoiceError_free(int64_t this_obj) {
-       LDKInvoiceError this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceError_free(this_obj_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_clone_ptr(int64_t arg) {
+       LDKNodeAnnouncementInfo* arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(arg);
+       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_InvoiceError_get_erroneous_field(int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_NodeAnnouncementInfo_clone(int64_t orig) {
+       LDKNodeAnnouncementInfo* orig_conv = (LDKNodeAnnouncementInfo*)untag_ptr(orig);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceError_set_erroneous_field(int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ErroneousField_clone(&val_conv);
-       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_relayed(int64_t a) {
+       LDKNodeAnnouncement a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = NodeAnnouncement_clone(&a_conv);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_relayed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceError_get_message(int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_NodeAnnouncementInfo_local(int64_t a) {
+       LDKNodeAnnouncementDetails a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = NodeAnnouncementDetails_clone(&a_conv);
+       LDKNodeAnnouncementInfo *ret_copy = MALLOC(sizeof(LDKNodeAnnouncementInfo), "LDKNodeAnnouncementInfo");
+       *ret_copy = NodeAnnouncementInfo_local(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceError_set_message(int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = UntrustedString_clone(&val_conv);
-       InvoiceError_set_message(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_NodeAnnouncementInfo_eq(int64_t a, int64_t b) {
+       LDKNodeAnnouncementInfo* a_conv = (LDKNodeAnnouncementInfo*)untag_ptr(a);
+       LDKNodeAnnouncementInfo* b_conv = (LDKNodeAnnouncementInfo*)untag_ptr(b);
+       jboolean ret_conv = NodeAnnouncementInfo_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_InvoiceError_new(int64_t erroneous_field_arg, int64_t message_arg) {
-       LDKErroneousField erroneous_field_arg_conv;
-       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
-       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
-       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
-       LDKUntrustedString message_arg_conv;
-       message_arg_conv.inner = untag_ptr(message_arg);
-       message_arg_conv.is_owned = ptr_is_owned(message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
-       message_arg_conv = UntrustedString_clone(&message_arg_conv);
-       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_features(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKNodeFeatures ret_var = NodeAnnouncementInfo_features(this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
-       LDKInvoiceError ret_var = InvoiceError_clone(arg);
+int32_t  CS_LDK_NodeAnnouncementInfo_last_update(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       int32_t ret_conv = NodeAnnouncementInfo_last_update(this_arg_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_NodeAnnouncementInfo_rgb(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       int8_tArray ret_arr = init_int8_tArray(3, __LINE__);
+       memcpy(ret_arr->elems, NodeAnnouncementInfo_rgb(this_arg_conv).data, 3);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_NodeAnnouncementInfo_alias(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKNodeAlias ret_var = NodeAnnouncementInfo_alias(this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_InvoiceError_clone_ptr(int64_t arg) {
-       LDKInvoiceError arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_tArray  CS_LDK_NodeAnnouncementInfo_addresses(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementInfo_addresses(this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceError_clone(int64_t orig) {
-       LDKInvoiceError orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
+int64_t  CS_LDK_NodeAnnouncementInfo_announcement_message(int64_t this_arg) {
+       LDKNodeAnnouncementInfo* this_arg_conv = (LDKNodeAnnouncementInfo*)untag_ptr(this_arg);
+       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_announcement_message(this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ErroneousField_free(int64_t this_obj) {
-       LDKErroneousField this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ErroneousField_free(this_obj_conv);
+int8_tArray  CS_LDK_NodeAnnouncementInfo_write(int64_t obj) {
+       LDKNodeAnnouncementInfo* obj_conv = (LDKNodeAnnouncementInfo*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ErroneousField_get_tlv_fieldnum(int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_NodeAnnouncementInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ErroneousField_set_tlv_fieldnum(int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
+void  CS_LDK_NodeAlias_free(int64_t this_obj) {
+       LDKNodeAlias this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeAlias_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ErroneousField_get_suggested_value(int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
+int8_tArray  CS_LDK_NodeAlias_get_a(int64_t this_ptr) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *NodeAlias_get_a(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_ErroneousField_set_suggested_value(int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
+void  CS_LDK_NodeAlias_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
-       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
-       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       NodeAlias_set_a(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_ErroneousField_new(int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
-       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
-       CHECK_ACCESS(suggested_value_arg_ptr);
-       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
-       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
-       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
+int64_t  CS_LDK_NodeAlias_new(int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK(a_arg->arr_len == 32);
+       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
+       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
-       LDKErroneousField ret_var = ErroneousField_clone(arg);
+static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
+       LDKNodeAlias ret_var = NodeAlias_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ErroneousField_clone_ptr(int64_t arg) {
-       LDKErroneousField arg_conv;
+int64_t  CS_LDK_NodeAlias_clone_ptr(int64_t arg) {
+       LDKNodeAlias arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ErroneousField_clone(int64_t orig) {
-       LDKErroneousField orig_conv;
+int64_t  CS_LDK_NodeAlias_clone(int64_t orig) {
+       LDKNodeAlias orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InvoiceError_from_string(jstring s) {
-       LDKStr s_conv = str_ref_to_owned_c(s);
-       LDKInvoiceError ret_var = InvoiceError_from_string(s_conv);
+       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jstring  CS_LDK_InvoiceError_to_str(int64_t o) {
-       LDKInvoiceError o_conv;
+int64_t  CS_LDK_NodeAlias_hash(int64_t o) {
+       LDKNodeAlias o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       LDKStr ret_str = InvoiceError_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+       int64_t ret_conv = NodeAlias_hash(&o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_InvoiceError_write(int64_t obj) {
-       LDKInvoiceError obj_conv;
+jboolean  CS_LDK_NodeAlias_eq(int64_t a, int64_t b) {
+       LDKNodeAlias a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeAlias b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+jstring  CS_LDK_NodeAlias_to_str(int64_t o) {
+       LDKNodeAlias o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NodeAlias_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_NodeAlias_write(int64_t obj) {
+       LDKNodeAlias obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceError_read(int8_tArray ser) {
+int64_t  CS_LDK_NodeAlias_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
-       *ret_conv = InvoiceError_read(ser_ref);
+       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
+       *ret_conv = NodeAlias_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_free(int64_t this_obj) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestWithExplicitPayerIdBuilder_free(this_obj_conv);
-}
-
-void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_free(int64_t this_obj) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestWithDerivedPayerIdBuilder_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_build(int64_t this_arg) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ), "LDKCResult_UnsignedInvoiceRequestBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_chain(this_arg_conv, network_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithExplicitPayerIdBuilder_quantity(this_arg_conv, quantity);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_InvoiceRequestWithExplicitPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
-       LDKInvoiceRequestWithExplicitPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithExplicitPayerIdBuilder
-       
-       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
-       InvoiceRequestWithExplicitPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(int64_t this_arg) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKCResult_InvoiceRequestBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestBolt12SemanticErrorZ), "LDKCResult_InvoiceRequestBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_build_and_sign(this_arg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_chain(this_arg_conv, network_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(int64_t this_arg, int64_t amount_msats) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_amount_msats(this_arg_conv, amount_msats);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_quantity(int64_t this_arg, int64_t quantity) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKCResult_NoneBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneBolt12SemanticErrorZ), "LDKCResult_NoneBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequestWithDerivedPayerIdBuilder_quantity(this_arg_conv, quantity);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_InvoiceRequestWithDerivedPayerIdBuilder_payer_note(int64_t this_arg, jstring payer_note) {
-       LDKInvoiceRequestWithDerivedPayerIdBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       // WARNING: we need a move here but no clone is available for LDKInvoiceRequestWithDerivedPayerIdBuilder
-       
-       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
-       InvoiceRequestWithDerivedPayerIdBuilder_payer_note(this_arg_conv, payer_note_conv);
-}
-
-void  CS_LDK_UnsignedInvoiceRequest_free(int64_t this_obj) {
-       LDKUnsignedInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedInvoiceRequest_free(this_obj_conv);
-}
-
-static inline uint64_t UnsignedInvoiceRequest_clone_ptr(LDKUnsignedInvoiceRequest *NONNULL_PTR arg) {
-       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_UnsignedInvoiceRequest_clone_ptr(int64_t arg) {
-       LDKUnsignedInvoiceRequest arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = UnsignedInvoiceRequest_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_UnsignedInvoiceRequest_clone(int64_t orig) {
-       LDKUnsignedInvoiceRequest orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKUnsignedInvoiceRequest ret_var = UnsignedInvoiceRequest_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_SignInvoiceRequestFn_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignInvoiceRequestFn this_ptr_conv = *(LDKSignInvoiceRequestFn*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignInvoiceRequestFn_free(this_ptr_conv);
-}
-
-int64_t  CS_LDK_UnsignedInvoiceRequest_tagged_hash(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTaggedHash ret_var = UnsignedInvoiceRequest_tagged_hash(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_InvoiceRequest_free(int64_t this_obj) {
-       LDKInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequest_free(this_obj_conv);
-}
-
-static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_InvoiceRequest_clone_ptr(int64_t arg) {
-       LDKInvoiceRequest arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_InvoiceRequest_clone(int64_t orig) {
-       LDKInvoiceRequest orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_VerifiedInvoiceRequest_free(int64_t this_obj) {
-       LDKVerifiedInvoiceRequest this_obj_conv;
+void  CS_LDK_NodeInfo_free(int64_t this_obj) {
+       LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       VerifiedInvoiceRequest_free(this_obj_conv);
+       NodeInfo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_get_offer_id(int64_t this_ptr) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+int64_tArray  CS_LDK_NodeInfo_get_channels(int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOfferId ret_var = VerifiedInvoiceRequest_get_offer_id(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_VerifiedInvoiceRequest_set_offer_id(int64_t this_ptr, int64_t val) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+void  CS_LDK_NodeInfo_set_channels(int64_t this_ptr, int64_tArray val) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOfferId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OfferId_clone(&val_conv);
-       VerifiedInvoiceRequest_set_offer_id(&this_ptr_conv, val_conv);
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       FREE(val);
+       NodeInfo_set_channels(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_get_keys(int64_t this_ptr) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+int64_t  CS_LDK_NodeInfo_get_announcement_info(int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
-       *ret_copy = VerifiedInvoiceRequest_get_keys(&this_ptr_conv);
+       LDKCOption_NodeAnnouncementInfoZ *ret_copy = MALLOC(sizeof(LDKCOption_NodeAnnouncementInfoZ), "LDKCOption_NodeAnnouncementInfoZ");
+       *ret_copy = NodeInfo_get_announcement_info(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_VerifiedInvoiceRequest_set_keys(int64_t this_ptr, int64_t val) {
-       LDKVerifiedInvoiceRequest this_ptr_conv;
+void  CS_LDK_NodeInfo_set_announcement_info(int64_t this_ptr, int64_t val) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_SecretKeyZ val_conv = *(LDKCOption_SecretKeyZ*)(val_ptr);
-       val_conv = COption_SecretKeyZ_clone((LDKCOption_SecretKeyZ*)untag_ptr(val));
-       VerifiedInvoiceRequest_set_keys(&this_ptr_conv, val_conv);
+       LDKCOption_NodeAnnouncementInfoZ val_conv = *(LDKCOption_NodeAnnouncementInfoZ*)(val_ptr);
+       val_conv = COption_NodeAnnouncementInfoZ_clone((LDKCOption_NodeAnnouncementInfoZ*)untag_ptr(val));
+       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg) {
-       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(arg);
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_VerifiedInvoiceRequest_clone_ptr(int64_t arg) {
-       LDKVerifiedInvoiceRequest arg_conv;
+int64_t  CS_LDK_NodeInfo_clone_ptr(int64_t arg) {
+       LDKNodeInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = VerifiedInvoiceRequest_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_clone(int64_t orig) {
-       LDKVerifiedInvoiceRequest orig_conv;
+int64_t  CS_LDK_NodeInfo_clone(int64_t orig) {
+       LDKNodeInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(&orig_conv);
+       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-ptrArray  CS_LDK_UnsignedInvoiceRequest_chains(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+jboolean  CS_LDK_NodeInfo_eq(int64_t a, int64_t b) {
+       LDKNodeInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeInfo_is_tor_only(int64_t this_arg) {
+       LDKNodeInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = UnsignedInvoiceRequest_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
+       jboolean ret_conv = NodeInfo_is_tor_only(&this_arg_conv);
+       return ret_conv;
+}
+
+jstring  CS_LDK_NodeInfo_to_str(int64_t o) {
+       LDKNodeInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NodeInfo_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_NodeInfo_write(int64_t obj) {
+       LDKNodeInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_metadata(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = UnsignedInvoiceRequest_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = NodeInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_amount(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = UnsignedInvoiceRequest_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_NetworkGraph_write(int64_t obj) {
+       LDKNetworkGraph obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_description(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedInvoiceRequest_description(&this_arg_conv);
+int64_t  CS_LDK_NetworkGraph_read(int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
+       if (arg_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+jstring  CS_LDK_NetworkGraph_to_str(int64_t o) {
+       LDKNetworkGraph o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = NetworkGraph_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_NetworkGraph_new(int32_t network, int64_t logger) {
+       LDKNetwork network_conv = LDKNetwork_from_cs(network);
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_offer_features(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_read_only(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = UnsignedInvoiceRequest_offer_features(&this_arg_conv);
+       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_absolute_expiry(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_get_last_rapid_gossip_sync_timestamp(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_issuer(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_set_last_rapid_gossip_sync_timestamp(int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedInvoiceRequest_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
 }
 
-int64_tArray  CS_LDK_UnsignedInvoiceRequest_paths(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_node_from_announcement(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = UnsignedInvoiceRequest_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_UnsignedInvoiceRequest_supported_quantity(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = UnsignedInvoiceRequest_supported_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_signing_pubkey(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_node_from_unsigned_announcement(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+       LDKUnsignedNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_metadata(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = UnsignedInvoiceRequest_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_chain(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement_no_lookup(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, UnsignedInvoiceRequest_chain(&this_arg_conv).data, 32);
-       return ret_arr;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_amount_msats(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_from_unsigned_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedInvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKUnsignedChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_invoice_request_features(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_add_channel_from_partial_announcement(int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = UnsignedInvoiceRequest_invoice_request_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKChannelFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = ChannelFeatures_clone(&features_conv);
+       LDKPublicKey node_id_1_ref;
+       CHECK(node_id_1->arr_len == 33);
+       memcpy(node_id_1_ref.compressed_form, node_id_1->elems, 33); FREE(node_id_1);
+       LDKPublicKey node_id_2_ref;
+       CHECK(node_id_2->arr_len == 33);
+       memcpy(node_id_2_ref.compressed_form, node_id_2->elems, 33); FREE(node_id_2);
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_quantity(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_channel_failed_permanent(int64_t this_arg, int64_t short_channel_id) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = UnsignedInvoiceRequest_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
 }
 
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_payer_id(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_node_failed_permanent(int64_t this_arg, int8_tArray node_id) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, UnsignedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
 }
 
-int64_t  CS_LDK_UnsignedInvoiceRequest_payer_note(int64_t this_arg) {
-       LDKUnsignedInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking(int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = UnsignedInvoiceRequest_payer_note(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
 }
 
-ptrArray  CS_LDK_InvoiceRequest_chains(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking_with_time(int64_t this_arg, int64_t current_time_unix) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = InvoiceRequest_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
 }
 
-int64_t  CS_LDK_InvoiceRequest_metadata(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = InvoiceRequest_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_amount(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_update_channel_unsigned(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = InvoiceRequest_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKUnsignedChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_description(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_NetworkGraph_verify_channel_update(int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_verify_channel_update(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_offer_features(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ReadOnlyNetworkGraph_channel(int64_t this_arg, int64_t short_channel_id) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = InvoiceRequest_offer_features(&this_arg_conv);
+       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_absolute_expiry(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_channels(int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceRequest_issuer(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ReadOnlyNetworkGraph_node(int64_t this_arg, int64_t node_id) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_issuer(&this_arg_conv);
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_tArray  CS_LDK_InvoiceRequest_paths(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_nodes(int64_t this_arg) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = InvoiceRequest_paths(&this_arg_conv);
+       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKNodeId ret_conv_8_var = ret_var.data[i];
+               int64_t ret_conv_8_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
+               ret_arr_ptr[i] = ret_conv_8_ref;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceRequest_supported_quantity(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ReadOnlyNetworkGraph_get_addresses(int64_t this_arg, int8_tArray pubkey) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = InvoiceRequest_supported_quantity(&this_arg_conv);
+       LDKPublicKey pubkey_ref;
+       CHECK(pubkey->arr_len == 33);
+       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_signing_pubkey(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+void  CS_LDK_DefaultRouter_free(int64_t this_obj) {
+       LDKDefaultRouter this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DefaultRouter_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_payer_metadata(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = InvoiceRequest_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+int64_t  CS_LDK_DefaultRouter_new(int64_t network_graph, int64_t logger, int64_t entropy_source, int64_t scorer, int64_t score_params) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
+       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLockableScore_JCalls_cloned(&scorer_conv);
+       }
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
+       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, entropy_source_conv, scorer_conv, score_params_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_chain(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_DefaultRouter_as_Router(int64_t this_arg) {
+       LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_chain(&this_arg_conv).data, 32);
-       return ret_arr;
+       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
+       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_amount_msats(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_DefaultRouter_as_MessageRouter(int64_t this_arg) {
+       LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
+       *ret_ret = DefaultRouter_as_MessageRouter(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_InvoiceRequest_invoice_request_features(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_invoice_request_features(&this_arg_conv);
+void  CS_LDK_Router_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Router_free(this_ptr_conv);
+}
+
+void  CS_LDK_ScorerAccountingForInFlightHtlcs_free(int64_t this_obj) {
+       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_new(int64_t scorer, int64_t inflight_htlcs) {
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKScoreLookUp scorer_conv = *(LDKScoreLookUp*)(scorer_ptr);
+       if (scorer_conv.free == LDKScoreLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScoreLookUp_JCalls_cloned(&scorer_conv);
+       }
+       LDKInFlightHtlcs inflight_htlcs_conv;
+       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
+       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
+       inflight_htlcs_conv.is_owned = false;
+       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_quantity(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(int64_t this_arg) {
+       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_InFlightHtlcs_free(int64_t this_obj) {
+       LDKInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InFlightHtlcs_free(this_obj_conv);
+}
+
+static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_InFlightHtlcs_clone_ptr(int64_t arg) {
+       LDKInFlightHtlcs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-int8_tArray  CS_LDK_InvoiceRequest_payer_id(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+int64_t  CS_LDK_InFlightHtlcs_clone(int64_t orig) {
+       LDKInFlightHtlcs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_payer_note(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+int64_t  CS_LDK_InFlightHtlcs_new() {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
-       LDKInvoiceRequest this_arg_conv;
+void  CS_LDK_InFlightHtlcs_process_path(int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
+       LDKInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
-       return tag_ptr(ret_conv, true);
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv.is_owned = false;
+       LDKPublicKey payer_node_id_ref;
+       CHECK(payer_node_id->arr_len == 33);
+       memcpy(payer_node_id_ref.compressed_form, payer_node_id->elems, 33); FREE(payer_node_id);
+       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
 }
 
-int64_t  CS_LDK_InvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
-       LDKInvoiceRequest this_arg_conv;
+void  CS_LDK_InFlightHtlcs_add_inflight_htlc(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
+       LDKInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = InvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InvoiceRequest_verify(int64_t this_arg, int64_t key) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
-       *ret_conv = InvoiceRequest_verify(this_arg_conv, &key_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_InvoiceRequest_signature(int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequest_signature(&this_arg_conv).compact_form, 64);
-       return ret_arr;
-}
-
-ptrArray  CS_LDK_VerifiedInvoiceRequest_chains(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_ThirtyTwoBytesZ ret_var = VerifiedInvoiceRequest_chains(&this_arg_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(32, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].data, 32);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_metadata(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = VerifiedInvoiceRequest_metadata(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_amount(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_AmountZ *ret_copy = MALLOC(sizeof(LDKCOption_AmountZ), "LDKCOption_AmountZ");
-       *ret_copy = VerifiedInvoiceRequest_amount(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_description(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = VerifiedInvoiceRequest_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_offer_features(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = VerifiedInvoiceRequest_offer_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_absolute_expiry(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = VerifiedInvoiceRequest_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_issuer(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = VerifiedInvoiceRequest_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_tArray  CS_LDK_VerifiedInvoiceRequest_paths(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = VerifiedInvoiceRequest_paths(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_supported_quantity(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKQuantity *ret_copy = MALLOC(sizeof(LDKQuantity), "LDKQuantity");
-       *ret_copy = VerifiedInvoiceRequest_supported_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_signing_pubkey(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, VerifiedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_metadata(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = VerifiedInvoiceRequest_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_chain(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, VerifiedInvoiceRequest_chain(&this_arg_conv).data, 32);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_amount_msats(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = VerifiedInvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_invoice_request_features(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = VerifiedInvoiceRequest_invoice_request_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
 }
 
-int64_t  CS_LDK_VerifiedInvoiceRequest_quantity(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
+int64_t  CS_LDK_InFlightHtlcs_used_liquidity_msat(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
+       LDKInFlightHtlcs this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = VerifiedInvoiceRequest_quantity(&this_arg_conv);
+       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_VerifiedInvoiceRequest_payer_id(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, VerifiedInvoiceRequest_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_payer_note(int64_t this_arg) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = VerifiedInvoiceRequest_payer_note(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_with(&this_arg_conv, payment_paths_constr, payment_hash_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_with_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_with_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys(&this_arg_conv, payment_paths_constr, payment_hash_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys_no_std(int64_t this_arg, int64_tArray payment_paths, int8_tArray payment_hash, int64_t created_at) {
-       LDKVerifiedInvoiceRequest this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths_constr;
-       payment_paths_constr.datalen = payment_paths->arr_len;
-       if (payment_paths_constr.datalen > 0)
-               payment_paths_constr.data = MALLOC(payment_paths_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               payment_paths_constr.data = NULL;
-       int64_t* payment_paths_vals = payment_paths->elems;
-       for (size_t l = 0; l < payment_paths_constr.datalen; l++) {
-               int64_t payment_paths_conv_37 = payment_paths_vals[l];
-               void* payment_paths_conv_37_ptr = untag_ptr(payment_paths_conv_37);
-               CHECK_ACCESS(payment_paths_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ payment_paths_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(payment_paths_conv_37_ptr);
-               payment_paths_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(payment_paths_conv_37));
-               payment_paths_constr.data[l] = payment_paths_conv_37_conv;
-       }
-       FREE(payment_paths);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ), "LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ");
-       *ret_conv = VerifiedInvoiceRequest_respond_using_derived_keys_no_std(&this_arg_conv, payment_paths_constr, payment_hash_ref, created_at);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_UnsignedInvoiceRequest_write(int64_t obj) {
-       LDKUnsignedInvoiceRequest obj_conv;
+int8_tArray  CS_LDK_InFlightHtlcs_write(int64_t obj) {
+       LDKInFlightHtlcs obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UnsignedInvoiceRequest_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int8_tArray  CS_LDK_InvoiceRequest_write(int64_t obj) {
-       LDKInvoiceRequest obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InFlightHtlcs_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
+       *ret_conv = InFlightHtlcs_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_InvoiceRequestFields_free(int64_t this_obj) {
-       LDKInvoiceRequestFields this_obj_conv;
+void  CS_LDK_RouteHop_free(int64_t this_obj) {
+       LDKRouteHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequestFields_free(this_obj_conv);
+       RouteHop_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_InvoiceRequestFields_get_payer_id(int64_t this_ptr) {
-       LDKInvoiceRequestFields this_ptr_conv;
+int8_tArray  CS_LDK_RouteHop_get_pubkey(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, InvoiceRequestFields_get_payer_id(&this_ptr_conv).compressed_form, 33);
+       memcpy(ret_arr->elems, RouteHop_get_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
 }
 
-void  CS_LDK_InvoiceRequestFields_set_payer_id(int64_t this_ptr, int8_tArray val) {
-       LDKInvoiceRequestFields this_ptr_conv;
+void  CS_LDK_RouteHop_set_pubkey(int64_t this_ptr, int8_tArray val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -68533,1273 +71555,2007 @@ void  CS_LDK_InvoiceRequestFields_set_payer_id(int64_t this_ptr, int8_tArray val
        LDKPublicKey val_ref;
        CHECK(val->arr_len == 33);
        memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       InvoiceRequestFields_set_payer_id(&this_ptr_conv, val_ref);
+       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_get_quantity(int64_t this_ptr) {
-       LDKInvoiceRequestFields this_ptr_conv;
+int64_t  CS_LDK_RouteHop_get_node_features(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequestFields_get_quantity(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceRequestFields_set_quantity(int64_t this_ptr, int64_t val) {
-       LDKInvoiceRequestFields this_ptr_conv;
+void  CS_LDK_RouteHop_set_node_features(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       InvoiceRequestFields_set_quantity(&this_ptr_conv, val_conv);
+       LDKNodeFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeFeatures_clone(&val_conv);
+       RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_get_payer_note_truncated(int64_t this_ptr) {
-       LDKInvoiceRequestFields this_ptr_conv;
+int64_t  CS_LDK_RouteHop_get_short_channel_id(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKUntrustedString ret_var = InvoiceRequestFields_get_payer_note_truncated(&this_ptr_conv);
+       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_short_channel_id(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHop_get_channel_features(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_InvoiceRequestFields_set_payer_note_truncated(int64_t this_ptr, int64_t val) {
-       LDKInvoiceRequestFields this_ptr_conv;
+void  CS_LDK_RouteHop_set_channel_features(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKUntrustedString val_conv;
+       LDKChannelFeatures val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = UntrustedString_clone(&val_conv);
-       InvoiceRequestFields_set_payer_note_truncated(&this_ptr_conv, val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_new(int8_tArray payer_id_arg, int64_t quantity_arg, int64_t payer_note_truncated_arg) {
-       LDKPublicKey payer_id_arg_ref;
-       CHECK(payer_id_arg->arr_len == 33);
-       memcpy(payer_id_arg_ref.compressed_form, payer_id_arg->elems, 33); FREE(payer_id_arg);
-       void* quantity_arg_ptr = untag_ptr(quantity_arg);
-       CHECK_ACCESS(quantity_arg_ptr);
-       LDKCOption_u64Z quantity_arg_conv = *(LDKCOption_u64Z*)(quantity_arg_ptr);
-       quantity_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(quantity_arg));
-       LDKUntrustedString payer_note_truncated_arg_conv;
-       payer_note_truncated_arg_conv.inner = untag_ptr(payer_note_truncated_arg);
-       payer_note_truncated_arg_conv.is_owned = ptr_is_owned(payer_note_truncated_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payer_note_truncated_arg_conv);
-       payer_note_truncated_arg_conv = UntrustedString_clone(&payer_note_truncated_arg_conv);
-       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_new(payer_id_arg_ref, quantity_arg_conv, payer_note_truncated_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_RouteHop_get_fee_msat(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-static inline uint64_t InvoiceRequestFields_clone_ptr(LDKInvoiceRequestFields *NONNULL_PTR arg) {
-       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_InvoiceRequestFields_clone_ptr(int64_t arg) {
-       LDKInvoiceRequestFields arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequestFields_clone_ptr(&arg_conv);
-       return ret_conv;
+void  CS_LDK_RouteHop_set_fee_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_clone(int64_t orig) {
-       LDKInvoiceRequestFields orig_conv;
+int32_t  CS_LDK_RouteHop_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHop_set_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+jboolean  CS_LDK_RouteHop_get_maybe_announced_channel(int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = RouteHop_get_maybe_announced_channel(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHop_set_maybe_announced_channel(int64_t this_ptr, jboolean val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHop_set_maybe_announced_channel(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHop_new(int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg, jboolean maybe_announced_channel_arg) {
+       LDKPublicKey pubkey_arg_ref;
+       CHECK(pubkey_arg->arr_len == 33);
+       memcpy(pubkey_arg_ref.compressed_form, pubkey_arg->elems, 33); FREE(pubkey_arg);
+       LDKNodeFeatures node_features_arg_conv;
+       node_features_arg_conv.inner = untag_ptr(node_features_arg);
+       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
+       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
+       LDKChannelFeatures channel_features_arg_conv;
+       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
+       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
+       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
+       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_RouteHop_clone_ptr(int64_t arg) {
+       LDKRouteHop arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_RouteHop_clone(int64_t orig) {
+       LDKRouteHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInvoiceRequestFields ret_var = InvoiceRequestFields_clone(&orig_conv);
+       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_InvoiceRequestFields_eq(int64_t a, int64_t b) {
-       LDKInvoiceRequestFields a_conv;
+int64_t  CS_LDK_RouteHop_hash(int64_t o) {
+       LDKRouteHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_RouteHop_eq(int64_t a, int64_t b) {
+       LDKRouteHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKInvoiceRequestFields b_conv;
+       LDKRouteHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = InvoiceRequestFields_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_InvoiceRequestFields_write(int64_t obj) {
-       LDKInvoiceRequestFields obj_conv;
+int8_tArray  CS_LDK_RouteHop_write(int64_t obj) {
+       LDKRouteHop obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceRequestFields_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InvoiceRequestFields_read(int8_tArray ser) {
+int64_t  CS_LDK_RouteHop_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_InvoiceRequestFieldsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceRequestFieldsDecodeErrorZ), "LDKCResult_InvoiceRequestFieldsDecodeErrorZ");
-       *ret_conv = InvoiceRequestFields_read(ser_ref);
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = RouteHop_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_TaggedHash_free(int64_t this_obj) {
-       LDKTaggedHash this_obj_conv;
+void  CS_LDK_BlindedTail_free(int64_t this_obj) {
+       LDKBlindedTail this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       TaggedHash_free(this_obj_conv);
+       BlindedTail_free(this_obj_conv);
 }
 
-static inline uint64_t TaggedHash_clone_ptr(LDKTaggedHash *NONNULL_PTR arg) {
-       LDKTaggedHash ret_var = TaggedHash_clone(arg);
+int64_tArray  CS_LDK_BlindedTail_get_hops(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+void  CS_LDK_BlindedTail_set_hops(int64_t this_ptr, int64_tArray val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t m = 0; m < val_constr.datalen; m++) {
+               int64_t val_conv_12 = val_vals[m];
+               LDKBlindedHop val_conv_12_conv;
+               val_conv_12_conv.inner = untag_ptr(val_conv_12);
+               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
+               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
+               val_constr.data[m] = val_conv_12_conv;
+       }
+       FREE(val);
+       BlindedTail_set_hops(&this_ptr_conv, val_constr);
+}
+
+int8_tArray  CS_LDK_BlindedTail_get_blinding_point(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_BlindedTail_set_blinding_point(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
+}
+
+int32_t  CS_LDK_BlindedTail_get_excess_final_cltv_expiry_delta(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedTail_set_excess_final_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedTail_get_final_value_msat(int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedTail_set_final_value_msat(int64_t this_ptr, int64_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedTail_new(int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
+       LDKCVec_BlindedHopZ hops_arg_constr;
+       hops_arg_constr.datalen = hops_arg->arr_len;
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = hops_arg->elems;
+       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
+               int64_t hops_arg_conv_12 = hops_arg_vals[m];
+               LDKBlindedHop hops_arg_conv_12_conv;
+               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
+               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
+               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
+               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
+       }
+       FREE(hops_arg);
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK(blinding_point_arg->arr_len == 33);
+       memcpy(blinding_point_arg_ref.compressed_form, blinding_point_arg->elems, 33); FREE(blinding_point_arg);
+       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_TaggedHash_clone_ptr(int64_t arg) {
-       LDKTaggedHash arg_conv;
+
+static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
+       LDKBlindedTail ret_var = BlindedTail_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_BlindedTail_clone_ptr(int64_t arg) {
+       LDKBlindedTail arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = TaggedHash_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_TaggedHash_clone(int64_t orig) {
-       LDKTaggedHash orig_conv;
+int64_t  CS_LDK_BlindedTail_clone(int64_t orig) {
+       LDKBlindedTail orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKTaggedHash ret_var = TaggedHash_clone(&orig_conv);
+       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_TaggedHash_as_digest(int64_t this_arg) {
-       LDKTaggedHash this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *TaggedHash_as_digest(&this_arg_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_BlindedTail_hash(int64_t o) {
+       LDKBlindedTail o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedTail_hash(&o_conv);
+       return ret_conv;
 }
 
-jstring  CS_LDK_TaggedHash_tag(int64_t this_arg) {
-       LDKTaggedHash this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKStr ret_str = TaggedHash_tag(&this_arg_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+jboolean  CS_LDK_BlindedTail_eq(int64_t a, int64_t b) {
+       LDKBlindedTail a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedTail b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_TaggedHash_merkle_root(int64_t this_arg) {
-       LDKTaggedHash this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, TaggedHash_merkle_root(&this_arg_conv).data, 32);
+int8_tArray  CS_LDK_BlindedTail_write(int64_t obj) {
+       LDKBlindedTail obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_SignError_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignError this_ptr_conv = *(LDKSignError*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignError_free(this_ptr_conv);
+int64_t  CS_LDK_BlindedTail_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
+       *ret_conv = BlindedTail_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t SignError_clone_ptr(LDKSignError *NONNULL_PTR arg) {
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Path_free(int64_t this_obj) {
+       LDKPath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Path_free(this_obj_conv);
 }
-int64_t  CS_LDK_SignError_clone_ptr(int64_t arg) {
-       LDKSignError* arg_conv = (LDKSignError*)untag_ptr(arg);
-       int64_t ret_conv = SignError_clone_ptr(arg_conv);
-       return ret_conv;
+
+int64_tArray  CS_LDK_Path_get_hops(int64_t this_ptr) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_RouteHopZ ret_var = Path_get_hops(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t k = 0; k < ret_var.datalen; k++) {
+               LDKRouteHop ret_conv_10_var = ret_var.data[k];
+               int64_t ret_conv_10_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
+               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
+               ret_arr_ptr[k] = ret_conv_10_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_SignError_clone(int64_t orig) {
-       LDKSignError* orig_conv = (LDKSignError*)untag_ptr(orig);
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Path_set_hops(int64_t this_ptr, int64_tArray val) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_RouteHopZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t k = 0; k < val_constr.datalen; k++) {
+               int64_t val_conv_10 = val_vals[k];
+               LDKRouteHop val_conv_10_conv;
+               val_conv_10_conv.inner = untag_ptr(val_conv_10);
+               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
+               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
+               val_constr.data[k] = val_conv_10_conv;
+       }
+       FREE(val);
+       Path_set_hops(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_SignError_signing() {
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_signing();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_Path_get_blinded_tail(int64_t this_ptr) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SignError_verification(int32_t a) {
-       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
-       LDKSignError *ret_copy = MALLOC(sizeof(LDKSignError), "LDKSignError");
-       *ret_copy = SignError_verification(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Path_set_blinded_tail(int64_t this_ptr, int64_t val) {
+       LDKPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedTail val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedTail_clone(&val_conv);
+       Path_set_blinded_tail(&this_ptr_conv, val_conv);
 }
 
-void  CS_LDK_Bolt12ParseError_free(int64_t this_obj) {
-       LDKBolt12ParseError this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12ParseError_free(this_obj_conv);
+int64_t  CS_LDK_Path_new(int64_tArray hops_arg, int64_t blinded_tail_arg) {
+       LDKCVec_RouteHopZ hops_arg_constr;
+       hops_arg_constr.datalen = hops_arg->arr_len;
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = hops_arg->elems;
+       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
+               int64_t hops_arg_conv_10 = hops_arg_vals[k];
+               LDKRouteHop hops_arg_conv_10_conv;
+               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
+               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
+               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
+               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+       }
+       FREE(hops_arg);
+       LDKBlindedTail blinded_tail_arg_conv;
+       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
+       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
+       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
+       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
+static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
+       LDKPath ret_var = Path_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12ParseError_clone_ptr(int64_t arg) {
-       LDKBolt12ParseError arg_conv;
+int64_t  CS_LDK_Path_clone_ptr(int64_t arg) {
+       LDKPath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
+       int64_t ret_conv = Path_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12ParseError_clone(int64_t orig) {
-       LDKBolt12ParseError orig_conv;
+int64_t  CS_LDK_Path_clone(int64_t orig) {
+       LDKPath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
+       LDKPath ret_var = Path_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_clone(int64_t orig) {
-       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_clone(orig_conv));
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Bolt12SemanticError_already_expired() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_already_expired());
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Bolt12SemanticError_unsupported_chain() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_chain());
+int64_t  CS_LDK_Path_hash(int64_t o) {
+       LDKPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Path_hash(&o_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_chain() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_chain());
-       return ret_conv;
+jboolean  CS_LDK_Path_eq(int64_t a, int64_t b) {
+       LDKPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_amount());
+int64_t  CS_LDK_Path_fee_msat(int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_amount());
+int64_t  CS_LDK_Path_final_value_msat(int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_insufficient_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_insufficient_amount());
-       return ret_conv;
+int64_t  CS_LDK_Path_final_cltv_expiry_delta(int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_amount() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_amount());
-       return ret_conv;
+void  CS_LDK_Route_free(int64_t this_obj) {
+       LDKRoute this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Route_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unsupported_currency() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unsupported_currency());
-       return ret_conv;
+int64_tArray  CS_LDK_Route_get_paths(int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PathZ ret_var = Route_get_paths(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               LDKPath ret_conv_6_var = ret_var.data[g];
+               int64_t ret_conv_6_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
+               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
+               ret_arr_ptr[g] = ret_conv_6_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unknown_required_features() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unknown_required_features());
-       return ret_conv;
+void  CS_LDK_Route_set_paths(int64_t this_ptr, int64_tArray val) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PathZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               LDKPath val_conv_6_conv;
+               val_conv_6_conv.inner = untag_ptr(val_conv_6);
+               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
+               val_conv_6_conv = Path_clone(&val_conv_6_conv);
+               val_constr.data[g] = val_conv_6_conv;
+       }
+       FREE(val);
+       Route_set_paths(&this_ptr_conv, val_constr);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_features() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_features());
-       return ret_conv;
+int64_t  CS_LDK_Route_get_route_params(int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRouteParameters ret_var = Route_get_route_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_description() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_description());
-       return ret_conv;
+void  CS_LDK_Route_set_route_params(int64_t this_ptr, int64_t val) {
+       LDKRoute this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRouteParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RouteParameters_clone(&val_conv);
+       Route_set_route_params(&this_ptr_conv, val_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_signing_pubkey() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signing_pubkey());
-       return ret_conv;
+int64_t  CS_LDK_Route_new(int64_tArray paths_arg, int64_t route_params_arg) {
+       LDKCVec_PathZ paths_arg_constr;
+       paths_arg_constr.datalen = paths_arg->arr_len;
+       if (paths_arg_constr.datalen > 0)
+               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               paths_arg_constr.data = NULL;
+       int64_t* paths_arg_vals = paths_arg->elems;
+       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
+               int64_t paths_arg_conv_6 = paths_arg_vals[g];
+               LDKPath paths_arg_conv_6_conv;
+               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
+               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
+               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
+               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
+       }
+       FREE(paths_arg);
+       LDKRouteParameters route_params_arg_conv;
+       route_params_arg_conv.inner = untag_ptr(route_params_arg);
+       route_params_arg_conv.is_owned = ptr_is_owned(route_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_arg_conv);
+       route_params_arg_conv = RouteParameters_clone(&route_params_arg_conv);
+       LDKRoute ret_var = Route_new(paths_arg_constr, route_params_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_signing_pubkey() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_signing_pubkey());
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_Route_clone_ptr(int64_t arg) {
+       LDKRoute arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Route_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_signing_pubkey() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_signing_pubkey());
-       return ret_conv;
+int64_t  CS_LDK_Route_clone(int64_t orig) {
+       LDKRoute orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKRoute ret_var = Route_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_quantity() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_quantity());
+int64_t  CS_LDK_Route_hash(int64_t o) {
+       LDKRoute o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Route_hash(&o_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_quantity() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_quantity());
+jboolean  CS_LDK_Route_eq(int64_t a, int64_t b) {
+       LDKRoute a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRoute b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_quantity() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_quantity());
+int64_t  CS_LDK_Route_get_total_fees(int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_metadata() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_metadata());
+int64_t  CS_LDK_Route_get_total_amount(int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_metadata() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_metadata());
+jstring  CS_LDK_Route_to_str(int64_t o) {
+       LDKRoute o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = Route_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_payer_metadata() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_metadata());
-       return ret_conv;
+int8_tArray  CS_LDK_Route_write(int64_t obj) {
+       LDKRoute obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Route_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_payer_id() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payer_id());
-       return ret_conv;
+int64_t  CS_LDK_Route_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = Route_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_duplicate_payment_id() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_duplicate_payment_id());
-       return ret_conv;
+void  CS_LDK_RouteParameters_free(int64_t this_obj) {
+       LDKRouteParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RouteParameters_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_paths() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_paths());
-       return ret_conv;
+int64_t  CS_LDK_RouteParameters_get_payment_params(int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_unexpected_paths() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_unexpected_paths());
-       return ret_conv;
+void  CS_LDK_RouteParameters_set_payment_params(int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentParameters_clone(&val_conv);
+       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_invalid_pay_info() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_invalid_pay_info());
+int64_t  CS_LDK_RouteParameters_get_final_value_msat(int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_creation_time() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_creation_time());
-       return ret_conv;
+void  CS_LDK_RouteParameters_set_final_value_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_payment_hash() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_payment_hash());
-       return ret_conv;
+int64_t  CS_LDK_RouteParameters_get_max_total_routing_fee_msat(int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteParameters_get_max_total_routing_fee_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Bolt12SemanticError_missing_signature() {
-       int32_t ret_conv = LDKBolt12SemanticError_to_cs(Bolt12SemanticError_missing_signature());
-       return ret_conv;
+void  CS_LDK_RouteParameters_set_max_total_routing_fee_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteParameters_set_max_total_routing_fee_msat(&this_ptr_conv, val_conv);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_free(int64_t this_obj) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RefundMaybeWithDerivedMetadataBuilder_free(this_obj_conv);
+int64_t  CS_LDK_RouteParameters_new(int64_t payment_params_arg, int64_t final_value_msat_arg, int64_t max_total_routing_fee_msat_arg) {
+       LDKPaymentParameters payment_params_arg_conv;
+       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
+       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
+       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
+       void* max_total_routing_fee_msat_arg_ptr = untag_ptr(max_total_routing_fee_msat_arg);
+       CHECK_ACCESS(max_total_routing_fee_msat_arg_ptr);
+       LDKCOption_u64Z max_total_routing_fee_msat_arg_conv = *(LDKCOption_u64Z*)(max_total_routing_fee_msat_arg_ptr);
+       max_total_routing_fee_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(max_total_routing_fee_msat_arg));
+       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg, max_total_routing_fee_msat_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t RefundMaybeWithDerivedMetadataBuilder_clone_ptr(LDKRefundMaybeWithDerivedMetadataBuilder *NONNULL_PTR arg) {
-       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(arg);
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone_ptr(int64_t arg) {
-       LDKRefundMaybeWithDerivedMetadataBuilder arg_conv;
+int64_t  CS_LDK_RouteParameters_clone_ptr(int64_t arg) {
+       LDKRouteParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RefundMaybeWithDerivedMetadataBuilder_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone(int64_t orig) {
-       LDKRefundMaybeWithDerivedMetadataBuilder orig_conv;
+int64_t  CS_LDK_RouteParameters_clone(int64_t orig) {
+       LDKRouteParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRefundMaybeWithDerivedMetadataBuilder ret_var = RefundMaybeWithDerivedMetadataBuilder_clone(&orig_conv);
+       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_new(int8_tArray metadata, int8_tArray payer_id, int64_t amount_msats) {
-       LDKCVec_u8Z metadata_ref;
-       metadata_ref.datalen = metadata->arr_len;
-       metadata_ref.data = MALLOC(metadata_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(metadata_ref.data, metadata->elems, metadata_ref.datalen); FREE(metadata);
-       LDKPublicKey payer_id_ref;
-       CHECK(payer_id->arr_len == 33);
-       memcpy(payer_id_ref.compressed_form, payer_id->elems, 33); FREE(payer_id);
-       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
-       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_new(metadata_ref, payer_id_ref, amount_msats);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_RouteParameters_hash(int64_t o) {
+       LDKRouteParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteParameters_hash(&o_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(int8_tArray node_id, int64_t expanded_key, int64_t entropy_source, int64_t amount_msats, int8_tArray payment_id) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKExpandedKey expanded_key_conv;
-       expanded_key_conv.inner = untag_ptr(expanded_key);
-       expanded_key_conv.is_owned = ptr_is_owned(expanded_key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(expanded_key_conv);
-       expanded_key_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ), "LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ");
-       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(node_id_ref, &expanded_key_conv, entropy_source_conv, amount_msats, payment_id_ref);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_RouteParameters_eq(int64_t a, int64_t b) {
+       LDKRouteParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRouteParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_description(int64_t this_arg, jstring description) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       RefundMaybeWithDerivedMetadataBuilder_description(this_arg_conv, description_conv);
+int64_t  CS_LDK_RouteParameters_from_payment_params_and_value(int64_t payment_params, int64_t final_value_msat) {
+       LDKPaymentParameters payment_params_conv;
+       payment_params_conv.inner = untag_ptr(payment_params);
+       payment_params_conv.is_owned = ptr_is_owned(payment_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_conv);
+       payment_params_conv = PaymentParameters_clone(&payment_params_conv);
+       LDKRouteParameters ret_var = RouteParameters_from_payment_params_and_value(payment_params_conv, final_value_msat);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(int64_t this_arg, int64_t absolute_expiry) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
+int64_t  CS_LDK_RouteParameters_set_max_path_length(int64_t this_arg, int64_t recipient_onion, jboolean is_keysend, int32_t best_block_height) {
+       LDKRouteParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(this_arg_conv, absolute_expiry);
+       this_arg_conv.is_owned = false;
+       LDKRecipientOnionFields recipient_onion_conv;
+       recipient_onion_conv.inner = untag_ptr(recipient_onion);
+       recipient_onion_conv.is_owned = ptr_is_owned(recipient_onion);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(recipient_onion_conv);
+       recipient_onion_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = RouteParameters_set_max_path_length(&this_arg_conv, &recipient_onion_conv, is_keysend, best_block_height);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_issuer(int64_t this_arg, jstring issuer) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr issuer_conv = str_ref_to_owned_c(issuer);
-       RefundMaybeWithDerivedMetadataBuilder_issuer(this_arg_conv, issuer_conv);
+int8_tArray  CS_LDK_RouteParameters_write(int64_t obj) {
+       LDKRouteParameters obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_path(int64_t this_arg, int64_t path) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKBlindedPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = BlindedPath_clone(&path_conv);
-       RefundMaybeWithDerivedMetadataBuilder_path(this_arg_conv, path_conv);
+int64_t  CS_LDK_RouteParameters_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = RouteParameters_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_chain(int64_t this_arg, int32_t network) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       RefundMaybeWithDerivedMetadataBuilder_chain(this_arg_conv, network_conv);
+void  CS_LDK_PaymentParameters_free(int64_t this_obj) {
+       LDKPaymentParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentParameters_free(this_obj_conv);
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_quantity(int64_t this_arg, int64_t quantity) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       RefundMaybeWithDerivedMetadataBuilder_quantity(this_arg_conv, quantity);
+int64_t  CS_LDK_PaymentParameters_get_payee(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_payer_note(int64_t this_arg, jstring payer_note) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKStr payer_note_conv = str_ref_to_owned_c(payer_note);
-       RefundMaybeWithDerivedMetadataBuilder_payer_note(this_arg_conv, payer_note_conv);
+void  CS_LDK_PaymentParameters_set_payee(int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
+       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
+       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_RefundMaybeWithDerivedMetadataBuilder_build(int64_t this_arg) {
-       LDKRefundMaybeWithDerivedMetadataBuilder this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv = RefundMaybeWithDerivedMetadataBuilder_clone(&this_arg_conv);
-       LDKCResult_RefundBolt12SemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12SemanticErrorZ), "LDKCResult_RefundBolt12SemanticErrorZ");
-       *ret_conv = RefundMaybeWithDerivedMetadataBuilder_build(this_arg_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_PaymentParameters_get_expiry_time(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Refund_free(int64_t this_obj) {
-       LDKRefund this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Refund_free(this_obj_conv);
+void  CS_LDK_PaymentParameters_set_expiry_time(int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
-       LDKRefund ret_var = Refund_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_Refund_clone_ptr(int64_t arg) {
-       LDKRefund arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
+int32_t  CS_LDK_PaymentParameters_get_max_total_cltv_expiry_delta(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_clone(int64_t orig) {
-       LDKRefund orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKRefund ret_var = Refund_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentParameters_set_max_total_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Refund_description(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_t  CS_LDK_PaymentParameters_get_max_path_count(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_absolute_expiry(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_PaymentParameters_set_max_path_count(int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_Refund_is_expired(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
+int8_t  CS_LDK_PaymentParameters_get_max_path_length(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = PaymentParameters_get_max_path_length(&this_ptr_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Refund_is_expired_no_std(int64_t this_arg, int64_t duration_since_epoch) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Refund_is_expired_no_std(&this_arg_conv, duration_since_epoch);
+void  CS_LDK_PaymentParameters_set_max_path_length(int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_path_length(&this_ptr_conv, val);
+}
+
+int8_t  CS_LDK_PaymentParameters_get_max_channel_saturation_power_of_half(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_issuer(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentParameters_set_max_channel_saturation_power_of_half(int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
-int64_tArray  CS_LDK_Refund_paths(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Refund_paths(&this_arg_conv);
+int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_channels(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
        int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-int8_tArray  CS_LDK_Refund_payer_metadata(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = Refund_payer_metadata(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
+void  CS_LDK_PaymentParameters_set_previously_failed_channels(int64_t this_ptr, int64_tArray val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       FREE(val);
+       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
 }
 
-int8_tArray  CS_LDK_Refund_chain(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, Refund_chain(&this_arg_conv).data, 32);
+int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_blinded_path_idxs(int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_blinded_path_idxs(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Refund_amount_msats(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
-       return ret_conv;
+void  CS_LDK_PaymentParameters_set_previously_failed_blinded_path_idxs(int64_t this_ptr, int64_tArray val) {
+       LDKPaymentParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       FREE(val);
+       PaymentParameters_set_previously_failed_blinded_path_idxs(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_Refund_features(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+int64_t  CS_LDK_PaymentParameters_new(int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_path_length_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg, int64_tArray previously_failed_blinded_path_idxs_arg) {
+       void* payee_arg_ptr = untag_ptr(payee_arg);
+       CHECK_ACCESS(payee_arg_ptr);
+       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
+       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
+       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
+       CHECK_ACCESS(expiry_time_arg_ptr);
+       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
+       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
+       LDKCVec_u64Z previously_failed_channels_arg_constr;
+       previously_failed_channels_arg_constr.datalen = previously_failed_channels_arg->arr_len;
+       if (previously_failed_channels_arg_constr.datalen > 0)
+               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               previously_failed_channels_arg_constr.data = NULL;
+       int64_t* previously_failed_channels_arg_vals = previously_failed_channels_arg->elems;
+       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
+               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
+               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
+       }
+       FREE(previously_failed_channels_arg);
+       LDKCVec_u64Z previously_failed_blinded_path_idxs_arg_constr;
+       previously_failed_blinded_path_idxs_arg_constr.datalen = previously_failed_blinded_path_idxs_arg->arr_len;
+       if (previously_failed_blinded_path_idxs_arg_constr.datalen > 0)
+               previously_failed_blinded_path_idxs_arg_constr.data = MALLOC(previously_failed_blinded_path_idxs_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               previously_failed_blinded_path_idxs_arg_constr.data = NULL;
+       int64_t* previously_failed_blinded_path_idxs_arg_vals = previously_failed_blinded_path_idxs_arg->elems;
+       for (size_t g = 0; g < previously_failed_blinded_path_idxs_arg_constr.datalen; g++) {
+               int64_t previously_failed_blinded_path_idxs_arg_conv_6 = previously_failed_blinded_path_idxs_arg_vals[g];
+               previously_failed_blinded_path_idxs_arg_constr.data[g] = previously_failed_blinded_path_idxs_arg_conv_6;
+       }
+       FREE(previously_failed_blinded_path_idxs_arg);
+       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_path_length_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr, previously_failed_blinded_path_idxs_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Refund_quantity(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Refund_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
+       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-int8_tArray  CS_LDK_Refund_payer_id(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Refund_payer_id(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
+int64_t  CS_LDK_PaymentParameters_clone_ptr(int64_t arg) {
+       LDKPaymentParameters arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Refund_payer_note(int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+int64_t  CS_LDK_PaymentParameters_clone(int64_t orig) {
+       LDKPaymentParameters orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Refund_hash(int64_t o) {
-       LDKRefund o_conv;
+int64_t  CS_LDK_PaymentParameters_hash(int64_t o) {
+       LDKPaymentParameters o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Refund_hash(&o_conv);
+       int64_t ret_conv = PaymentParameters_hash(&o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Refund_write(int64_t obj) {
-       LDKRefund obj_conv;
+jboolean  CS_LDK_PaymentParameters_eq(int64_t a, int64_t b) {
+       LDKPaymentParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPaymentParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_PaymentParameters_write(int64_t obj) {
+       LDKPaymentParameters obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Refund_write(&obj_conv);
+       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Refund_from_str(jstring s) {
-       LDKStr s_conv = str_ref_to_owned_c(s);
-       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
-       *ret_conv = Refund_from_str(s_conv);
+int64_t  CS_LDK_PaymentParameters_read(int8_tArray ser, int32_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
+       *ret_conv = PaymentParameters_read(ser_ref, arg);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-jstring  CS_LDK_Refund_to_str(int64_t o) {
-       LDKRefund o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = Refund_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_from_node_id(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK(payee_pubkey->arr_len == 33);
+       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
+       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_UtxoLookupError_clone(int64_t orig) {
-       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
-       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_clone(orig_conv));
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_for_keysend(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK(payee_pubkey->arr_len == 33);
+       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
+       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_UtxoLookupError_unknown_chain() {
-       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_chain());
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_from_bolt12_invoice(int64_t invoice) {
+       LDKBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_UtxoLookupError_unknown_tx() {
-       int32_t ret_conv = LDKUtxoLookupError_to_cs(UtxoLookupError_unknown_tx());
-       return ret_conv;
+int64_t  CS_LDK_PaymentParameters_blinded(int64_tArray blinded_route_hints) {
+       LDKCVec_BlindedPaymentPathZ blinded_route_hints_constr;
+       blinded_route_hints_constr.datalen = blinded_route_hints->arr_len;
+       if (blinded_route_hints_constr.datalen > 0)
+               blinded_route_hints_constr.data = MALLOC(blinded_route_hints_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               blinded_route_hints_constr.data = NULL;
+       int64_t* blinded_route_hints_vals = blinded_route_hints->elems;
+       for (size_t u = 0; u < blinded_route_hints_constr.datalen; u++) {
+               int64_t blinded_route_hints_conv_20 = blinded_route_hints_vals[u];
+               LDKBlindedPaymentPath blinded_route_hints_conv_20_conv;
+               blinded_route_hints_conv_20_conv.inner = untag_ptr(blinded_route_hints_conv_20);
+               blinded_route_hints_conv_20_conv.is_owned = ptr_is_owned(blinded_route_hints_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_route_hints_conv_20_conv);
+               blinded_route_hints_conv_20_conv = BlindedPaymentPath_clone(&blinded_route_hints_conv_20_conv);
+               blinded_route_hints_constr.data[u] = blinded_route_hints_conv_20_conv;
+       }
+       FREE(blinded_route_hints);
+       LDKPaymentParameters ret_var = PaymentParameters_blinded(blinded_route_hints_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_UtxoResult_free(int64_t this_ptr) {
+void  CS_LDK_Payee_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
+       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       UtxoResult_free(this_ptr_conv);
+       Payee_free(this_ptr_conv);
 }
 
-static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(arg);
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_UtxoResult_clone_ptr(int64_t arg) {
-       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
-       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_Payee_clone_ptr(int64_t arg) {
+       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
+       int64_t ret_conv = Payee_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_UtxoResult_clone(int64_t orig) {
-       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(orig_conv);
+int64_t  CS_LDK_Payee_clone(int64_t orig) {
+       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UtxoResult_sync(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
-       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_sync(a_conv);
+int64_t  CS_LDK_Payee_blinded(int64_tArray route_hints, int64_t features) {
+       LDKCVec_BlindedPaymentPathZ route_hints_constr;
+       route_hints_constr.datalen = route_hints->arr_len;
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKBlindedPaymentPath), "LDKCVec_BlindedPaymentPathZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = route_hints->elems;
+       for (size_t u = 0; u < route_hints_constr.datalen; u++) {
+               int64_t route_hints_conv_20 = route_hints_vals[u];
+               LDKBlindedPaymentPath route_hints_conv_20_conv;
+               route_hints_conv_20_conv.inner = untag_ptr(route_hints_conv_20);
+               route_hints_conv_20_conv.is_owned = ptr_is_owned(route_hints_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_20_conv);
+               route_hints_conv_20_conv = BlindedPaymentPath_clone(&route_hints_conv_20_conv);
+               route_hints_constr.data[u] = route_hints_conv_20_conv;
+       }
+       FREE(route_hints);
+       LDKBolt12InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UtxoResult_async(int64_t a) {
-       LDKUtxoFuture a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = UtxoFuture_clone(&a_conv);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_async(a_conv);
+int64_t  CS_LDK_Payee_clear(int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKCVec_RouteHintZ route_hints_constr;
+       route_hints_constr.datalen = route_hints->arr_len;
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = route_hints->elems;
+       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
+               int64_t route_hints_conv_11 = route_hints_vals[l];
+               LDKRouteHint route_hints_conv_11_conv;
+               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
+               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
+               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
+               route_hints_constr.data[l] = route_hints_conv_11_conv;
+       }
+       FREE(route_hints);
+       LDKBolt11InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_UtxoLookup_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       UtxoLookup_free(this_ptr_conv);
+int64_t  CS_LDK_Payee_hash(int64_t o) {
+       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
+       int64_t ret_conv = Payee_hash(o_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_UtxoFuture_free(int64_t this_obj) {
-       LDKUtxoFuture this_obj_conv;
+jboolean  CS_LDK_Payee_eq(int64_t a, int64_t b) {
+       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
+       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
+       jboolean ret_conv = Payee_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_RouteHint_write(int64_t obj) {
+       LDKRouteHint obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_RouteHint_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = RouteHint_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int8_tArray  CS_LDK_RouteHintHop_write(int64_t obj) {
+       LDKRouteHintHop obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_RouteHintHop_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = RouteHintHop_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_FirstHopCandidate_free(int64_t this_obj) {
+       LDKFirstHopCandidate this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UtxoFuture_free(this_obj_conv);
+       FirstHopCandidate_free(this_obj_conv);
 }
 
-static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
-       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
+static inline uint64_t FirstHopCandidate_clone_ptr(LDKFirstHopCandidate *NONNULL_PTR arg) {
+       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_UtxoFuture_clone_ptr(int64_t arg) {
-       LDKUtxoFuture arg_conv;
+int64_t  CS_LDK_FirstHopCandidate_clone_ptr(int64_t arg) {
+       LDKFirstHopCandidate arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
+       int64_t ret_conv = FirstHopCandidate_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UtxoFuture_clone(int64_t orig) {
-       LDKUtxoFuture orig_conv;
+int64_t  CS_LDK_FirstHopCandidate_clone(int64_t orig) {
+       LDKFirstHopCandidate orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
+       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_UtxoFuture_new() {
-       LDKUtxoFuture ret_var = UtxoFuture_new();
+void  CS_LDK_PublicHopCandidate_free(int64_t this_obj) {
+       LDKPublicHopCandidate this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PublicHopCandidate_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_PublicHopCandidate_get_short_channel_id(int64_t this_ptr) {
+       LDKPublicHopCandidate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = PublicHopCandidate_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_PublicHopCandidate_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKPublicHopCandidate this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PublicHopCandidate_set_short_channel_id(&this_ptr_conv, val);
+}
+
+static inline uint64_t PublicHopCandidate_clone_ptr(LDKPublicHopCandidate *NONNULL_PTR arg) {
+       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-void  CS_LDK_UtxoFuture_resolve_without_forwarding(int64_t this_arg, int64_t graph, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
+int64_t  CS_LDK_PublicHopCandidate_clone_ptr(int64_t arg) {
+       LDKPublicHopCandidate arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PublicHopCandidate_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_UtxoFuture_resolve(int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       LDKP2PGossipSync gossip_conv;
-       gossip_conv.inner = untag_ptr(gossip);
-       gossip_conv.is_owned = ptr_is_owned(gossip);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
-       gossip_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
+int64_t  CS_LDK_PublicHopCandidate_clone(int64_t orig) {
+       LDKPublicHopCandidate orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeId_free(int64_t this_obj) {
-       LDKNodeId this_obj_conv;
+void  CS_LDK_PrivateHopCandidate_free(int64_t this_obj) {
+       LDKPrivateHopCandidate this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeId_free(this_obj_conv);
+       PrivateHopCandidate_free(this_obj_conv);
 }
 
-static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
-       LDKNodeId ret_var = NodeId_clone(arg);
+static inline uint64_t PrivateHopCandidate_clone_ptr(LDKPrivateHopCandidate *NONNULL_PTR arg) {
+       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeId_clone_ptr(int64_t arg) {
-       LDKNodeId arg_conv;
+int64_t  CS_LDK_PrivateHopCandidate_clone_ptr(int64_t arg) {
+       LDKPrivateHopCandidate arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
+       int64_t ret_conv = PrivateHopCandidate_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeId_clone(int64_t orig) {
-       LDKNodeId orig_conv;
+int64_t  CS_LDK_PrivateHopCandidate_clone(int64_t orig) {
+       LDKPrivateHopCandidate orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeId ret_var = NodeId_clone(&orig_conv);
+       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NodeId_from_pubkey(int8_tArray pubkey) {
-       LDKPublicKey pubkey_ref;
-       CHECK(pubkey->arr_len == 33);
-       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
-       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
+void  CS_LDK_BlindedPathCandidate_free(int64_t this_obj) {
+       LDKBlindedPathCandidate this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedPathCandidate_free(this_obj_conv);
+}
+
+static inline uint64_t BlindedPathCandidate_clone_ptr(LDKBlindedPathCandidate *NONNULL_PTR arg) {
+       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-int64_t  CS_LDK_NodeId_from_slice(int8_tArray bytes) {
-       LDKu8slice bytes_ref;
-       bytes_ref.datalen = bytes->arr_len;
-       bytes_ref.data = bytes->elems;
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = NodeId_from_slice(bytes_ref);
-       FREE(bytes);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_NodeId_as_slice(int64_t this_arg) {
-       LDKNodeId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_NodeId_as_array(int64_t this_arg) {
-       LDKNodeId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, *NodeId_as_array(&this_arg_conv), 33);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_NodeId_as_pubkey(int64_t this_arg) {
-       LDKNodeId this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
-       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-jstring  CS_LDK_NodeId_to_str(int64_t o) {
-       LDKNodeId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NodeId_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_NodeId_hash(int64_t o) {
-       LDKNodeId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = NodeId_hash(&o_conv);
+int64_t  CS_LDK_BlindedPathCandidate_clone_ptr(int64_t arg) {
+       LDKBlindedPathCandidate arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedPathCandidate_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_NodeId_write(int64_t obj) {
-       LDKNodeId obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_NodeId_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = NodeId_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_BlindedPathCandidate_clone(int64_t orig) {
+       LDKBlindedPathCandidate orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_NetworkGraph_free(int64_t this_obj) {
-       LDKNetworkGraph this_obj_conv;
+void  CS_LDK_OneHopBlindedPathCandidate_free(int64_t this_obj) {
+       LDKOneHopBlindedPathCandidate this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NetworkGraph_free(this_obj_conv);
+       OneHopBlindedPathCandidate_free(this_obj_conv);
 }
 
-void  CS_LDK_ReadOnlyNetworkGraph_free(int64_t this_obj) {
-       LDKReadOnlyNetworkGraph this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ReadOnlyNetworkGraph_free(this_obj_conv);
+static inline uint64_t OneHopBlindedPathCandidate_clone_ptr(LDKOneHopBlindedPathCandidate *NONNULL_PTR arg) {
+       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_OneHopBlindedPathCandidate_clone_ptr(int64_t arg) {
+       LDKOneHopBlindedPathCandidate arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OneHopBlindedPathCandidate_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_NetworkUpdate_free(int64_t this_ptr) {
+int64_t  CS_LDK_OneHopBlindedPathCandidate_clone(int64_t orig) {
+       LDKOneHopBlindedPathCandidate orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_CandidateRouteHop_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
+       LDKCandidateRouteHop this_ptr_conv = *(LDKCandidateRouteHop*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       NetworkUpdate_free(this_ptr_conv);
+       CandidateRouteHop_free(this_ptr_conv);
 }
 
-static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(arg);
+static inline uint64_t CandidateRouteHop_clone_ptr(LDKCandidateRouteHop *NONNULL_PTR arg) {
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_NetworkUpdate_clone_ptr(int64_t arg) {
-       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
-       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
+int64_t  CS_LDK_CandidateRouteHop_clone_ptr(int64_t arg) {
+       LDKCandidateRouteHop* arg_conv = (LDKCandidateRouteHop*)untag_ptr(arg);
+       int64_t ret_conv = CandidateRouteHop_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NetworkUpdate_clone(int64_t orig) {
-       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(orig_conv);
+int64_t  CS_LDK_CandidateRouteHop_clone(int64_t orig) {
+       LDKCandidateRouteHop* orig_conv = (LDKCandidateRouteHop*)untag_ptr(orig);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_channel_update_message(int64_t msg) {
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
+int64_t  CS_LDK_CandidateRouteHop_first_hop(int64_t a) {
+       LDKFirstHopCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = FirstHopCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_first_hop(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_channel_failure(int64_t short_channel_id, jboolean is_permanent) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
+int64_t  CS_LDK_CandidateRouteHop_public_hop(int64_t a) {
+       LDKPublicHopCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = PublicHopCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_public_hop(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_node_failure(int8_tArray node_id, jboolean is_permanent) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
+int64_t  CS_LDK_CandidateRouteHop_private_hop(int64_t a) {
+       LDKPrivateHopCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = PrivateHopCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_private_hop(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_NetworkUpdate_eq(int64_t a, int64_t b) {
-       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
-       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
-       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_NetworkUpdate_write(int64_t obj) {
-       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_CandidateRouteHop_blinded(int64_t a) {
+       LDKBlindedPathCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = BlindedPathCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_blinded(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkUpdate_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
-       *ret_conv = NetworkUpdate_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_CandidateRouteHop_one_hop_blinded(int64_t a) {
+       LDKOneHopBlindedPathCandidate a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = OneHopBlindedPathCandidate_clone(&a_conv);
+       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
+       *ret_copy = CandidateRouteHop_one_hop_blinded(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_P2PGossipSync_free(int64_t this_obj) {
-       LDKP2PGossipSync this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       P2PGossipSync_free(this_obj_conv);
+int64_t  CS_LDK_CandidateRouteHop_globally_unique_short_channel_id(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = CandidateRouteHop_globally_unique_short_channel_id(this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_P2PGossipSync_new(int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
+int32_t  CS_LDK_CandidateRouteHop_cltv_expiry_delta(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       int32_t ret_conv = CandidateRouteHop_cltv_expiry_delta(this_arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_htlc_minimum_msat(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       int64_t ret_conv = CandidateRouteHop_htlc_minimum_msat(this_arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_fees(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKRoutingFees ret_var = CandidateRouteHop_fees(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_source(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKNodeId ret_var = CandidateRouteHop_source(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_CandidateRouteHop_target(int64_t this_arg) {
+       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
+       LDKNodeId ret_var = CandidateRouteHop_target(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_find_route(int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK(our_node_pubkey->arr_len == 33);
+       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = untag_ptr(network_graph);
        network_graph_conv.is_owned = ptr_is_owned(network_graph);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        network_graph_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+       LDKCVec_ChannelDetailsZ first_hops_constr;
+       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
+       if (first_hops != NULL) {
+               first_hops_constr.datalen = first_hops->arr_len;
+               if (first_hops_constr.datalen > 0)
+                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
+               else
+                       first_hops_constr.data = NULL;
+               int64_t* first_hops_vals = first_hops->elems;
+               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
+                       int64_t first_hops_conv_16 = first_hops_vals[q];
+                       LDKChannelDetails first_hops_conv_16_conv;
+                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
+                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
+                       first_hops_conv_16_conv.is_owned = false;
+                       first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
+               FREE(first_hops);
+               first_hops_ptr = &first_hops_constr;
        }
        void* logger_ptr = untag_ptr(logger);
        CHECK_ACCESS(logger_ptr);
@@ -69808,1206 +73564,1378 @@ int64_t  CS_LDK_P2PGossipSync_new(int64_t network_graph, int64_t utxo_lookup, in
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       void* scorer_ptr = untag_ptr(scorer);
+       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
+       LDKScoreLookUp* scorer_conv = (LDKScoreLookUp*)scorer_ptr;
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv.is_owned = false;
+       uint8_t random_seed_bytes_arr[32];
+       CHECK(random_seed_bytes->arr_len == 32);
+       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
+       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_P2PGossipSync_add_utxo_lookup(int64_t this_arg, int64_t utxo_lookup) {
-       LDKP2PGossipSync this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
+int64_t  CS_LDK_build_route_from_hops(int8_tArray our_node_pubkey, ptrArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK(our_node_pubkey->arr_len == 33);
+       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
+       LDKCVec_PublicKeyZ hops_constr;
+       hops_constr.datalen = hops->arr_len;
+       if (hops_constr.datalen > 0)
+               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               hops_constr.data = NULL;
+       int8_tArray* hops_vals = (void*) hops->elems;
+       for (size_t i = 0; i < hops_constr.datalen; i++) {
+               int8_tArray hops_conv_8 = hops_vals[i];
+               LDKPublicKey hops_conv_8_ref;
+               CHECK(hops_conv_8->arr_len == 33);
+               memcpy(hops_conv_8_ref.compressed_form, hops_conv_8->elems, 33); FREE(hops_conv_8);
+               hops_constr.data[i] = hops_conv_8_ref;
        }
-       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_conv);
+       FREE(hops);
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       uint8_t random_seed_bytes_arr[32];
+       CHECK(random_seed_bytes->arr_len == 32);
+       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NetworkGraph_handle_network_update(int64_t this_arg, int64_t network_update) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
-       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
+void  CS_LDK_ScoreLookUp_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreLookUp this_ptr_conv = *(LDKScoreLookUp*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreLookUp_free(this_ptr_conv);
 }
 
-int8_tArray  CS_LDK_NetworkGraph_get_chain_hash(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, NetworkGraph_get_chain_hash(&this_arg_conv).data, 32);
-       return ret_arr;
+void  CS_LDK_ScoreUpdate_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreUpdate this_ptr_conv = *(LDKScoreUpdate*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreUpdate_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_verify_node_announcement(int64_t msg) {
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_node_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_Score_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Score_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_verify_channel_announcement(int64_t msg) {
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_channel_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_LockableScore_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       LockableScore_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_P2PGossipSync_as_RoutingMessageHandler(int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+void  CS_LDK_WriteableScore_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WriteableScore_free(this_ptr_conv);
+}
+
+void  CS_LDK_MultiThreadedLockableScore_free(int64_t this_obj) {
+       LDKMultiThreadedLockableScore this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedLockableScore_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_MultiThreadedLockableScore_as_LockableScore(int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
-       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
+       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
+       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_P2PGossipSync_as_MessageSendEventsProvider(int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+int8_tArray  CS_LDK_MultiThreadedLockableScore_write(int64_t obj) {
+       LDKMultiThreadedLockableScore obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_MultiThreadedLockableScore_as_WriteableScore(int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
-       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
+       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
+       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ChannelUpdateInfo_free(int64_t this_obj) {
-       LDKChannelUpdateInfo this_obj_conv;
+int64_t  CS_LDK_MultiThreadedLockableScore_new(int64_t score) {
+       void* score_ptr = untag_ptr(score);
+       CHECK_ACCESS(score_ptr);
+       LDKScore score_conv = *(LDKScore*)(score_ptr);
+       if (score_conv.free == LDKScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScore_JCalls_cloned(&score_conv);
+       }
+       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_MultiThreadedScoreLockRead_free(int64_t this_obj) {
+       LDKMultiThreadedScoreLockRead this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUpdateInfo_free(this_obj_conv);
-}
-
-int32_t  CS_LDK_ChannelUpdateInfo_get_last_update(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
-       return ret_conv;
+       MultiThreadedScoreLockRead_free(this_obj_conv);
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_last_update(int64_t this_ptr, int32_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+void  CS_LDK_MultiThreadedScoreLockWrite_free(int64_t this_obj) {
+       LDKMultiThreadedScoreLockWrite this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedScoreLockWrite_free(this_obj_conv);
 }
 
-jboolean  CS_LDK_ChannelUpdateInfo_get_enabled(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_MultiThreadedScoreLockRead_as_ScoreLookUp(int64_t this_arg) {
+       LDKMultiThreadedScoreLockRead this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = MultiThreadedScoreLockRead_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_enabled(int64_t this_ptr, jboolean val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+int8_tArray  CS_LDK_MultiThreadedScoreLockWrite_write(int64_t obj) {
+       LDKMultiThreadedScoreLockWrite obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = MultiThreadedScoreLockWrite_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int16_t  CS_LDK_ChannelUpdateInfo_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_MultiThreadedScoreLockWrite_as_ScoreUpdate(int64_t this_arg) {
+       LDKMultiThreadedScoreLockWrite this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = MultiThreadedScoreLockWrite_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+void  CS_LDK_ChannelUsage_free(int64_t this_obj) {
+       LDKChannelUsage this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUsage_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelUsage_get_amount_msat(int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
+void  CS_LDK_ChannelUsage_set_amount_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelUsage_get_inflight_htlc_msat(int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ChannelUpdateInfo_get_fees(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ChannelUpdateInfo_set_fees(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
+void  CS_LDK_ChannelUsage_set_inflight_htlc_msat(int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
+       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_get_last_update_message(int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelUsage_get_effective_capacity(int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_ChannelUpdateInfo_set_last_update_message(int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
+void  CS_LDK_ChannelUsage_set_effective_capacity(int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdate val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdate_clone(&val_conv);
-       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
+       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
+       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_new(int32_t last_update_arg, jboolean enabled_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int64_t last_update_message_arg) {
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       LDKChannelUpdate last_update_message_arg_conv;
-       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
-       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
-       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_message_arg_conv);
+int64_t  CS_LDK_ChannelUsage_new(int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
+       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
+       CHECK_ACCESS(effective_capacity_arg_ptr);
+       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
+       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
+       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
+static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
+       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelUpdateInfo_clone_ptr(int64_t arg) {
-       LDKChannelUpdateInfo arg_conv;
+int64_t  CS_LDK_ChannelUsage_clone_ptr(int64_t arg) {
+       LDKChannelUsage arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_clone(int64_t orig) {
-       LDKChannelUpdateInfo orig_conv;
+int64_t  CS_LDK_ChannelUsage_clone(int64_t orig) {
+       LDKChannelUsage orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
+       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelUpdateInfo_eq(int64_t a, int64_t b) {
-       LDKChannelUpdateInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelUpdateInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
+void  CS_LDK_FixedPenaltyScorer_free(int64_t this_obj) {
+       LDKFixedPenaltyScorer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       FixedPenaltyScorer_free(this_obj_conv);
 }
 
-jstring  CS_LDK_ChannelUpdateInfo_to_str(int64_t o) {
-       LDKChannelUpdateInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ChannelUpdateInfo_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_FixedPenaltyScorer_clone_ptr(int64_t arg) {
+       LDKFixedPenaltyScorer arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelUpdateInfo_write(int64_t obj) {
-       LDKChannelUpdateInfo obj_conv;
+int64_t  CS_LDK_FixedPenaltyScorer_clone(int64_t orig) {
+       LDKFixedPenaltyScorer orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FixedPenaltyScorer_with_penalty(int64_t penalty_msat) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreLookUp(int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = FixedPenaltyScorer_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreUpdate(int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = FixedPenaltyScorer_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_FixedPenaltyScorer_write(int64_t obj) {
+       LDKFixedPenaltyScorer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelUpdateInfo_read(int8_tArray ser) {
+int64_t  CS_LDK_FixedPenaltyScorer_read(int8_tArray ser, int64_t arg) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
-       *ret_conv = ChannelUpdateInfo_read(ser_ref);
+       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
+       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelInfo_free(int64_t this_obj) {
-       LDKChannelInfo this_obj_conv;
+void  CS_LDK_ProbabilisticScorer_free(int64_t this_obj) {
+       LDKProbabilisticScorer this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelInfo_free(this_obj_conv);
+       ProbabilisticScorer_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_features(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_free(int64_t this_obj) {
+       LDKProbabilisticScoringFeeParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ProbabilisticScoringFeeParameters_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_features(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       ChannelInfo_set_features(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_node_one(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_node_one(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_one_to_two(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_one_to_two(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_node_two(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_node_two(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_two_to_one(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_two_to_one(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_capacity_sats(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_capacity_sats(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ChannelInfo_get_announcement_message(int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ChannelInfo_set_announcement_message(int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelAnnouncement_clone(&val_conv);
-       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
-}
-
-static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
-       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_ChannelInfo_clone_ptr(int64_t arg) {
-       LDKChannelInfo arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_ChannelInfo_clone(int64_t orig) {
-       LDKChannelInfo orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
 }
 
-jboolean  CS_LDK_ChannelInfo_eq(int64_t a, int64_t b) {
-       LDKChannelInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelInfo_get_directional_info(int64_t this_arg, int8_t channel_flags) {
-       LDKChannelInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
 }
 
-jstring  CS_LDK_ChannelInfo_to_str(int64_t o) {
-       LDKChannelInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = ChannelInfo_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+jboolean  CS_LDK_ProbabilisticScoringFeeParameters_get_linear_success_probability(int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ProbabilisticScoringFeeParameters_get_linear_success_probability(&this_ptr_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelInfo_write(int64_t obj) {
-       LDKChannelInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ChannelInfo_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
-       *ret_conv = ChannelInfo_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_DirectedChannelInfo_free(int64_t this_obj) {
-       LDKDirectedChannelInfo this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DirectedChannelInfo_free(this_obj_conv);
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_linear_success_probability(int64_t this_ptr, jboolean val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_linear_success_probability(&this_ptr_conv, val);
 }
 
-static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_DirectedChannelInfo_clone_ptr(int64_t arg) {
-       LDKDirectedChannelInfo arg_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone_ptr(int64_t arg) {
+       LDKProbabilisticScoringFeeParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_clone(int64_t orig) {
-       LDKDirectedChannelInfo orig_conv;
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone(int64_t orig) {
+       LDKProbabilisticScoringFeeParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_channel(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
+int64_t  CS_LDK_ProbabilisticScoringFeeParameters_default() {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_effective_capacity(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned(int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_source(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned_from_list(int64_t this_arg, int64_tArray node_ids) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNodeId ret_var = DirectedChannelInfo_source(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_NodeIdZ node_ids_constr;
+       node_ids_constr.datalen = node_ids->arr_len;
+       if (node_ids_constr.datalen > 0)
+               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
+       else
+               node_ids_constr.data = NULL;
+       int64_t* node_ids_vals = node_ids->elems;
+       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
+               int64_t node_ids_conv_8 = node_ids_vals[i];
+               LDKNodeId node_ids_conv_8_conv;
+               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
+               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
+               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
+               node_ids_constr.data[i] = node_ids_conv_8_conv;
+       }
+       FREE(node_ids);
+       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
 }
 
-int64_t  CS_LDK_DirectedChannelInfo_target(int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+void  CS_LDK_ProbabilisticScoringFeeParameters_remove_banned(int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNodeId ret_var = DirectedChannelInfo_target(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
 }
 
-void  CS_LDK_EffectiveCapacity_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EffectiveCapacity_free(this_ptr_conv);
+void  CS_LDK_ProbabilisticScoringFeeParameters_set_manual_penalty(int64_t this_arg, int64_t node_id, int64_t penalty) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
 }
 
-static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ProbabilisticScoringFeeParameters_remove_manual_penalty(int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
 }
-int64_t  CS_LDK_EffectiveCapacity_clone_ptr(int64_t arg) {
-       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
-       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
-       return ret_conv;
+
+void  CS_LDK_ProbabilisticScoringFeeParameters_clear_manual_penalties(int64_t this_arg) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
 }
 
-int64_t  CS_LDK_EffectiveCapacity_clone(int64_t orig) {
-       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_exact_liquidity(int64_t liquidity_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_advertised_max_htlc(int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_total(int64_t capacity_msat, int64_t htlc_maximum_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_infinite() {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_infinite();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_hint_max_htlc(int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_unknown() {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_unknown();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_EffectiveCapacity_as_msat(int64_t this_arg) {
-       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
-       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_RoutingFees_free(int64_t this_obj) {
-       LDKRoutingFees this_obj_conv;
+void  CS_LDK_ProbabilisticScoringDecayParameters_free(int64_t this_obj) {
+       LDKProbabilisticScoringDecayParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RoutingFees_free(this_obj_conv);
+       ProbabilisticScoringDecayParameters_free(this_obj_conv);
 }
 
-int32_t  CS_LDK_RoutingFees_get_base_msat(int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_RoutingFees_set_base_msat(int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RoutingFees_set_base_msat(&this_ptr_conv, val);
+       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_RoutingFees_get_proportional_millionths(int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_RoutingFees_set_proportional_millionths(int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
+void  CS_LDK_ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
+       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_RoutingFees_new(int32_t base_msat_arg, int32_t proportional_millionths_arg) {
-       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_new(int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_RoutingFees_eq(int64_t a, int64_t b) {
-       LDKRoutingFees a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoutingFees b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
-       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RoutingFees_clone_ptr(int64_t arg) {
-       LDKRoutingFees arg_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone_ptr(int64_t arg) {
+       LDKProbabilisticScoringDecayParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RoutingFees_clone(int64_t orig) {
-       LDKRoutingFees orig_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone(int64_t orig) {
+       LDKProbabilisticScoringDecayParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RoutingFees_hash(int64_t o) {
-       LDKRoutingFees o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ProbabilisticScoringDecayParameters_default() {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_RoutingFees_write(int64_t obj) {
-       LDKRoutingFees obj_conv;
+int64_t  CS_LDK_ProbabilisticScorer_new(int64_t decay_params, int64_t network_graph, int64_t logger) {
+       LDKProbabilisticScoringDecayParameters decay_params_conv;
+       decay_params_conv.inner = untag_ptr(decay_params);
+       decay_params_conv.is_owned = ptr_is_owned(decay_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
+       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ProbabilisticScorer_debug_log_liquidity_stats(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_estimated_channel_liquidity_range(int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
+       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_payment_success_probability(int64_t this_arg, int64_t scid, int64_t target, int64_t amount_msat, int64_t params) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKProbabilisticScoringFeeParameters params_conv;
+       params_conv.inner = untag_ptr(params);
+       params_conv.is_owned = ptr_is_owned(params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
+       params_conv.is_owned = false;
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = ProbabilisticScorer_historical_estimated_payment_success_probability(&this_arg_conv, scid, &target_conv, amount_msat, &params_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_as_ScoreLookUp(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ProbabilisticScorer_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_as_ScoreUpdate(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = ProbabilisticScorer_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_ProbabilisticScorer_as_Score(int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
+       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_ProbabilisticScorer_write(int64_t obj) {
+       LDKProbabilisticScorer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RoutingFees_read(int8_tArray ser) {
+int64_t  CS_LDK_ProbabilisticScorer_read(int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
-       *ret_conv = RoutingFees_read(ser_ref);
+       LDKProbabilisticScoringDecayParameters arg_a_conv;
+       arg_a_conv.inner = untag_ptr(arg_a);
+       arg_a_conv.is_owned = ptr_is_owned(arg_a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
+       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
+       LDKNetworkGraph arg_b_conv;
+       arg_b_conv.inner = untag_ptr(arg_b);
+       arg_b_conv.is_owned = ptr_is_owned(arg_b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
+       arg_b_conv.is_owned = false;
+       void* arg_c_ptr = untag_ptr(arg_c);
+       CHECK_ACCESS(arg_c_ptr);
+       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
+       if (arg_c_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&arg_c_conv);
+       }
+       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
+       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeAnnouncementInfo_free(int64_t this_obj) {
-       LDKNodeAnnouncementInfo this_obj_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_free(int64_t this_obj) {
+       LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAnnouncementInfo_free(this_obj_conv);
+       DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_get_features(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
+       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_features(int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures val_conv;
+       LDKOutPoint val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeFeatures_clone(&val_conv);
-       NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_per_commitment_point(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
 }
 
-int32_t  CS_LDK_NodeAnnouncementInfo_get_last_update(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int16_t  CS_LDK_DelayedPaymentOutputDescriptor_get_to_self_delay(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
+       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_last_update(int64_t this_ptr, int32_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_to_self_delay(int64_t this_ptr, int16_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
+       DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
-int8_tArray  CS_LDK_NodeAnnouncementInfo_get_rgb(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_output(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(3, __LINE__);
-       memcpy(ret_arr->elems, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv), 3);
-       return ret_arr;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_rgb(int64_t this_ptr, int8_tArray val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThreeBytes val_ref;
-       CHECK(val->arr_len == 3);
-       memcpy(val_ref.data, val->elems, 3); FREE(val);
-       NodeAnnouncementInfo_set_rgb(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_get_alias(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_revocation_pubkey(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAnnouncementInfo_get_alias(&this_ptr_conv);
+       LDKRevocationKey ret_var = DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_alias(int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_revocation_pubkey(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias val_conv;
+       LDKRevocationKey val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAlias_clone(&val_conv);
-       NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
+       val_conv = RevocationKey_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_get_announcement_message(int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
+       LDKChannelTransactionParameters ret_var = DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeAnnouncementInfo_set_announcement_message(int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement val_conv;
+       LDKChannelTransactionParameters val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncement_clone(&val_conv);
-       NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_new(int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_t announcement_message_arg) {
-       LDKNodeFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
-       LDKThreeBytes rgb_arg_ref;
-       CHECK(rgb_arg->arr_len == 3);
-       memcpy(rgb_arg_ref.data, rgb_arg->elems, 3); FREE(rgb_arg);
-       LDKNodeAlias alias_arg_conv;
-       alias_arg_conv.inner = untag_ptr(alias_arg);
-       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
-       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
-       LDKNodeAnnouncement announcement_message_arg_conv;
-       announcement_message_arg_conv.inner = untag_ptr(announcement_message_arg);
-       announcement_message_arg_conv.is_owned = ptr_is_owned(announcement_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
-       announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, announcement_message_arg_conv);
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_new(int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int64_t revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       LDKPublicKey per_commitment_point_arg_ref;
+       CHECK(per_commitment_point_arg->arr_len == 33);
+       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKRevocationKey revocation_pubkey_arg_conv;
+       revocation_pubkey_arg_conv.inner = untag_ptr(revocation_pubkey_arg);
+       revocation_pubkey_arg_conv.is_owned = ptr_is_owned(revocation_pubkey_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(revocation_pubkey_arg_conv);
+       revocation_pubkey_arg_conv = RevocationKey_clone(&revocation_pubkey_arg_conv);
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK(channel_keys_id_arg->arr_len == 32);
+       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
+       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
+       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
+       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
+       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeAnnouncementInfo_clone_ptr(int64_t arg) {
-       LDKNodeAnnouncementInfo arg_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone_ptr(int64_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_clone(int64_t orig) {
-       LDKNodeAnnouncementInfo orig_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone(int64_t orig) {
+       LDKDelayedPaymentOutputDescriptor orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_NodeAnnouncementInfo_eq(int64_t a, int64_t b) {
-       LDKNodeAnnouncementInfo a_conv;
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_hash(int64_t o) {
+       LDKDelayedPaymentOutputDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_DelayedPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeAnnouncementInfo b_conv;
+       LDKDelayedPaymentOutputDescriptor b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeAnnouncementInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_tArray  CS_LDK_NodeAnnouncementInfo_addresses(int64_t this_arg) {
-       LDKNodeAnnouncementInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementInfo_addresses(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t p = 0; p < ret_var.datalen; p++) {
-               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
-               *ret_conv_15_copy = ret_var.data[p];
-               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
-               ret_arr_ptr[p] = ret_conv_15_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_NodeAnnouncementInfo_write(int64_t obj) {
-       LDKNodeAnnouncementInfo obj_conv;
+int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_write(int64_t obj) {
+       LDKDelayedPaymentOutputDescriptor obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_NodeAnnouncementInfo_read(int8_tArray ser) {
+int64_t  CS_LDK_DelayedPaymentOutputDescriptor_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
-       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeAlias_free(int64_t this_obj) {
-       LDKNodeAlias this_obj_conv;
+void  CS_LDK_StaticPaymentOutputDescriptor_free(int64_t this_obj) {
+       LDKStaticPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAlias_free(this_obj_conv);
+       StaticPaymentOutputDescriptor_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_NodeAlias_get_a(int64_t this_ptr) {
-       LDKNodeAlias this_ptr_conv;
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *NodeAlias_get_a(&this_ptr_conv), 32);
+       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_StaticPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_output(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+void  CS_LDK_StaticPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_NodeAlias_set_a(int64_t this_ptr, int8_tArray val) {
-       LDKNodeAlias this_ptr_conv;
+void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -71015,11951 +74943,13271 @@ void  CS_LDK_NodeAlias_set_a(int64_t this_ptr, int8_tArray val) {
        LDKThirtyTwoBytes val_ref;
        CHECK(val->arr_len == 32);
        memcpy(val_ref.data, val->elems, 32); FREE(val);
-       NodeAlias_set_a(&this_ptr_conv, val_ref);
+       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_NodeAlias_new(int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK(a_arg->arr_len == 32);
-       memcpy(a_arg_ref.data, a_arg->elems, 32); FREE(a_arg);
-       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = StaticPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
-       LDKNodeAlias ret_var = NodeAlias_clone(arg);
+void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       StaticPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_new(int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK(channel_keys_id_arg->arr_len == 32);
+       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
+       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
+       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
+       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
+       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeAlias_clone_ptr(int64_t arg) {
-       LDKNodeAlias arg_conv;
+
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone_ptr(int64_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
+       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeAlias_clone(int64_t orig) {
-       LDKNodeAlias orig_conv;
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone(int64_t orig) {
+       LDKStaticPaymentOutputDescriptor orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NodeAlias_hash(int64_t o) {
-       LDKNodeAlias o_conv;
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_hash(int64_t o) {
+       LDKStaticPaymentOutputDescriptor o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = NodeAlias_hash(&o_conv);
+       int64_t ret_conv = StaticPaymentOutputDescriptor_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_NodeAlias_eq(int64_t a, int64_t b) {
-       LDKNodeAlias a_conv;
+jboolean  CS_LDK_StaticPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
+       LDKStaticPaymentOutputDescriptor a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeAlias b_conv;
+       LDKStaticPaymentOutputDescriptor b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
+       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-jstring  CS_LDK_NodeAlias_to_str(int64_t o) {
-       LDKNodeAlias o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NodeAlias_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_witness_script(int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = StaticPaymentOutputDescriptor_witness_script(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_max_witness_length(int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_max_witness_length(&this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_NodeAlias_write(int64_t obj) {
-       LDKNodeAlias obj_conv;
+int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_write(int64_t obj) {
+       LDKStaticPaymentOutputDescriptor obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_conv);
+       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_NodeAlias_read(int8_tArray ser) {
+int64_t  CS_LDK_StaticPaymentOutputDescriptor_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
-       *ret_conv = NodeAlias_read(ser_ref);
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_NodeInfo_free(int64_t this_obj) {
-       LDKNodeInfo this_obj_conv;
+void  CS_LDK_SpendableOutputDescriptor_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SpendableOutputDescriptor_free(this_ptr_conv);
+}
+
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_SpendableOutputDescriptor_clone_ptr(int64_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
+       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_clone(int64_t orig) {
+       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_static_output(int64_t outpoint, int64_t output, int8_tArray channel_keys_id) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       void* output_ptr = untag_ptr(output);
+       CHECK_ACCESS(output_ptr);
+       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
+       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
+       LDKThirtyTwoBytes channel_keys_id_ref;
+       CHECK(channel_keys_id->arr_len == 32);
+       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv, channel_keys_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_delayed_payment_output(int64_t a) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_static_payment_output(int64_t a) {
+       LDKStaticPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_hash(int64_t o) {
+       LDKSpendableOutputDescriptor* o_conv = (LDKSpendableOutputDescriptor*)untag_ptr(o);
+       int64_t ret_conv = SpendableOutputDescriptor_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_SpendableOutputDescriptor_eq(int64_t a, int64_t b) {
+       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
+       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
+       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_SpendableOutputDescriptor_write(int64_t obj) {
+       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_SpendableOutputDescriptor_create_spendable_outputs_psbt(int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = descriptors->arr_len;
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = descriptors->elems;
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       FREE(descriptors);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = outputs->arr_len;
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = outputs->elems;
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       FREE(outputs);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = change_destination_script->arr_len;
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(change_destination_script_ref.data, change_destination_script->elems, change_destination_script_ref.datalen); FREE(change_destination_script);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ), "LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ");
+       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_ChannelDerivationParameters_free(int64_t this_obj) {
+       LDKChannelDerivationParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeInfo_free(this_obj_conv);
+       ChannelDerivationParameters_free(this_obj_conv);
 }
 
-int64_tArray  CS_LDK_NodeInfo_get_channels(int64_t this_ptr) {
-       LDKNodeInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_get_value_satoshis(int64_t this_ptr) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = NodeInfo_get_channels(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
-       }
-       
-       FREE(ret_var.data);
+       int64_t ret_conv = ChannelDerivationParameters_get_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelDerivationParameters_set_value_satoshis(int64_t this_ptr, int64_t val) {
+       LDKChannelDerivationParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelDerivationParameters_set_value_satoshis(&this_ptr_conv, val);
+}
+
+int8_tArray  CS_LDK_ChannelDerivationParameters_get_keys_id(int64_t this_ptr) {
+       LDKChannelDerivationParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ChannelDerivationParameters_get_keys_id(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_NodeInfo_set_channels(int64_t this_ptr, int64_tArray val) {
-       LDKNodeInfo this_ptr_conv;
+void  CS_LDK_ChannelDerivationParameters_set_keys_id(int64_t this_ptr, int8_tArray val) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       FREE(val);
-       NodeInfo_set_channels(&this_ptr_conv, val_constr);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ChannelDerivationParameters_set_keys_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_NodeInfo_get_announcement_info(int64_t this_ptr) {
-       LDKNodeInfo this_ptr_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_get_transaction_parameters(int64_t this_ptr) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
+       LDKChannelTransactionParameters ret_var = ChannelDerivationParameters_get_transaction_parameters(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_NodeInfo_set_announcement_info(int64_t this_ptr, int64_t val) {
-       LDKNodeInfo this_ptr_conv;
+void  CS_LDK_ChannelDerivationParameters_set_transaction_parameters(int64_t this_ptr, int64_t val) {
+       LDKChannelDerivationParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo val_conv;
+       LDKChannelTransactionParameters val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncementInfo_clone(&val_conv);
-       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       ChannelDerivationParameters_set_transaction_parameters(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_NodeInfo_new(int64_tArray channels_arg, int64_t announcement_info_arg) {
-       LDKCVec_u64Z channels_arg_constr;
-       channels_arg_constr.datalen = channels_arg->arr_len;
-       if (channels_arg_constr.datalen > 0)
-               channels_arg_constr.data = MALLOC(channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               channels_arg_constr.data = NULL;
-       int64_t* channels_arg_vals = channels_arg->elems;
-       for (size_t g = 0; g < channels_arg_constr.datalen; g++) {
-               int64_t channels_arg_conv_6 = channels_arg_vals[g];
-               channels_arg_constr.data[g] = channels_arg_conv_6;
-       }
-       FREE(channels_arg);
-       LDKNodeAnnouncementInfo announcement_info_arg_conv;
-       announcement_info_arg_conv.inner = untag_ptr(announcement_info_arg);
-       announcement_info_arg_conv.is_owned = ptr_is_owned(announcement_info_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
-       announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
-       LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, announcement_info_arg_conv);
+int64_t  CS_LDK_ChannelDerivationParameters_new(int64_t value_satoshis_arg, int8_tArray keys_id_arg, int64_t transaction_parameters_arg) {
+       LDKThirtyTwoBytes keys_id_arg_ref;
+       CHECK(keys_id_arg->arr_len == 32);
+       memcpy(keys_id_arg_ref.data, keys_id_arg->elems, 32); FREE(keys_id_arg);
+       LDKChannelTransactionParameters transaction_parameters_arg_conv;
+       transaction_parameters_arg_conv.inner = untag_ptr(transaction_parameters_arg);
+       transaction_parameters_arg_conv.is_owned = ptr_is_owned(transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(transaction_parameters_arg_conv);
+       transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&transaction_parameters_arg_conv);
+       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_new(value_satoshis_arg, keys_id_arg_ref, transaction_parameters_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
-       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+static inline uint64_t ChannelDerivationParameters_clone_ptr(LDKChannelDerivationParameters *NONNULL_PTR arg) {
+       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_NodeInfo_clone_ptr(int64_t arg) {
-       LDKNodeInfo arg_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_clone_ptr(int64_t arg) {
+       LDKChannelDerivationParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelDerivationParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NodeInfo_clone(int64_t orig) {
-       LDKNodeInfo orig_conv;
+int64_t  CS_LDK_ChannelDerivationParameters_clone(int64_t orig) {
+       LDKChannelDerivationParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
+       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_NodeInfo_eq(int64_t a, int64_t b) {
-       LDKNodeInfo a_conv;
+jboolean  CS_LDK_ChannelDerivationParameters_eq(int64_t a, int64_t b) {
+       LDKChannelDerivationParameters a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeInfo b_conv;
+       LDKChannelDerivationParameters b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_NodeInfo_is_tor_only(int64_t this_arg) {
-       LDKNodeInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = NodeInfo_is_tor_only(&this_arg_conv);
-       return ret_conv;
-}
-
-jstring  CS_LDK_NodeInfo_to_str(int64_t o) {
-       LDKNodeInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NodeInfo_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+       jboolean ret_conv = ChannelDerivationParameters_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_NodeInfo_write(int64_t obj) {
-       LDKNodeInfo obj_conv;
+int8_tArray  CS_LDK_ChannelDerivationParameters_write(int64_t obj) {
+       LDKChannelDerivationParameters obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ChannelDerivationParameters_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_NodeInfo_read(int8_tArray ser) {
+int64_t  CS_LDK_ChannelDerivationParameters_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
-       *ret_conv = NodeInfo_read(ser_ref);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = ChannelDerivationParameters_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_NetworkGraph_write(int64_t obj) {
-       LDKNetworkGraph obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
+void  CS_LDK_HTLCDescriptor_free(int64_t this_obj) {
+       LDKHTLCDescriptor this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       HTLCDescriptor_free(this_obj_conv);
+}
 
-int64_t  CS_LDK_NetworkGraph_read(int8_tArray ser, int64_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
-       if (arg_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_conv);
-       }
-       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
-       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_HTLCDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelDerivationParameters ret_var = HTLCDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-jstring  CS_LDK_NetworkGraph_to_str(int64_t o) {
-       LDKNetworkGraph o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = NetworkGraph_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+void  CS_LDK_HTLCDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelDerivationParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelDerivationParameters_clone(&val_conv);
+       HTLCDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_HTLCDescriptor_get_commitment_txid(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *HTLCDescriptor_get_commitment_txid(&this_ptr_conv), 32);
+       return ret_arr;
+}
+
+void  CS_LDK_HTLCDescriptor_set_commitment_txid(int64_t this_ptr, int8_tArray val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       HTLCDescriptor_set_commitment_txid(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_get_per_commitment_number(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = HTLCDescriptor_get_per_commitment_number(&this_ptr_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_NetworkGraph_new(int32_t network, int64_t logger) {
-       LDKNetwork network_conv = LDKNetwork_from_cs(network);
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
+void  CS_LDK_HTLCDescriptor_set_per_commitment_number(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       HTLCDescriptor_set_per_commitment_number(&this_ptr_conv, val);
+}
+
+int8_tArray  CS_LDK_HTLCDescriptor_get_per_commitment_point(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, HTLCDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_HTLCDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       HTLCDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+}
+
+int32_t  CS_LDK_HTLCDescriptor_get_feerate_per_kw(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = HTLCDescriptor_get_feerate_per_kw(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_HTLCDescriptor_set_feerate_per_kw(int64_t this_ptr, int32_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       HTLCDescriptor_set_feerate_per_kw(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_get_htlc(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKHTLCOutputInCommitment ret_var = HTLCDescriptor_get_htlc(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_read_only(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
+void  CS_LDK_HTLCDescriptor_set_htlc(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKHTLCOutputInCommitment val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = HTLCOutputInCommitment_clone(&val_conv);
+       HTLCDescriptor_set_htlc(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_get_preimage(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = HTLCDescriptor_get_preimage(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_HTLCDescriptor_set_preimage(int64_t this_ptr, int64_t val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
+       HTLCDescriptor_set_preimage(&this_ptr_conv, val_conv);
+}
+
+int8_tArray  CS_LDK_HTLCDescriptor_get_counterparty_sig(int64_t this_ptr) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
+       memcpy(ret_arr->elems, HTLCDescriptor_get_counterparty_sig(&this_ptr_conv).compact_form, 64);
+       return ret_arr;
+}
+
+void  CS_LDK_HTLCDescriptor_set_counterparty_sig(int64_t this_ptr, int8_tArray val) {
+       LDKHTLCDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKECDSASignature val_ref;
+       CHECK(val->arr_len == 64);
+       memcpy(val_ref.compact_form, val->elems, 64); FREE(val);
+       HTLCDescriptor_set_counterparty_sig(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_HTLCDescriptor_new(int64_t channel_derivation_parameters_arg, int8_tArray commitment_txid_arg, int64_t per_commitment_number_arg, int8_tArray per_commitment_point_arg, int32_t feerate_per_kw_arg, int64_t htlc_arg, int64_t preimage_arg, int8_tArray counterparty_sig_arg) {
+       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
+       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
+       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
+       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
+       LDKThirtyTwoBytes commitment_txid_arg_ref;
+       CHECK(commitment_txid_arg->arr_len == 32);
+       memcpy(commitment_txid_arg_ref.data, commitment_txid_arg->elems, 32); FREE(commitment_txid_arg);
+       LDKPublicKey per_commitment_point_arg_ref;
+       CHECK(per_commitment_point_arg->arr_len == 33);
+       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
+       LDKHTLCOutputInCommitment htlc_arg_conv;
+       htlc_arg_conv.inner = untag_ptr(htlc_arg);
+       htlc_arg_conv.is_owned = ptr_is_owned(htlc_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_arg_conv);
+       htlc_arg_conv = HTLCOutputInCommitment_clone(&htlc_arg_conv);
+       void* preimage_arg_ptr = untag_ptr(preimage_arg);
+       CHECK_ACCESS(preimage_arg_ptr);
+       LDKCOption_ThirtyTwoBytesZ preimage_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(preimage_arg_ptr);
+       preimage_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(preimage_arg));
+       LDKECDSASignature counterparty_sig_arg_ref;
+       CHECK(counterparty_sig_arg->arr_len == 64);
+       memcpy(counterparty_sig_arg_ref.compact_form, counterparty_sig_arg->elems, 64); FREE(counterparty_sig_arg);
+       LDKHTLCDescriptor ret_var = HTLCDescriptor_new(channel_derivation_parameters_arg_conv, commitment_txid_arg_ref, per_commitment_number_arg, per_commitment_point_arg_ref, feerate_per_kw_arg, htlc_arg_conv, preimage_arg_conv, counterparty_sig_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_get_last_rapid_gossip_sync_timestamp(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t HTLCDescriptor_clone_ptr(LDKHTLCDescriptor *NONNULL_PTR arg) {
+       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_HTLCDescriptor_clone_ptr(int64_t arg) {
+       LDKHTLCDescriptor arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = HTLCDescriptor_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_NetworkGraph_set_last_rapid_gossip_sync_timestamp(int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
+int64_t  CS_LDK_HTLCDescriptor_clone(int64_t orig) {
+       LDKHTLCDescriptor orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_node_from_announcement(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_HTLCDescriptor_eq(int64_t a, int64_t b) {
+       LDKHTLCDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKHTLCDescriptor b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = HTLCDescriptor_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_node_from_unsigned_announcement(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_HTLCDescriptor_write(int64_t obj) {
+       LDKHTLCDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = HTLCDescriptor_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+int64_t  CS_LDK_HTLCDescriptor_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = HTLCDescriptor_read(ser_ref);
+       FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_from_announcement_no_lookup(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_outpoint(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+       LDKOutPoint ret_var = HTLCDescriptor_outpoint(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_from_unsigned_announcement(int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_previous_utxo(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKUnsignedChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
-       return tag_ptr(ret_conv, true);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = HTLCDescriptor_previous_utxo(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-int64_t  CS_LDK_NetworkGraph_add_channel_from_partial_announcement(int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_unsigned_tx_input(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = ChannelFeatures_clone(&features_conv);
-       LDKPublicKey node_id_1_ref;
-       CHECK(node_id_1->arr_len == 33);
-       memcpy(node_id_1_ref.compressed_form, node_id_1->elems, 33); FREE(node_id_1);
-       LDKPublicKey node_id_2_ref;
-       CHECK(node_id_2->arr_len == 33);
-       memcpy(node_id_2_ref.compressed_form, node_id_2->elems, 33); FREE(node_id_2);
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
-       return tag_ptr(ret_conv, true);
+       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
+       *ret_ref = HTLCDescriptor_unsigned_tx_input(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_NetworkGraph_channel_failed_permanent(int64_t this_arg, int64_t short_channel_id) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_tx_output(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = HTLCDescriptor_tx_output(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_NetworkGraph_node_failed_permanent(int64_t this_arg, int8_tArray node_id) {
-       LDKNetworkGraph this_arg_conv;
+int8_tArray  CS_LDK_HTLCDescriptor_witness_script(int64_t this_arg) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
+       LDKCVec_u8Z ret_var = HTLCDescriptor_witness_script(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking(int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+int8_tArray  CS_LDK_HTLCDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature, int8_tArray witness_script) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
+       LDKECDSASignature signature_ref;
+       CHECK(signature->arr_len == 64);
+       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
+       LDKu8slice witness_script_ref;
+       witness_script_ref.datalen = witness_script->arr_len;
+       witness_script_ref.data = witness_script->elems;
+       LDKWitness ret_var = HTLCDescriptor_tx_input_witness(&this_arg_conv, signature_ref, witness_script_ref);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       Witness_free(ret_var);
+       FREE(witness_script);
+       return ret_arr;
 }
 
-void  CS_LDK_NetworkGraph_remove_stale_channels_and_tracking_with_time(int64_t this_arg, int64_t current_time_unix) {
-       LDKNetworkGraph this_arg_conv;
+int64_t  CS_LDK_HTLCDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
+       LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
+       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = HTLCDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ChannelSigner_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ChannelSigner_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_NetworkGraph_update_channel_unsigned(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_NetworkGraph_verify_channel_update(int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_verify_channel_update(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_ReadOnlyNetworkGraph_channel(int64_t this_arg, int64_t short_channel_id) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_channels(int64_t this_arg) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = ReadOnlyNetworkGraph_list_channels(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ReadOnlyNetworkGraph_node(int64_t this_arg, int64_t node_id) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_tArray  CS_LDK_ReadOnlyNetworkGraph_list_nodes(int64_t this_arg) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NodeIdZ ret_var = ReadOnlyNetworkGraph_list_nodes(&this_arg_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               LDKNodeId ret_conv_8_var = ret_var.data[i];
-               int64_t ret_conv_8_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
-               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
-               ret_arr_ptr[i] = ret_conv_8_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ReadOnlyNetworkGraph_get_addresses(int64_t this_arg, int8_tArray pubkey) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPublicKey pubkey_ref;
-       CHECK(pubkey->arr_len == 33);
-       memcpy(pubkey_ref.compressed_form, pubkey->elems, 33); FREE(pubkey);
-       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
-       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_DefaultRouter_free(int64_t this_obj) {
-       LDKDefaultRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultRouter_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_DefaultRouter_new(int64_t network_graph, int64_t logger, int64_t entropy_source, int64_t scorer, int64_t score_params) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
-       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLockableScore_JCalls_cloned(&scorer_conv);
-       }
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
-       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, entropy_source_conv, scorer_conv, score_params_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_Recipient_clone(int64_t orig) {
+       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
+       int32_t ret_conv = LDKRecipient_to_cs(Recipient_clone(orig_conv));
+       return ret_conv;
 }
 
-int64_t  CS_LDK_DefaultRouter_as_Router(int64_t this_arg) {
-       LDKDefaultRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
-       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_Recipient_node() {
+       int32_t ret_conv = LDKRecipient_to_cs(Recipient_node());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_DefaultRouter_as_MessageRouter(int64_t this_arg) {
-       LDKDefaultRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
-       *ret_ret = DefaultRouter_as_MessageRouter(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_Recipient_phantom_node() {
+       int32_t ret_conv = LDKRecipient_to_cs(Recipient_phantom_node());
+       return ret_conv;
 }
 
-void  CS_LDK_Router_free(int64_t this_ptr) {
+void  CS_LDK_EntropySource_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
+       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       Router_free(this_ptr_conv);
-}
-
-void  CS_LDK_ScorerAccountingForInFlightHtlcs_free(int64_t this_obj) {
-       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_new(int64_t scorer, int64_t inflight_htlcs) {
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKScoreLookUp scorer_conv = *(LDKScoreLookUp*)(scorer_ptr);
-       if (scorer_conv.free == LDKScoreLookUp_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScoreLookUp_JCalls_cloned(&scorer_conv);
-       }
-       LDKInFlightHtlcs inflight_htlcs_conv;
-       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
-       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
-       inflight_htlcs_conv.is_owned = false;
-       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(int64_t this_arg) {
-       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-void  CS_LDK_InFlightHtlcs_free(int64_t this_obj) {
-       LDKInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InFlightHtlcs_free(this_obj_conv);
-}
-
-static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_InFlightHtlcs_clone_ptr(int64_t arg) {
-       LDKInFlightHtlcs arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_InFlightHtlcs_clone(int64_t orig) {
-       LDKInFlightHtlcs orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InFlightHtlcs_new() {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_InFlightHtlcs_process_path(int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv.is_owned = false;
-       LDKPublicKey payer_node_id_ref;
-       CHECK(payer_node_id->arr_len == 33);
-       memcpy(payer_node_id_ref.compressed_form, payer_node_id->elems, 33); FREE(payer_node_id);
-       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
+       EntropySource_free(this_ptr_conv);
 }
 
-void  CS_LDK_InFlightHtlcs_add_inflight_htlc(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
+void  CS_LDK_NodeSigner_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeSigner_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_InFlightHtlcs_used_liquidity_msat(int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_OutputSpender_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOutputSpender this_ptr_conv = *(LDKOutputSpender*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OutputSpender_free(this_ptr_conv);
 }
 
-int8_tArray  CS_LDK_InFlightHtlcs_write(int64_t obj) {
-       LDKInFlightHtlcs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_SignerProvider_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignerProvider_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_InFlightHtlcs_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
-       *ret_conv = InFlightHtlcs_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ChangeDestinationSource_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKChangeDestinationSource this_ptr_conv = *(LDKChangeDestinationSource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ChangeDestinationSource_free(this_ptr_conv);
 }
 
-void  CS_LDK_RouteHop_free(int64_t this_obj) {
-       LDKRouteHop this_obj_conv;
+void  CS_LDK_InMemorySigner_free(int64_t this_obj) {
+       LDKInMemorySigner this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHop_free(this_obj_conv);
+       InMemorySigner_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_RouteHop_get_pubkey(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_funding_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, RouteHop_get_pubkey(&this_ptr_conv).compressed_form, 33);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_funding_key(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_pubkey(int64_t this_ptr, int8_tArray val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_funding_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_node_features(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_revocation_base_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_revocation_base_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_node_features(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_revocation_base_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeFeatures_clone(&val_conv);
-       RouteHop_set_node_features(&this_ptr_conv, val_conv);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_short_channel_id(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_payment_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_payment_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_payment_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_short_channel_id(&this_ptr_conv, val);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_channel_features(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_delayed_payment_base_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_channel_features(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_delayed_payment_base_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHop_get_fee_msat(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_htlc_base_key(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_htlc_base_key(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_fee_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_htlc_base_key(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_fee_msat(&this_ptr_conv, val);
+       LDKSecretKey val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
+       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
 }
 
-int32_t  CS_LDK_RouteHop_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+int8_tArray  CS_LDK_InMemorySigner_get_commitment_seed(int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *InMemorySigner_get_commitment_seed(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHop_set_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
-       LDKRouteHop this_ptr_conv;
+void  CS_LDK_InMemorySigner_set_commitment_seed(int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
 }
 
-jboolean  CS_LDK_RouteHop_get_maybe_announced_channel(int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       jboolean ret_conv = RouteHop_get_maybe_announced_channel(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_RouteHop_set_maybe_announced_channel(int64_t this_ptr, jboolean val) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteHop_set_maybe_announced_channel(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_RouteHop_new(int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg, jboolean maybe_announced_channel_arg) {
-       LDKPublicKey pubkey_arg_ref;
-       CHECK(pubkey_arg->arr_len == 33);
-       memcpy(pubkey_arg_ref.compressed_form, pubkey_arg->elems, 33); FREE(pubkey_arg);
-       LDKNodeFeatures node_features_arg_conv;
-       node_features_arg_conv.inner = untag_ptr(node_features_arg);
-       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
-       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
-       LDKChannelFeatures channel_features_arg_conv;
-       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
-       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
-       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
-       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
-       LDKRouteHop ret_var = RouteHop_clone(arg);
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteHop_clone_ptr(int64_t arg) {
-       LDKRouteHop arg_conv;
+int64_t  CS_LDK_InMemorySigner_clone_ptr(int64_t arg) {
+       LDKInMemorySigner arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteHop_clone(int64_t orig) {
-       LDKRouteHop orig_conv;
+int64_t  CS_LDK_InMemorySigner_clone(int64_t orig) {
+       LDKInMemorySigner orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
+       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHop_hash(int64_t o) {
-       LDKRouteHop o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_RouteHop_eq(int64_t a, int64_t b) {
-       LDKRouteHop a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRouteHop b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_RouteHop_write(int64_t obj) {
-       LDKRouteHop obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_RouteHop_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
-       *ret_conv = RouteHop_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_BlindedTail_free(int64_t this_obj) {
-       LDKBlindedTail this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedTail_free(this_obj_conv);
-}
-
-int64_tArray  CS_LDK_BlindedTail_get_hops(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t m = 0; m < ret_var.datalen; m++) {
-               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
-               int64_t ret_conv_12_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
-               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
-               ret_arr_ptr[m] = ret_conv_12_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-void  CS_LDK_BlindedTail_set_hops(int64_t this_ptr, int64_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               LDKBlindedHop val_conv_12_conv;
-               val_conv_12_conv.inner = untag_ptr(val_conv_12);
-               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
-               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
-               val_constr.data[m] = val_conv_12_conv;
-       }
-       FREE(val);
-       BlindedTail_set_hops(&this_ptr_conv, val_constr);
-}
-
-int8_tArray  CS_LDK_BlindedTail_get_blinding_point(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_BlindedTail_set_blinding_point(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_InMemorySigner_new(int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
+       LDKSecretKey funding_key_ref;
+       CHECK(funding_key->arr_len == 32);
+       memcpy(funding_key_ref.bytes, funding_key->elems, 32); FREE(funding_key);
+       LDKSecretKey revocation_base_key_ref;
+       CHECK(revocation_base_key->arr_len == 32);
+       memcpy(revocation_base_key_ref.bytes, revocation_base_key->elems, 32); FREE(revocation_base_key);
+       LDKSecretKey payment_key_ref;
+       CHECK(payment_key->arr_len == 32);
+       memcpy(payment_key_ref.bytes, payment_key->elems, 32); FREE(payment_key);
+       LDKSecretKey delayed_payment_base_key_ref;
+       CHECK(delayed_payment_base_key->arr_len == 32);
+       memcpy(delayed_payment_base_key_ref.bytes, delayed_payment_base_key->elems, 32); FREE(delayed_payment_base_key);
+       LDKSecretKey htlc_base_key_ref;
+       CHECK(htlc_base_key->arr_len == 32);
+       memcpy(htlc_base_key_ref.bytes, htlc_base_key->elems, 32); FREE(htlc_base_key);
+       LDKThirtyTwoBytes commitment_seed_ref;
+       CHECK(commitment_seed->arr_len == 32);
+       memcpy(commitment_seed_ref.data, commitment_seed->elems, 32); FREE(commitment_seed);
+       LDKThirtyTwoBytes channel_keys_id_ref;
+       CHECK(channel_keys_id->arr_len == 32);
+       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
+       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
+       CHECK(rand_bytes_unique_start->arr_len == 32);
+       memcpy(rand_bytes_unique_start_ref.data, rand_bytes_unique_start->elems, 32); FREE(rand_bytes_unique_start);
+       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_BlindedTail_get_excess_final_cltv_expiry_delta(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_counterparty_pubkeys(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedTail_set_excess_final_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
+int64_t  CS_LDK_InMemorySigner_counterparty_selected_contest_delay(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedTail_get_final_value_msat(int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_holder_selected_contest_delay(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_BlindedTail_set_final_value_msat(int64_t this_ptr, int64_t val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+int64_t  CS_LDK_InMemorySigner_is_outbound(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = InMemorySigner_is_outbound(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedTail_new(int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
-       LDKCVec_BlindedHopZ hops_arg_constr;
-       hops_arg_constr.datalen = hops_arg->arr_len;
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = hops_arg->elems;
-       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
-               int64_t hops_arg_conv_12 = hops_arg_vals[m];
-               LDKBlindedHop hops_arg_conv_12_conv;
-               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
-               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
-               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
-               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
-       }
-       FREE(hops_arg);
-       LDKPublicKey blinding_point_arg_ref;
-       CHECK(blinding_point_arg->arr_len == 33);
-       memcpy(blinding_point_arg_ref.compressed_form, blinding_point_arg->elems, 33); FREE(blinding_point_arg);
-       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
+int64_t  CS_LDK_InMemorySigner_funding_outpoint(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
-       LDKBlindedTail ret_var = BlindedTail_clone(arg);
+int64_t  CS_LDK_InMemorySigner_get_channel_parameters(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedTail_clone_ptr(int64_t arg) {
-       LDKBlindedTail arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_BlindedTail_clone(int64_t orig) {
-       LDKBlindedTail orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
+int64_t  CS_LDK_InMemorySigner_channel_type_features(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedTail_hash(int64_t o) {
-       LDKBlindedTail o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_sign_counterparty_payment_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = spend_tx->arr_len;
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
+       spend_tx_ref.data_is_owned = true;
+       LDKStaticPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
+       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_BlindedTail_eq(int64_t a, int64_t b) {
-       LDKBlindedTail a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedTail b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
-       return ret_conv;
+int64_t  CS_LDK_InMemorySigner_sign_dynamic_p2wsh_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = spend_tx->arr_len;
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
+       spend_tx_ref.data_is_owned = true;
+       LDKDelayedPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
+       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_BlindedTail_write(int64_t obj) {
-       LDKBlindedTail obj_conv;
+int64_t  CS_LDK_InMemorySigner_as_EntropySource(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_InMemorySigner_as_ChannelSigner(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
+       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_InMemorySigner_as_EcdsaChannelSigner(int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_InMemorySigner_write(int64_t obj) {
+       LDKInMemorySigner obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_BlindedTail_read(int8_tArray ser) {
+int64_t  CS_LDK_InMemorySigner_read(int8_tArray ser, int64_t arg) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
-       *ret_conv = BlindedTail_read(ser_ref);
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
+       if (arg_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_Path_free(int64_t this_obj) {
-       LDKPath this_obj_conv;
+void  CS_LDK_KeysManager_free(int64_t this_obj) {
+       LDKKeysManager this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Path_free(this_obj_conv);
+       KeysManager_free(this_obj_conv);
 }
 
-int64_tArray  CS_LDK_Path_get_hops(int64_t this_ptr) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ ret_var = Path_get_hops(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t k = 0; k < ret_var.datalen; k++) {
-               LDKRouteHop ret_conv_10_var = ret_var.data[k];
-               int64_t ret_conv_10_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
-               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
-               ret_arr_ptr[k] = ret_conv_10_ref;
-       }
-       
-       FREE(ret_var.data);
+int64_t  CS_LDK_KeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
+       uint8_t seed_arr[32];
+       CHECK(seed->arr_len == 32);
+       memcpy(seed_arr, seed->elems, 32); FREE(seed);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int8_tArray  CS_LDK_KeysManager_get_node_secret_key(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, KeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
        return ret_arr;
 }
 
-void  CS_LDK_Path_set_hops(int64_t this_ptr, int64_tArray val) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t k = 0; k < val_constr.datalen; k++) {
-               int64_t val_conv_10 = val_vals[k];
-               LDKRouteHop val_conv_10_conv;
-               val_conv_10_conv.inner = untag_ptr(val_conv_10);
-               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
-               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
-               val_constr.data[k] = val_conv_10_conv;
-       }
-       FREE(val);
-       Path_set_hops(&this_ptr_conv, val_constr);
-}
-
-int64_t  CS_LDK_Path_get_blinded_tail(int64_t this_ptr) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+int64_t  CS_LDK_KeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       uint8_t params_arr[32];
+       CHECK(params->arr_len == 32);
+       memcpy(params_arr, params->elems, 32); FREE(params);
+       uint8_t (*params_ref)[32] = &params_arr;
+       LDKInMemorySigner ret_var = KeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Path_set_blinded_tail(int64_t this_ptr, int64_t val) {
-       LDKPath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedTail val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedTail_clone(&val_conv);
-       Path_set_blinded_tail(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_Path_new(int64_tArray hops_arg, int64_t blinded_tail_arg) {
-       LDKCVec_RouteHopZ hops_arg_constr;
-       hops_arg_constr.datalen = hops_arg->arr_len;
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+int64_t  CS_LDK_KeysManager_sign_spendable_outputs_psbt(int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = descriptors->arr_len;
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
        else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = hops_arg->elems;
-       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
-               int64_t hops_arg_conv_10 = hops_arg_vals[k];
-               LDKRouteHop hops_arg_conv_10_conv;
-               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
-               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
-               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
-               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = descriptors->elems;
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
        }
-       FREE(hops_arg);
-       LDKBlindedTail blinded_tail_arg_conv;
-       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
-       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
-       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
-       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       FREE(descriptors);
+       LDKCVec_u8Z psbt_ref;
+       psbt_ref.datalen = psbt->arr_len;
+       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(psbt_ref.data, psbt->elems, psbt_ref.datalen); FREE(psbt);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
-       LDKPath ret_var = Path_clone(arg);
+int64_t  CS_LDK_KeysManager_as_EntropySource(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_KeysManager_as_NodeSigner(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_KeysManager_as_OutputSpender(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
+       *ret_ret = KeysManager_as_OutputSpender(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_KeysManager_as_SignerProvider(int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_PhantomKeysManager_free(int64_t this_obj) {
+       LDKPhantomKeysManager this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PhantomKeysManager_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_EntropySource(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_NodeSigner(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_OutputSpender(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
+       *ret_ret = PhantomKeysManager_as_OutputSpender(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_as_SignerProvider(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_PhantomKeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
+       uint8_t seed_arr[32];
+       CHECK(seed->arr_len == 32);
+       memcpy(seed_arr, seed->elems, 32); FREE(seed);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       uint8_t cross_node_seed_arr[32];
+       CHECK(cross_node_seed->arr_len == 32);
+       memcpy(cross_node_seed_arr, cross_node_seed->elems, 32); FREE(cross_node_seed);
+       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
+       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Path_clone_ptr(int64_t arg) {
-       LDKPath arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Path_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Path_clone(int64_t orig) {
-       LDKPath orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKPath ret_var = Path_clone(&orig_conv);
+int64_t  CS_LDK_PhantomKeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       uint8_t params_arr[32];
+       CHECK(params->arr_len == 32);
+       memcpy(params_arr, params->elems, 32); FREE(params);
+       uint8_t (*params_ref)[32] = &params_arr;
+       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Path_hash(int64_t o) {
-       LDKPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Path_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Path_eq(int64_t a, int64_t b) {
-       LDKPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKPath b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Path_fee_msat(int64_t this_arg) {
-       LDKPath this_arg_conv;
+int8_tArray  CS_LDK_PhantomKeysManager_get_node_secret_key(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Path_final_value_msat(int64_t this_arg) {
-       LDKPath this_arg_conv;
+int8_tArray  CS_LDK_PhantomKeysManager_get_phantom_node_secret_key(int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes, 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Path_final_cltv_expiry_delta(int64_t this_arg) {
-       LDKPath this_arg_conv;
+void  CS_LDK_RandomBytes_free(int64_t this_obj) {
+       LDKRandomBytes this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RandomBytes_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_RandomBytes_new(int8_tArray seed) {
+       LDKThirtyTwoBytes seed_ref;
+       CHECK(seed->arr_len == 32);
+       memcpy(seed_ref.data, seed->elems, 32); FREE(seed);
+       LDKRandomBytes ret_var = RandomBytes_new(seed_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_RandomBytes_as_EntropySource(int64_t this_arg) {
+       LDKRandomBytes this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = RandomBytes_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+static inline uint64_t EcdsaChannelSigner_clone_ptr(LDKEcdsaChannelSigner *NONNULL_PTR arg) {
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = EcdsaChannelSigner_clone(arg);
+       return tag_ptr(ret_ret, true);
+}
+int64_t  CS_LDK_EcdsaChannelSigner_clone_ptr(int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKEcdsaChannelSigner* arg_conv = (LDKEcdsaChannelSigner*)arg_ptr;
+       int64_t ret_conv = EcdsaChannelSigner_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_EcdsaChannelSigner_clone(int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKEcdsaChannelSigner* orig_conv = (LDKEcdsaChannelSigner*)orig_ptr;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = EcdsaChannelSigner_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_EcdsaChannelSigner_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EcdsaChannelSigner_free(this_ptr_conv);
+}
+
+void  CS_LDK_AsyncPaymentsMessageHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKAsyncPaymentsMessageHandler this_ptr_conv = *(LDKAsyncPaymentsMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       AsyncPaymentsMessageHandler_free(this_ptr_conv);
+}
+
+void  CS_LDK_AsyncPaymentsMessage_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKAsyncPaymentsMessage this_ptr_conv = *(LDKAsyncPaymentsMessage*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       AsyncPaymentsMessage_free(this_ptr_conv);
+}
+
+static inline uint64_t AsyncPaymentsMessage_clone_ptr(LDKAsyncPaymentsMessage *NONNULL_PTR arg) {
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_AsyncPaymentsMessage_clone_ptr(int64_t arg) {
+       LDKAsyncPaymentsMessage* arg_conv = (LDKAsyncPaymentsMessage*)untag_ptr(arg);
+       int64_t ret_conv = AsyncPaymentsMessage_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_Route_free(int64_t this_obj) {
-       LDKRoute this_obj_conv;
+int64_t  CS_LDK_AsyncPaymentsMessage_clone(int64_t orig) {
+       LDKAsyncPaymentsMessage* orig_conv = (LDKAsyncPaymentsMessage*)untag_ptr(orig);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_AsyncPaymentsMessage_held_htlc_available(int64_t a) {
+       LDKHeldHtlcAvailable a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = HeldHtlcAvailable_clone(&a_conv);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_held_htlc_available(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_AsyncPaymentsMessage_release_held_htlc(int64_t a) {
+       LDKReleaseHeldHtlc a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = ReleaseHeldHtlc_clone(&a_conv);
+       LDKAsyncPaymentsMessage *ret_copy = MALLOC(sizeof(LDKAsyncPaymentsMessage), "LDKAsyncPaymentsMessage");
+       *ret_copy = AsyncPaymentsMessage_release_held_htlc(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_HeldHtlcAvailable_free(int64_t this_obj) {
+       LDKHeldHtlcAvailable this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Route_free(this_obj_conv);
+       HeldHtlcAvailable_free(this_obj_conv);
 }
 
-int64_tArray  CS_LDK_Route_get_paths(int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
+int8_tArray  CS_LDK_HeldHtlcAvailable_get_payment_release_secret(int64_t this_ptr) {
+       LDKHeldHtlcAvailable this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ ret_var = Route_get_paths(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               LDKPath ret_conv_6_var = ret_var.data[g];
-               int64_t ret_conv_6_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
-               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
-               ret_arr_ptr[g] = ret_conv_6_ref;
-       }
-       
-       FREE(ret_var.data);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *HeldHtlcAvailable_get_payment_release_secret(&this_ptr_conv), 32);
        return ret_arr;
 }
 
-void  CS_LDK_Route_set_paths(int64_t this_ptr, int64_tArray val) {
-       LDKRoute this_ptr_conv;
+void  CS_LDK_HeldHtlcAvailable_set_payment_release_secret(int64_t this_ptr, int8_tArray val) {
+       LDKHeldHtlcAvailable this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               LDKPath val_conv_6_conv;
-               val_conv_6_conv.inner = untag_ptr(val_conv_6);
-               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
-               val_conv_6_conv = Path_clone(&val_conv_6_conv);
-               val_constr.data[g] = val_conv_6_conv;
-       }
-       FREE(val);
-       Route_set_paths(&this_ptr_conv, val_constr);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       HeldHtlcAvailable_set_payment_release_secret(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_Route_get_route_params(int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRouteParameters ret_var = Route_get_route_params(&this_ptr_conv);
+int64_t  CS_LDK_HeldHtlcAvailable_new(int8_tArray payment_release_secret_arg) {
+       LDKThirtyTwoBytes payment_release_secret_arg_ref;
+       CHECK(payment_release_secret_arg->arr_len == 32);
+       memcpy(payment_release_secret_arg_ref.data, payment_release_secret_arg->elems, 32); FREE(payment_release_secret_arg);
+       LDKHeldHtlcAvailable ret_var = HeldHtlcAvailable_new(payment_release_secret_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Route_set_route_params(int64_t this_ptr, int64_t val) {
-       LDKRoute this_ptr_conv;
+static inline uint64_t HeldHtlcAvailable_clone_ptr(LDKHeldHtlcAvailable *NONNULL_PTR arg) {
+       LDKHeldHtlcAvailable ret_var = HeldHtlcAvailable_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_HeldHtlcAvailable_clone_ptr(int64_t arg) {
+       LDKHeldHtlcAvailable arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = HeldHtlcAvailable_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_HeldHtlcAvailable_clone(int64_t orig) {
+       LDKHeldHtlcAvailable orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKHeldHtlcAvailable ret_var = HeldHtlcAvailable_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ReleaseHeldHtlc_free(int64_t this_obj) {
+       LDKReleaseHeldHtlc this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReleaseHeldHtlc_free(this_obj_conv);
+}
+
+int8_tArray  CS_LDK_ReleaseHeldHtlc_get_payment_release_secret(int64_t this_ptr) {
+       LDKReleaseHeldHtlc this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRouteParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RouteParameters_clone(&val_conv);
-       Route_set_route_params(&this_ptr_conv, val_conv);
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ReleaseHeldHtlc_get_payment_release_secret(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Route_new(int64_tArray paths_arg, int64_t route_params_arg) {
-       LDKCVec_PathZ paths_arg_constr;
-       paths_arg_constr.datalen = paths_arg->arr_len;
-       if (paths_arg_constr.datalen > 0)
-               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               paths_arg_constr.data = NULL;
-       int64_t* paths_arg_vals = paths_arg->elems;
-       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
-               int64_t paths_arg_conv_6 = paths_arg_vals[g];
-               LDKPath paths_arg_conv_6_conv;
-               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
-               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
-               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
-               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
-       }
-       FREE(paths_arg);
-       LDKRouteParameters route_params_arg_conv;
-       route_params_arg_conv.inner = untag_ptr(route_params_arg);
-       route_params_arg_conv.is_owned = ptr_is_owned(route_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_arg_conv);
-       route_params_arg_conv = RouteParameters_clone(&route_params_arg_conv);
-       LDKRoute ret_var = Route_new(paths_arg_constr, route_params_arg_conv);
+void  CS_LDK_ReleaseHeldHtlc_set_payment_release_secret(int64_t this_ptr, int8_tArray val) {
+       LDKReleaseHeldHtlc this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ReleaseHeldHtlc_set_payment_release_secret(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_ReleaseHeldHtlc_new(int8_tArray payment_release_secret_arg) {
+       LDKThirtyTwoBytes payment_release_secret_arg_ref;
+       CHECK(payment_release_secret_arg->arr_len == 32);
+       memcpy(payment_release_secret_arg_ref.data, payment_release_secret_arg->elems, 32); FREE(payment_release_secret_arg);
+       LDKReleaseHeldHtlc ret_var = ReleaseHeldHtlc_new(payment_release_secret_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
-       LDKRoute ret_var = Route_clone(arg);
+static inline uint64_t ReleaseHeldHtlc_clone_ptr(LDKReleaseHeldHtlc *NONNULL_PTR arg) {
+       LDKReleaseHeldHtlc ret_var = ReleaseHeldHtlc_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Route_clone_ptr(int64_t arg) {
-       LDKRoute arg_conv;
+int64_t  CS_LDK_ReleaseHeldHtlc_clone_ptr(int64_t arg) {
+       LDKReleaseHeldHtlc arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Route_clone_ptr(&arg_conv);
+       int64_t ret_conv = ReleaseHeldHtlc_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Route_clone(int64_t orig) {
-       LDKRoute orig_conv;
+int64_t  CS_LDK_ReleaseHeldHtlc_clone(int64_t orig) {
+       LDKReleaseHeldHtlc orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRoute ret_var = Route_clone(&orig_conv);
+       LDKReleaseHeldHtlc ret_var = ReleaseHeldHtlc_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Route_hash(int64_t o) {
-       LDKRoute o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Route_hash(&o_conv);
-       return ret_conv;
+int64_t  CS_LDK_ReleaseHeldHtlc_as_OnionMessageContents(int64_t this_arg) {
+       LDKReleaseHeldHtlc this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = ReleaseHeldHtlc_as_OnionMessageContents(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-jboolean  CS_LDK_Route_eq(int64_t a, int64_t b) {
-       LDKRoute a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoute b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Route_get_total_fees(int64_t this_arg) {
-       LDKRoute this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Route_get_total_amount(int64_t this_arg) {
-       LDKRoute this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
-       return ret_conv;
-}
-
-jstring  CS_LDK_Route_to_str(int64_t o) {
-       LDKRoute o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       LDKStr ret_str = Route_to_str(&o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_Route_write(int64_t obj) {
-       LDKRoute obj_conv;
+int8_tArray  CS_LDK_HeldHtlcAvailable_write(int64_t obj) {
+       LDKHeldHtlcAvailable obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Route_write(&obj_conv);
+       LDKCVec_u8Z ret_var = HeldHtlcAvailable_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Route_read(int8_tArray ser) {
+int64_t  CS_LDK_HeldHtlcAvailable_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
-       *ret_conv = Route_read(ser_ref);
+       LDKCResult_HeldHtlcAvailableDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HeldHtlcAvailableDecodeErrorZ), "LDKCResult_HeldHtlcAvailableDecodeErrorZ");
+       *ret_conv = HeldHtlcAvailable_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteParameters_free(int64_t this_obj) {
-       LDKRouteParameters this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteParameters_free(this_obj_conv);
+int8_tArray  CS_LDK_ReleaseHeldHtlc_write(int64_t obj) {
+       LDKReleaseHeldHtlc obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ReleaseHeldHtlc_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_RouteParameters_get_payment_params(int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_ReleaseHeldHtlc_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_ReleaseHeldHtlcDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReleaseHeldHtlcDecodeErrorZ), "LDKCResult_ReleaseHeldHtlcDecodeErrorZ");
+       *ret_conv = ReleaseHeldHtlc_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteParameters_set_payment_params(int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentParameters_clone(&val_conv);
-       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_AsyncPaymentsMessage_is_known_type(int64_t tlv_type) {
+       jboolean ret_conv = AsyncPaymentsMessage_is_known_type(tlv_type);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_RouteParameters_get_final_value_msat(int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_AsyncPaymentsMessage_as_OnionMessageContents(int64_t this_arg) {
+       LDKAsyncPaymentsMessage* this_arg_conv = (LDKAsyncPaymentsMessage*)untag_ptr(this_arg);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = AsyncPaymentsMessage_as_OnionMessageContents(this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_RouteParameters_set_final_value_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
+int8_tArray  CS_LDK_AsyncPaymentsMessage_write(int64_t obj) {
+       LDKAsyncPaymentsMessage* obj_conv = (LDKAsyncPaymentsMessage*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = AsyncPaymentsMessage_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_RouteParameters_get_max_total_routing_fee_msat(int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteParameters_get_max_total_routing_fee_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_AsyncPaymentsMessage_read(int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_AsyncPaymentsMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AsyncPaymentsMessageDecodeErrorZ), "LDKCResult_AsyncPaymentsMessageDecodeErrorZ");
+       *ret_conv = AsyncPaymentsMessage_read(ser_ref, arg);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteParameters_set_max_total_routing_fee_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteParameters_set_max_total_routing_fee_msat(&this_ptr_conv, val_conv);
+void  CS_LDK_OnionMessenger_free(int64_t this_obj) {
+       LDKOnionMessenger this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessenger_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_RouteParameters_new(int64_t payment_params_arg, int64_t final_value_msat_arg, int64_t max_total_routing_fee_msat_arg) {
-       LDKPaymentParameters payment_params_arg_conv;
-       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
-       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
-       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
-       void* max_total_routing_fee_msat_arg_ptr = untag_ptr(max_total_routing_fee_msat_arg);
-       CHECK_ACCESS(max_total_routing_fee_msat_arg_ptr);
-       LDKCOption_u64Z max_total_routing_fee_msat_arg_conv = *(LDKCOption_u64Z*)(max_total_routing_fee_msat_arg_ptr);
-       max_total_routing_fee_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(max_total_routing_fee_msat_arg));
-       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg, max_total_routing_fee_msat_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_Responder_free(int64_t this_obj) {
+       LDKResponder this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Responder_free(this_obj_conv);
 }
 
-static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
-       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+static inline uint64_t Responder_clone_ptr(LDKResponder *NONNULL_PTR arg) {
+       LDKResponder ret_var = Responder_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteParameters_clone_ptr(int64_t arg) {
-       LDKRouteParameters arg_conv;
+int64_t  CS_LDK_Responder_clone_ptr(int64_t arg) {
+       LDKResponder arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = Responder_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteParameters_clone(int64_t orig) {
-       LDKRouteParameters orig_conv;
+int64_t  CS_LDK_Responder_clone(int64_t orig) {
+       LDKResponder orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
+       LDKResponder ret_var = Responder_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteParameters_hash(int64_t o) {
-       LDKRouteParameters o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_RouteParameters_eq(int64_t a, int64_t b) {
-       LDKRouteParameters a_conv;
+jboolean  CS_LDK_Responder_eq(int64_t a, int64_t b) {
+       LDKResponder a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteParameters b_conv;
+       LDKResponder b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Responder_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteParameters_from_payment_params_and_value(int64_t payment_params, int64_t final_value_msat) {
-       LDKPaymentParameters payment_params_conv;
-       payment_params_conv.inner = untag_ptr(payment_params);
-       payment_params_conv.is_owned = ptr_is_owned(payment_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_conv);
-       payment_params_conv = PaymentParameters_clone(&payment_params_conv);
-       LDKRouteParameters ret_var = RouteParameters_from_payment_params_and_value(payment_params_conv, final_value_msat);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_RouteParameters_write(int64_t obj) {
-       LDKRouteParameters obj_conv;
+int8_tArray  CS_LDK_Responder_write(int64_t obj) {
+       LDKResponder obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Responder_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RouteParameters_read(int8_tArray ser) {
+int64_t  CS_LDK_Responder_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
-       *ret_conv = RouteParameters_read(ser_ref);
+       LDKCResult_ResponderDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ResponderDecodeErrorZ), "LDKCResult_ResponderDecodeErrorZ");
+       *ret_conv = Responder_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_PaymentParameters_free(int64_t this_obj) {
-       LDKPaymentParameters this_obj_conv;
+int64_t  CS_LDK_Responder_respond(int64_t this_arg) {
+       LDKResponder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = Responder_clone(&this_arg_conv);
+       LDKResponseInstruction ret_var = Responder_respond(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Responder_respond_with_reply_path(int64_t this_arg, int64_t context) {
+       LDKResponder this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = Responder_clone(&this_arg_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       LDKResponseInstruction ret_var = Responder_respond_with_reply_path(this_arg_conv, context_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ResponseInstruction_free(int64_t this_obj) {
+       LDKResponseInstruction this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentParameters_free(this_obj_conv);
+       ResponseInstruction_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_PaymentParameters_get_payee(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
+static inline uint64_t ResponseInstruction_clone_ptr(LDKResponseInstruction *NONNULL_PTR arg) {
+       LDKResponseInstruction ret_var = ResponseInstruction_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ResponseInstruction_clone_ptr(int64_t arg) {
+       LDKResponseInstruction arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ResponseInstruction_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ResponseInstruction_clone(int64_t orig) {
+       LDKResponseInstruction orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKResponseInstruction ret_var = ResponseInstruction_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_MessageSendInstructions_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageSendInstructions this_ptr_conv = *(LDKMessageSendInstructions*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageSendInstructions_free(this_ptr_conv);
+}
+
+static inline uint64_t MessageSendInstructions_clone_ptr(LDKMessageSendInstructions *NONNULL_PTR arg) {
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_MessageSendInstructions_clone_ptr(int64_t arg) {
+       LDKMessageSendInstructions* arg_conv = (LDKMessageSendInstructions*)untag_ptr(arg);
+       int64_t ret_conv = MessageSendInstructions_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_PaymentParameters_set_payee(int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
-       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
-       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_MessageSendInstructions_clone(int64_t orig) {
+       LDKMessageSendInstructions* orig_conv = (LDKMessageSendInstructions*)untag_ptr(orig);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_get_expiry_time(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
+int64_t  CS_LDK_MessageSendInstructions_with_specified_reply_path(int64_t destination, int64_t reply_path) {
+       void* destination_ptr = untag_ptr(destination);
+       CHECK_ACCESS(destination_ptr);
+       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
+       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
+       LDKBlindedMessagePath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedMessagePath_clone(&reply_path_conv);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_with_specified_reply_path(destination_conv, reply_path_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_expiry_time(int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_MessageSendInstructions_with_reply_path(int64_t destination, int64_t context) {
+       void* destination_ptr = untag_ptr(destination);
+       CHECK_ACCESS(destination_ptr);
+       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
+       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_with_reply_path(destination_conv, context_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_PaymentParameters_get_max_total_cltv_expiry_delta(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_MessageSendInstructions_without_reply_path(int64_t destination) {
+       void* destination_ptr = untag_ptr(destination);
+       CHECK_ACCESS(destination_ptr);
+       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
+       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_without_reply_path(destination_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_max_total_cltv_expiry_delta(int64_t this_ptr, int32_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
+int64_t  CS_LDK_MessageSendInstructions_for_reply(int64_t instructions) {
+       LDKResponseInstruction instructions_conv;
+       instructions_conv.inner = untag_ptr(instructions);
+       instructions_conv.is_owned = ptr_is_owned(instructions);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(instructions_conv);
+       instructions_conv = ResponseInstruction_clone(&instructions_conv);
+       LDKMessageSendInstructions *ret_copy = MALLOC(sizeof(LDKMessageSendInstructions), "LDKMessageSendInstructions");
+       *ret_copy = MessageSendInstructions_for_reply(instructions_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_t  CS_LDK_PaymentParameters_get_max_path_count(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
-       return ret_conv;
+void  CS_LDK_MessageRouter_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageRouter_free(this_ptr_conv);
 }
 
-void  CS_LDK_PaymentParameters_set_max_path_count(int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
+void  CS_LDK_DefaultMessageRouter_free(int64_t this_obj) {
+       LDKDefaultMessageRouter this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DefaultMessageRouter_free(this_obj_conv);
 }
 
-int8_t  CS_LDK_PaymentParameters_get_max_channel_saturation_power_of_half(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_DefaultMessageRouter_new(int64_t network_graph, int64_t entropy_source) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new(&network_graph_conv, entropy_source_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_max_channel_saturation_power_of_half(int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
+int64_t  CS_LDK_DefaultMessageRouter_as_MessageRouter(int64_t this_arg) {
+       LDKDefaultMessageRouter this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
+       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_channels(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+void  CS_LDK_OnionMessagePath_free(int64_t this_obj) {
+       LDKOnionMessagePath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessagePath_free(this_obj_conv);
+}
+
+ptrArray  CS_LDK_OnionMessagePath_get_intermediate_nodes(int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_channels(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
+       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&this_ptr_conv);
+       ptrArray ret_arr = NULL;
+       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
+       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               int8_tArray ret_conv_8_arr = init_int8_tArray(33, __LINE__);
+               memcpy(ret_conv_8_arr->elems, ret_var.data[i].compressed_form, 33);
+               ret_arr_ptr[i] = ret_conv_8_arr;
        }
        
        FREE(ret_var.data);
        return ret_arr;
 }
 
-void  CS_LDK_PaymentParameters_set_previously_failed_channels(int64_t this_ptr, int64_tArray val) {
-       LDKPaymentParameters this_ptr_conv;
+void  CS_LDK_OnionMessagePath_set_intermediate_nodes(int64_t this_ptr, ptrArray val) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
+       LDKCVec_PublicKeyZ val_constr;
        val_constr.datalen = val->arr_len;
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
        else
                val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
+       int8_tArray* val_vals = (void*) val->elems;
+       for (size_t i = 0; i < val_constr.datalen; i++) {
+               int8_tArray val_conv_8 = val_vals[i];
+               LDKPublicKey val_conv_8_ref;
+               CHECK(val_conv_8->arr_len == 33);
+               memcpy(val_conv_8_ref.compressed_form, val_conv_8->elems, 33); FREE(val_conv_8);
+               val_constr.data[i] = val_conv_8_ref;
        }
        FREE(val);
-       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
+       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
 }
 
-int64_tArray  CS_LDK_PaymentParameters_get_previously_failed_blinded_path_idxs(int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+int64_t  CS_LDK_OnionMessagePath_get_destination(int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z ret_var = PaymentParameters_get_previously_failed_blinded_path_idxs(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               int64_t ret_conv_6_conv = ret_var.data[g];
-               ret_arr_ptr[g] = ret_conv_6_conv;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_PaymentParameters_set_previously_failed_blinded_path_idxs(int64_t this_ptr, int64_tArray val) {
-       LDKPaymentParameters this_ptr_conv;
+void  CS_LDK_OnionMessagePath_set_destination(int64_t this_ptr, int64_t val) {
+       LDKOnionMessagePath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       FREE(val);
-       PaymentParameters_set_previously_failed_blinded_path_idxs(&this_ptr_conv, val_constr);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
+       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
+       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_PaymentParameters_new(int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg, int64_tArray previously_failed_blinded_path_idxs_arg) {
-       void* payee_arg_ptr = untag_ptr(payee_arg);
-       CHECK_ACCESS(payee_arg_ptr);
-       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
-       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
-       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
-       CHECK_ACCESS(expiry_time_arg_ptr);
-       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
-       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
-       LDKCVec_u64Z previously_failed_channels_arg_constr;
-       previously_failed_channels_arg_constr.datalen = previously_failed_channels_arg->arr_len;
-       if (previously_failed_channels_arg_constr.datalen > 0)
-               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               previously_failed_channels_arg_constr.data = NULL;
-       int64_t* previously_failed_channels_arg_vals = previously_failed_channels_arg->elems;
-       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
-               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
-               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
-       }
-       FREE(previously_failed_channels_arg);
-       LDKCVec_u64Z previously_failed_blinded_path_idxs_arg_constr;
-       previously_failed_blinded_path_idxs_arg_constr.datalen = previously_failed_blinded_path_idxs_arg->arr_len;
-       if (previously_failed_blinded_path_idxs_arg_constr.datalen > 0)
-               previously_failed_blinded_path_idxs_arg_constr.data = MALLOC(previously_failed_blinded_path_idxs_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               previously_failed_blinded_path_idxs_arg_constr.data = NULL;
-       int64_t* previously_failed_blinded_path_idxs_arg_vals = previously_failed_blinded_path_idxs_arg->elems;
-       for (size_t g = 0; g < previously_failed_blinded_path_idxs_arg_constr.datalen; g++) {
-               int64_t previously_failed_blinded_path_idxs_arg_conv_6 = previously_failed_blinded_path_idxs_arg_vals[g];
-               previously_failed_blinded_path_idxs_arg_constr.data[g] = previously_failed_blinded_path_idxs_arg_conv_6;
+int64_t  CS_LDK_OnionMessagePath_get_first_node_addresses(int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = OnionMessagePath_get_first_node_addresses(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_OnionMessagePath_set_first_node_addresses(int64_t this_ptr, int64_t val) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_SocketAddressZZ val_conv = *(LDKCOption_CVec_SocketAddressZZ*)(val_ptr);
+       val_conv = COption_CVec_SocketAddressZZ_clone((LDKCOption_CVec_SocketAddressZZ*)untag_ptr(val));
+       OnionMessagePath_set_first_node_addresses(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_OnionMessagePath_new(ptrArray intermediate_nodes_arg, int64_t destination_arg, int64_t first_node_addresses_arg) {
+       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
+       intermediate_nodes_arg_constr.datalen = intermediate_nodes_arg->arr_len;
+       if (intermediate_nodes_arg_constr.datalen > 0)
+               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               intermediate_nodes_arg_constr.data = NULL;
+       int8_tArray* intermediate_nodes_arg_vals = (void*) intermediate_nodes_arg->elems;
+       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
+               int8_tArray intermediate_nodes_arg_conv_8 = intermediate_nodes_arg_vals[i];
+               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
+               CHECK(intermediate_nodes_arg_conv_8->arr_len == 33);
+               memcpy(intermediate_nodes_arg_conv_8_ref.compressed_form, intermediate_nodes_arg_conv_8->elems, 33); FREE(intermediate_nodes_arg_conv_8);
+               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
        }
-       FREE(previously_failed_blinded_path_idxs_arg);
-       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr, previously_failed_blinded_path_idxs_arg_constr);
+       FREE(intermediate_nodes_arg);
+       void* destination_arg_ptr = untag_ptr(destination_arg);
+       CHECK_ACCESS(destination_arg_ptr);
+       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
+       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
+       void* first_node_addresses_arg_ptr = untag_ptr(first_node_addresses_arg);
+       CHECK_ACCESS(first_node_addresses_arg_ptr);
+       LDKCOption_CVec_SocketAddressZZ first_node_addresses_arg_conv = *(LDKCOption_CVec_SocketAddressZZ*)(first_node_addresses_arg_ptr);
+       first_node_addresses_arg_conv = COption_CVec_SocketAddressZZ_clone((LDKCOption_CVec_SocketAddressZZ*)untag_ptr(first_node_addresses_arg));
+       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv, first_node_addresses_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
-       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
+static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PaymentParameters_clone_ptr(int64_t arg) {
-       LDKPaymentParameters arg_conv;
+int64_t  CS_LDK_OnionMessagePath_clone_ptr(int64_t arg) {
+       LDKOnionMessagePath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentParameters_clone(int64_t orig) {
-       LDKPaymentParameters orig_conv;
+int64_t  CS_LDK_OnionMessagePath_clone(int64_t orig) {
+       LDKOnionMessagePath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_hash(int64_t o) {
-       LDKPaymentParameters o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_hash(&o_conv);
+int8_tArray  CS_LDK_OnionMessagePath_first_node(int64_t this_arg) {
+       LDKOnionMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, OnionMessagePath_first_node(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_Destination_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Destination_free(this_ptr_conv);
+}
+
+static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_Destination_clone_ptr(int64_t arg) {
+       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
+       int64_t ret_conv = Destination_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_PaymentParameters_eq(int64_t a, int64_t b) {
-       LDKPaymentParameters a_conv;
+int64_t  CS_LDK_Destination_clone(int64_t orig) {
+       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Destination_node(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_node(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Destination_blinded_path(int64_t a) {
+       LDKBlindedMessagePath a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKPaymentParameters b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       a_conv = BlindedMessagePath_clone(&a_conv);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_blinded_path(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_Destination_hash(int64_t o) {
+       LDKDestination* o_conv = (LDKDestination*)untag_ptr(o);
+       int64_t ret_conv = Destination_hash(o_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_PaymentParameters_write(int64_t obj) {
-       LDKPaymentParameters obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_Destination_eq(int64_t a, int64_t b) {
+       LDKDestination* a_conv = (LDKDestination*)untag_ptr(a);
+       LDKDestination* b_conv = (LDKDestination*)untag_ptr(b);
+       jboolean ret_conv = Destination_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentParameters_read(int8_tArray ser, int32_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
-       *ret_conv = PaymentParameters_read(ser_ref, arg);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_Destination_resolve(int64_t this_arg, int64_t network_graph) {
+       LDKDestination* this_arg_conv = (LDKDestination*)untag_ptr(this_arg);
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       Destination_resolve(this_arg_conv, &network_graph_conv);
 }
 
-int64_t  CS_LDK_PaymentParameters_from_node_id(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK(payee_pubkey->arr_len == 33);
-       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
-       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+void  CS_LDK_SendSuccess_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSendSuccess this_ptr_conv = *(LDKSendSuccess*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SendSuccess_free(this_ptr_conv);
+}
+
+static inline uint64_t SendSuccess_clone_ptr(LDKSendSuccess *NONNULL_PTR arg) {
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_SendSuccess_clone_ptr(int64_t arg) {
+       LDKSendSuccess* arg_conv = (LDKSendSuccess*)untag_ptr(arg);
+       int64_t ret_conv = SendSuccess_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_PaymentParameters_for_keysend(int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK(payee_pubkey->arr_len == 33);
-       memcpy(payee_pubkey_ref.compressed_form, payee_pubkey->elems, 33); FREE(payee_pubkey);
-       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendSuccess_clone(int64_t orig) {
+       LDKSendSuccess* orig_conv = (LDKSendSuccess*)untag_ptr(orig);
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_from_bolt12_invoice(int64_t invoice) {
-       LDKBolt12Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendSuccess_buffered() {
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_buffered();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PaymentParameters_blinded(int64_tArray blinded_route_hints) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ blinded_route_hints_constr;
-       blinded_route_hints_constr.datalen = blinded_route_hints->arr_len;
-       if (blinded_route_hints_constr.datalen > 0)
-               blinded_route_hints_constr.data = MALLOC(blinded_route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               blinded_route_hints_constr.data = NULL;
-       int64_t* blinded_route_hints_vals = blinded_route_hints->elems;
-       for (size_t l = 0; l < blinded_route_hints_constr.datalen; l++) {
-               int64_t blinded_route_hints_conv_37 = blinded_route_hints_vals[l];
-               void* blinded_route_hints_conv_37_ptr = untag_ptr(blinded_route_hints_conv_37);
-               CHECK_ACCESS(blinded_route_hints_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ blinded_route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(blinded_route_hints_conv_37_ptr);
-               blinded_route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(blinded_route_hints_conv_37));
-               blinded_route_hints_constr.data[l] = blinded_route_hints_conv_37_conv;
-       }
-       FREE(blinded_route_hints);
-       LDKPaymentParameters ret_var = PaymentParameters_blinded(blinded_route_hints_constr);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendSuccess_buffered_awaiting_connection(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
+       *ret_copy = SendSuccess_buffered_awaiting_connection(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_Payee_free(int64_t this_ptr) {
+int64_t  CS_LDK_SendSuccess_hash(int64_t o) {
+       LDKSendSuccess* o_conv = (LDKSendSuccess*)untag_ptr(o);
+       int64_t ret_conv = SendSuccess_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_SendSuccess_eq(int64_t a, int64_t b) {
+       LDKSendSuccess* a_conv = (LDKSendSuccess*)untag_ptr(a);
+       LDKSendSuccess* b_conv = (LDKSendSuccess*)untag_ptr(b);
+       jboolean ret_conv = SendSuccess_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_SendError_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
+       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       Payee_free(this_ptr_conv);
+       SendError_free(this_ptr_conv);
 }
 
-static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(arg);
+static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_Payee_clone_ptr(int64_t arg) {
-       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
-       int64_t ret_conv = Payee_clone_ptr(arg_conv);
+int64_t  CS_LDK_SendError_clone_ptr(int64_t arg) {
+       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
+       int64_t ret_conv = SendError_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Payee_clone(int64_t orig) {
-       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(orig_conv);
+int64_t  CS_LDK_SendError_clone(int64_t orig) {
+       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Payee_blinded(int64_tArray route_hints, int64_t features) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_constr;
-       route_hints_constr.datalen = route_hints->arr_len;
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = route_hints->elems;
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_37 = route_hints_vals[l];
-               void* route_hints_conv_37_ptr = untag_ptr(route_hints_conv_37);
-               CHECK_ACCESS(route_hints_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(route_hints_conv_37_ptr);
-               route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(route_hints_conv_37));
-               route_hints_constr.data[l] = route_hints_conv_37_conv;
-       }
-       FREE(route_hints);
-       LDKBolt12InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
+int64_t  CS_LDK_SendError_secp256k1(int32_t a) {
+       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_secp256k1(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Payee_clear(int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKCVec_RouteHintZ route_hints_constr;
-       route_hints_constr.datalen = route_hints->arr_len;
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = route_hints->elems;
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_11 = route_hints_vals[l];
-               LDKRouteHint route_hints_conv_11_conv;
-               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
-               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
-               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
-               route_hints_constr.data[l] = route_hints_conv_11_conv;
-       }
-       FREE(route_hints);
-       LDKBolt11InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
+int64_t  CS_LDK_SendError_too_big_packet() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_big_packet();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Payee_hash(int64_t o) {
-       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
-       int64_t ret_conv = Payee_hash(o_conv);
-       return ret_conv;
+int64_t  CS_LDK_SendError_too_few_blinded_hops() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_few_blinded_hops();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-jboolean  CS_LDK_Payee_eq(int64_t a, int64_t b) {
-       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
-       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
-       jboolean ret_conv = Payee_eq(a_conv, b_conv);
-       return ret_conv;
+int64_t  CS_LDK_SendError_invalid_first_hop(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_first_hop(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_RouteHint_free(int64_t this_obj) {
-       LDKRouteHint this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHint_free(this_obj_conv);
+int64_t  CS_LDK_SendError_path_not_found() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_path_not_found();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_tArray  CS_LDK_RouteHint_get_a(int64_t this_ptr) {
-       LDKRouteHint this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t o = 0; o < ret_var.datalen; o++) {
-               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
-               int64_t ret_conv_14_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
-               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
-               ret_arr_ptr[o] = ret_conv_14_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+int64_t  CS_LDK_SendError_invalid_message() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_message();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_RouteHint_set_a(int64_t this_ptr, int64_tArray val) {
-       LDKRouteHint this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t o = 0; o < val_constr.datalen; o++) {
-               int64_t val_conv_14 = val_vals[o];
-               LDKRouteHintHop val_conv_14_conv;
-               val_conv_14_conv.inner = untag_ptr(val_conv_14);
-               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
-               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
-               val_constr.data[o] = val_conv_14_conv;
-       }
-       FREE(val);
-       RouteHint_set_a(&this_ptr_conv, val_constr);
+int64_t  CS_LDK_SendError_buffer_full() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_buffer_full();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHint_new(int64_tArray a_arg) {
-       LDKCVec_RouteHintHopZ a_arg_constr;
-       a_arg_constr.datalen = a_arg->arr_len;
-       if (a_arg_constr.datalen > 0)
-               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               a_arg_constr.data = NULL;
-       int64_t* a_arg_vals = a_arg->elems;
-       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
-               int64_t a_arg_conv_14 = a_arg_vals[o];
-               LDKRouteHintHop a_arg_conv_14_conv;
-               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
-               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
-               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
-               a_arg_constr.data[o] = a_arg_conv_14_conv;
-       }
-       FREE(a_arg);
-       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendError_get_node_id_failed() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_get_node_id_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
-       LDKRouteHint ret_var = RouteHint_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendError_unresolved_introduction_node() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_unresolved_introduction_node();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteHint_clone_ptr(int64_t arg) {
-       LDKRouteHint arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_RouteHint_clone(int64_t orig) {
-       LDKRouteHint orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_SendError_blinded_path_advance_failed() {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_blinded_path_advance_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHint_hash(int64_t o) {
-       LDKRouteHint o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_hash(&o_conv);
+int64_t  CS_LDK_SendError_hash(int64_t o) {
+       LDKSendError* o_conv = (LDKSendError*)untag_ptr(o);
+       int64_t ret_conv = SendError_hash(o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_RouteHint_eq(int64_t a, int64_t b) {
-       LDKRouteHint a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRouteHint b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
+jboolean  CS_LDK_SendError_eq(int64_t a, int64_t b) {
+       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
+       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
+       jboolean ret_conv = SendError_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_RouteHint_write(int64_t obj) {
-       LDKRouteHint obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+void  CS_LDK_CustomOnionMessageHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomOnionMessageHandler_free(this_ptr_conv);
+}
+
+void  CS_LDK_PeeledOnion_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPeeledOnion this_ptr_conv = *(LDKPeeledOnion*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PeeledOnion_free(this_ptr_conv);
+}
+
+static inline uint64_t PeeledOnion_clone_ptr(LDKPeeledOnion *NONNULL_PTR arg) {
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_PeeledOnion_clone_ptr(int64_t arg) {
+       LDKPeeledOnion* arg_conv = (LDKPeeledOnion*)untag_ptr(arg);
+       int64_t ret_conv = PeeledOnion_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_PeeledOnion_clone(int64_t orig) {
+       LDKPeeledOnion* orig_conv = (LDKPeeledOnion*)untag_ptr(orig);
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PeeledOnion_forward(int64_t a, int64_t b) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKNextMessageHop a_conv = *(LDKNextMessageHop*)(a_ptr);
+       a_conv = NextMessageHop_clone((LDKNextMessageHop*)untag_ptr(a));
+       LDKOnionMessage b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = OnionMessage_clone(&b_conv);
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_forward(a_conv, b_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PeeledOnion_receive(int64_t a, int64_t b, int64_t c) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKParsedOnionMessageContents a_conv = *(LDKParsedOnionMessageContents*)(a_ptr);
+       a_conv = ParsedOnionMessageContents_clone((LDKParsedOnionMessageContents*)untag_ptr(a));
+       void* b_ptr = untag_ptr(b);
+       CHECK_ACCESS(b_ptr);
+       LDKCOption_MessageContextZ b_conv = *(LDKCOption_MessageContextZ*)(b_ptr);
+       b_conv = COption_MessageContextZ_clone((LDKCOption_MessageContextZ*)untag_ptr(b));
+       LDKBlindedMessagePath c_conv;
+       c_conv.inner = untag_ptr(c);
+       c_conv.is_owned = ptr_is_owned(c);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
+       c_conv = BlindedMessagePath_clone(&c_conv);
+       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
+       *ret_copy = PeeledOnion_receive(a_conv, b_conv, c_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_create_onion_message_resolving_destination(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t network_graph, int64_t path, int64_t contents, int64_t reply_path) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* contents_ptr = untag_ptr(contents);
+       CHECK_ACCESS(contents_ptr);
+       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
+       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
+       }
+       LDKBlindedMessagePath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedMessagePath_clone(&reply_path_conv);
+       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
+       *ret_conv = create_onion_message_resolving_destination(entropy_source_conv, node_signer_conv, node_id_lookup_conv, &network_graph_conv, path_conv, contents_conv, reply_path_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_create_onion_message(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t path, int64_t contents, int64_t reply_path) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* contents_ptr = untag_ptr(contents);
+       CHECK_ACCESS(contents_ptr);
+       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
+       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
+       }
+       LDKBlindedMessagePath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedMessagePath_clone(&reply_path_conv);
+       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
+       *ret_conv = create_onion_message(entropy_source_conv, node_signer_conv, node_id_lookup_conv, path_conv, contents_conv, reply_path_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_peel_onion_message(int64_t msg, int64_t node_signer, int64_t logger, int64_t custom_handler) {
+       LDKOnionMessage msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKCResult_PeeledOnionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PeeledOnionNoneZ), "LDKCResult_PeeledOnionNoneZ");
+       *ret_conv = peel_onion_message(&msg_conv, node_signer_conv, logger_conv, custom_handler_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_new(int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t node_id_lookup, int64_t message_router, int64_t offers_handler, int64_t async_payments_handler, int64_t custom_handler) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       CHECK_ACCESS(node_id_lookup_ptr);
+       LDKNodeIdLookUp node_id_lookup_conv = *(LDKNodeIdLookUp*)(node_id_lookup_ptr);
+       if (node_id_lookup_conv.free == LDKNodeIdLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeIdLookUp_JCalls_cloned(&node_id_lookup_conv);
+       }
+       void* message_router_ptr = untag_ptr(message_router);
+       CHECK_ACCESS(message_router_ptr);
+       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
+       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKMessageRouter_JCalls_cloned(&message_router_conv);
+       }
+       void* offers_handler_ptr = untag_ptr(offers_handler);
+       CHECK_ACCESS(offers_handler_ptr);
+       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
+       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
+       }
+       void* async_payments_handler_ptr = untag_ptr(async_payments_handler);
+       CHECK_ACCESS(async_payments_handler_ptr);
+       LDKAsyncPaymentsMessageHandler async_payments_handler_conv = *(LDKAsyncPaymentsMessageHandler*)(async_payments_handler_ptr);
+       if (async_payments_handler_conv.free == LDKAsyncPaymentsMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKAsyncPaymentsMessageHandler_JCalls_cloned(&async_payments_handler_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, node_id_lookup_conv, message_router_conv, offers_handler_conv, async_payments_handler_conv, custom_handler_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OnionMessenger_new_with_offline_peer_interception(int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t node_id_lookup, int64_t message_router, int64_t offers_handler, int64_t async_payments_handler, int64_t custom_handler) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       CHECK_ACCESS(node_id_lookup_ptr);
+       LDKNodeIdLookUp node_id_lookup_conv = *(LDKNodeIdLookUp*)(node_id_lookup_ptr);
+       if (node_id_lookup_conv.free == LDKNodeIdLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeIdLookUp_JCalls_cloned(&node_id_lookup_conv);
+       }
+       void* message_router_ptr = untag_ptr(message_router);
+       CHECK_ACCESS(message_router_ptr);
+       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
+       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKMessageRouter_JCalls_cloned(&message_router_conv);
+       }
+       void* offers_handler_ptr = untag_ptr(offers_handler);
+       CHECK_ACCESS(offers_handler_ptr);
+       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
+       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
+       }
+       void* async_payments_handler_ptr = untag_ptr(async_payments_handler);
+       CHECK_ACCESS(async_payments_handler_ptr);
+       LDKAsyncPaymentsMessageHandler async_payments_handler_conv = *(LDKAsyncPaymentsMessageHandler*)(async_payments_handler_ptr);
+       if (async_payments_handler_conv.free == LDKAsyncPaymentsMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKAsyncPaymentsMessageHandler_JCalls_cloned(&async_payments_handler_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKOnionMessenger ret_var = OnionMessenger_new_with_offline_peer_interception(entropy_source_conv, node_signer_conv, logger_conv, node_id_lookup_conv, message_router_conv, offers_handler_conv, async_payments_handler_conv, custom_handler_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OnionMessenger_send_onion_message(int64_t this_arg, int64_t contents, int64_t instructions) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* contents_ptr = untag_ptr(contents);
+       CHECK_ACCESS(contents_ptr);
+       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
+       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
+       }
+       void* instructions_ptr = untag_ptr(instructions);
+       CHECK_ACCESS(instructions_ptr);
+       LDKMessageSendInstructions instructions_conv = *(LDKMessageSendInstructions*)(instructions_ptr);
+       instructions_conv = MessageSendInstructions_clone((LDKMessageSendInstructions*)untag_ptr(instructions));
+       LDKCResult_SendSuccessSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SendSuccessSendErrorZ), "LDKCResult_SendSuccessSendErrorZ");
+       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, contents_conv, instructions_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_forward_onion_message(int64_t this_arg, int64_t message, int8_tArray peer_node_id) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessage message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = OnionMessage_clone(&message_conv);
+       LDKPublicKey peer_node_id_ref;
+       CHECK(peer_node_id->arr_len == 33);
+       memcpy(peer_node_id_ref.compressed_form, peer_node_id->elems, 33); FREE(peer_node_id);
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = OnionMessenger_forward_onion_message(&this_arg_conv, message_conv, peer_node_id_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_handle_onion_message_response(int64_t this_arg, int64_t response, int64_t instructions) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* response_ptr = untag_ptr(response);
+       CHECK_ACCESS(response_ptr);
+       LDKOnionMessageContents response_conv = *(LDKOnionMessageContents*)(response_ptr);
+       if (response_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&response_conv);
+       }
+       LDKResponseInstruction instructions_conv;
+       instructions_conv.inner = untag_ptr(instructions);
+       instructions_conv.is_owned = ptr_is_owned(instructions);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(instructions_conv);
+       instructions_conv = ResponseInstruction_clone(&instructions_conv);
+       LDKCResult_SendSuccessSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SendSuccessSendErrorZ), "LDKCResult_SendSuccessSendErrorZ");
+       *ret_conv = OnionMessenger_handle_onion_message_response(&this_arg_conv, response_conv, instructions_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_get_update_future(int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKFuture ret_var = OnionMessenger_get_update_future(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OnionMessenger_as_EventsProvider(int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
+       *ret_ret = OnionMessenger_as_EventsProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int64_t  CS_LDK_OnionMessenger_as_OnionMessageHandler(int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
+       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_OffersMessageHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessageHandler_free(this_ptr_conv);
+}
+
+void  CS_LDK_OffersMessage_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessage_free(this_ptr_conv);
+}
+
+static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_OffersMessage_clone_ptr(int64_t arg) {
+       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
+       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OffersMessage_clone(int64_t orig) {
+       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersMessage_invoice_request(int64_t a) {
+       LDKInvoiceRequest a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceRequest_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_request(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersMessage_invoice(int64_t a) {
+       LDKBolt12Invoice a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12Invoice_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersMessage_invoice_error(int64_t a) {
+       LDKInvoiceError a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceError_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_error(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_OffersMessage_is_known_type(int64_t tlv_type) {
+       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OffersMessage_as_OnionMessageContents(int64_t this_arg) {
+       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = OffersMessage_as_OnionMessageContents(this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_OffersMessage_write(int64_t obj) {
+       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = OffersMessage_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RouteHint_read(int8_tArray ser) {
+int64_t  CS_LDK_OffersMessage_read(int8_tArray ser, int64_t arg_a, int64_t arg_b) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
-       *ret_conv = RouteHint_read(ser_ref);
+       void* arg_b_ptr = untag_ptr(arg_b);
+       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
+       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
+       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
+       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_RouteHintHop_free(int64_t this_obj) {
-       LDKRouteHintHop this_obj_conv;
+void  CS_LDK_Packet_free(int64_t this_obj) {
+       LDKPacket this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHintHop_free(this_obj_conv);
+       Packet_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_RouteHintHop_get_src_node_id(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_t  CS_LDK_Packet_get_version(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       int8_t ret_conv = Packet_get_version(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_RouteHintHop_set_src_node_id(int64_t this_ptr, int8_tArray val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_version(int64_t this_ptr, int8_t val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
+       Packet_set_version(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_RouteHintHop_get_short_channel_id(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_tArray  CS_LDK_Packet_get_public_key(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, Packet_get_public_key(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHintHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_public_key(int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       Packet_set_public_key(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHintHop_get_fees(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_tArray  CS_LDK_Packet_get_hop_data(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCVec_u8Z ret_var = Packet_get_hop_data(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHintHop_set_fees(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_hop_data(int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
-}
-
-int16_t  CS_LDK_RouteHintHop_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_RouteHintHop_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_RouteHintHop_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-void  CS_LDK_RouteHintHop_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = val->arr_len;
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
+       Packet_set_hop_data(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHintHop_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+int8_tArray  CS_LDK_Packet_get_hmac(int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *Packet_get_hmac(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_RouteHintHop_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+void  CS_LDK_Packet_set_hmac(int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       Packet_set_hmac(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_RouteHintHop_new(int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
-       LDKPublicKey src_node_id_arg_ref;
-       CHECK(src_node_id_arg->arr_len == 33);
-       memcpy(src_node_id_arg_ref.compressed_form, src_node_id_arg->elems, 33); FREE(src_node_id_arg);
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
-       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
-       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
-       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
-       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
-       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
-       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
+int64_t  CS_LDK_Packet_new(int8_t version_arg, int8_tArray public_key_arg, int8_tArray hop_data_arg, int8_tArray hmac_arg) {
+       LDKPublicKey public_key_arg_ref;
+       CHECK(public_key_arg->arr_len == 33);
+       memcpy(public_key_arg_ref.compressed_form, public_key_arg->elems, 33); FREE(public_key_arg);
+       LDKCVec_u8Z hop_data_arg_ref;
+       hop_data_arg_ref.datalen = hop_data_arg->arr_len;
+       hop_data_arg_ref.data = MALLOC(hop_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(hop_data_arg_ref.data, hop_data_arg->elems, hop_data_arg_ref.datalen); FREE(hop_data_arg);
+       LDKThirtyTwoBytes hmac_arg_ref;
+       CHECK(hmac_arg->arr_len == 32);
+       memcpy(hmac_arg_ref.data, hmac_arg->elems, 32); FREE(hmac_arg);
+       LDKPacket ret_var = Packet_new(version_arg, public_key_arg_ref, hop_data_arg_ref, hmac_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
-       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+static inline uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg) {
+       LDKPacket ret_var = Packet_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_RouteHintHop_clone_ptr(int64_t arg) {
-       LDKRouteHintHop arg_conv;
+int64_t  CS_LDK_Packet_clone_ptr(int64_t arg) {
+       LDKPacket arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = Packet_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_RouteHintHop_clone(int64_t orig) {
-       LDKRouteHintHop orig_conv;
+int64_t  CS_LDK_Packet_clone(int64_t orig) {
+       LDKPacket orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
+       LDKPacket ret_var = Packet_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RouteHintHop_hash(int64_t o) {
-       LDKRouteHintHop o_conv;
+int64_t  CS_LDK_Packet_hash(int64_t o) {
+       LDKPacket o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_hash(&o_conv);
+       int64_t ret_conv = Packet_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_RouteHintHop_eq(int64_t a, int64_t b) {
-       LDKRouteHintHop a_conv;
+jboolean  CS_LDK_Packet_eq(int64_t a, int64_t b) {
+       LDKPacket a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHintHop b_conv;
+       LDKPacket b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Packet_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_RouteHintHop_write(int64_t obj) {
-       LDKRouteHintHop obj_conv;
+int8_tArray  CS_LDK_Packet_write(int64_t obj) {
+       LDKPacket obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Packet_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_RouteHintHop_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
-       *ret_conv = RouteHintHop_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_ParsedOnionMessageContents_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKParsedOnionMessageContents this_ptr_conv = *(LDKParsedOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ParsedOnionMessageContents_free(this_ptr_conv);
 }
 
-void  CS_LDK_FirstHopCandidate_free(int64_t this_obj) {
-       LDKFirstHopCandidate this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FirstHopCandidate_free(this_obj_conv);
+static inline uint64_t ParsedOnionMessageContents_clone_ptr(LDKParsedOnionMessageContents *NONNULL_PTR arg) {
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_ParsedOnionMessageContents_clone_ptr(int64_t arg) {
+       LDKParsedOnionMessageContents* arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(arg);
+       int64_t ret_conv = ParsedOnionMessageContents_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t FirstHopCandidate_clone_ptr(LDKFirstHopCandidate *NONNULL_PTR arg) {
-       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_ParsedOnionMessageContents_clone(int64_t orig) {
+       LDKParsedOnionMessageContents* orig_conv = (LDKParsedOnionMessageContents*)untag_ptr(orig);
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_FirstHopCandidate_clone_ptr(int64_t arg) {
-       LDKFirstHopCandidate arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = FirstHopCandidate_clone_ptr(&arg_conv);
+
+int64_t  CS_LDK_ParsedOnionMessageContents_offers(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
+       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_offers(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ParsedOnionMessageContents_custom(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
+       if (a_conv.free == LDKOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOnionMessageContents_JCalls_cloned(&a_conv);
+       }
+       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
+       *ret_copy = ParsedOnionMessageContents_custom(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_ParsedOnionMessageContents_as_OnionMessageContents(int64_t this_arg) {
+       LDKParsedOnionMessageContents* this_arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(this_arg);
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = ParsedOnionMessageContents_as_OnionMessageContents(this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+int8_tArray  CS_LDK_ParsedOnionMessageContents_write(int64_t obj) {
+       LDKParsedOnionMessageContents* obj_conv = (LDKParsedOnionMessageContents*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = ParsedOnionMessageContents_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = OnionMessageContents_clone(arg);
+       return tag_ptr(ret_ret, true);
+}
+int64_t  CS_LDK_OnionMessageContents_clone_ptr(int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)arg_ptr;
+       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_FirstHopCandidate_clone(int64_t orig) {
-       LDKFirstHopCandidate orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKFirstHopCandidate ret_var = FirstHopCandidate_clone(&orig_conv);
+int64_t  CS_LDK_OnionMessageContents_clone(int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)orig_ptr;
+       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_ret = OnionMessageContents_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_OnionMessageContents_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OnionMessageContents_free(this_ptr_conv);
+}
+
+void  CS_LDK_IntroductionNode_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKIntroductionNode this_ptr_conv = *(LDKIntroductionNode*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       IntroductionNode_free(this_ptr_conv);
+}
+
+static inline uint64_t IntroductionNode_clone_ptr(LDKIntroductionNode *NONNULL_PTR arg) {
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_IntroductionNode_clone_ptr(int64_t arg) {
+       LDKIntroductionNode* arg_conv = (LDKIntroductionNode*)untag_ptr(arg);
+       int64_t ret_conv = IntroductionNode_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_IntroductionNode_clone(int64_t orig) {
+       LDKIntroductionNode* orig_conv = (LDKIntroductionNode*)untag_ptr(orig);
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_IntroductionNode_node_id(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_node_id(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_IntroductionNode_directed_short_channel_id(int32_t a, int64_t b) {
+       LDKDirection a_conv = LDKDirection_from_cs(a);
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = IntroductionNode_directed_short_channel_id(a_conv, b);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_IntroductionNode_hash(int64_t o) {
+       LDKIntroductionNode* o_conv = (LDKIntroductionNode*)untag_ptr(o);
+       int64_t ret_conv = IntroductionNode_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_IntroductionNode_eq(int64_t a, int64_t b) {
+       LDKIntroductionNode* a_conv = (LDKIntroductionNode*)untag_ptr(a);
+       LDKIntroductionNode* b_conv = (LDKIntroductionNode*)untag_ptr(b);
+       jboolean ret_conv = IntroductionNode_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int32_t  CS_LDK_Direction_clone(int64_t orig) {
+       LDKDirection* orig_conv = (LDKDirection*)untag_ptr(orig);
+       int32_t ret_conv = LDKDirection_to_cs(Direction_clone(orig_conv));
+       return ret_conv;
+}
+
+int32_t  CS_LDK_Direction_node_one() {
+       int32_t ret_conv = LDKDirection_to_cs(Direction_node_one());
+       return ret_conv;
+}
+
+int32_t  CS_LDK_Direction_node_two() {
+       int32_t ret_conv = LDKDirection_to_cs(Direction_node_two());
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Direction_hash(int64_t o) {
+       LDKDirection* o_conv = (LDKDirection*)untag_ptr(o);
+       int64_t ret_conv = Direction_hash(o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Direction_eq(int64_t a, int64_t b) {
+       LDKDirection* a_conv = (LDKDirection*)untag_ptr(a);
+       LDKDirection* b_conv = (LDKDirection*)untag_ptr(b);
+       jboolean ret_conv = Direction_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeIdLookUp_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeIdLookUp this_ptr_conv = *(LDKNodeIdLookUp*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeIdLookUp_free(this_ptr_conv);
+}
+
+void  CS_LDK_EmptyNodeIdLookUp_free(int64_t this_obj) {
+       LDKEmptyNodeIdLookUp this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       EmptyNodeIdLookUp_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_EmptyNodeIdLookUp_new() {
+       LDKEmptyNodeIdLookUp ret_var = EmptyNodeIdLookUp_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PublicHopCandidate_free(int64_t this_obj) {
-       LDKPublicHopCandidate this_obj_conv;
+int64_t  CS_LDK_EmptyNodeIdLookUp_as_NodeIdLookUp(int64_t this_arg) {
+       LDKEmptyNodeIdLookUp this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeIdLookUp* ret_ret = MALLOC(sizeof(LDKNodeIdLookUp), "LDKNodeIdLookUp");
+       *ret_ret = EmptyNodeIdLookUp_as_NodeIdLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_BlindedHop_free(int64_t this_obj) {
+       LDKBlindedHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PublicHopCandidate_free(this_obj_conv);
+       BlindedHop_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_PublicHopCandidate_get_short_channel_id(int64_t this_ptr) {
-       LDKPublicHopCandidate this_ptr_conv;
+int8_tArray  CS_LDK_BlindedHop_get_blinded_node_id(int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = PublicHopCandidate_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedHop_get_blinded_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_PublicHopCandidate_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKPublicHopCandidate this_ptr_conv;
+void  CS_LDK_BlindedHop_set_blinded_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PublicHopCandidate_set_short_channel_id(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       BlindedHop_set_blinded_node_id(&this_ptr_conv, val_ref);
 }
 
-static inline uint64_t PublicHopCandidate_clone_ptr(LDKPublicHopCandidate *NONNULL_PTR arg) {
-       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_BlindedHop_get_encrypted_payload(int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_get_encrypted_payload(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
-int64_t  CS_LDK_PublicHopCandidate_clone_ptr(int64_t arg) {
-       LDKPublicHopCandidate arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = PublicHopCandidate_clone_ptr(&arg_conv);
-       return ret_conv;
+
+void  CS_LDK_BlindedHop_set_encrypted_payload(int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = val->arr_len;
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
+       BlindedHop_set_encrypted_payload(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_PublicHopCandidate_clone(int64_t orig) {
-       LDKPublicHopCandidate orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKPublicHopCandidate ret_var = PublicHopCandidate_clone(&orig_conv);
+int64_t  CS_LDK_BlindedHop_new(int8_tArray blinded_node_id_arg, int8_tArray encrypted_payload_arg) {
+       LDKPublicKey blinded_node_id_arg_ref;
+       CHECK(blinded_node_id_arg->arr_len == 33);
+       memcpy(blinded_node_id_arg_ref.compressed_form, blinded_node_id_arg->elems, 33); FREE(blinded_node_id_arg);
+       LDKCVec_u8Z encrypted_payload_arg_ref;
+       encrypted_payload_arg_ref.datalen = encrypted_payload_arg->arr_len;
+       encrypted_payload_arg_ref.data = MALLOC(encrypted_payload_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(encrypted_payload_arg_ref.data, encrypted_payload_arg->elems, encrypted_payload_arg_ref.datalen); FREE(encrypted_payload_arg);
+       LDKBlindedHop ret_var = BlindedHop_new(blinded_node_id_arg_ref, encrypted_payload_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PrivateHopCandidate_free(int64_t this_obj) {
-       LDKPrivateHopCandidate this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PrivateHopCandidate_free(this_obj_conv);
-}
-
-static inline uint64_t PrivateHopCandidate_clone_ptr(LDKPrivateHopCandidate *NONNULL_PTR arg) {
-       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(arg);
+static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
+       LDKBlindedHop ret_var = BlindedHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PrivateHopCandidate_clone_ptr(int64_t arg) {
-       LDKPrivateHopCandidate arg_conv;
+int64_t  CS_LDK_BlindedHop_clone_ptr(int64_t arg) {
+       LDKBlindedHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PrivateHopCandidate_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PrivateHopCandidate_clone(int64_t orig) {
-       LDKPrivateHopCandidate orig_conv;
+int64_t  CS_LDK_BlindedHop_clone(int64_t orig) {
+       LDKBlindedHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPrivateHopCandidate ret_var = PrivateHopCandidate_clone(&orig_conv);
+       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_BlindedPathCandidate_free(int64_t this_obj) {
-       LDKBlindedPathCandidate this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPathCandidate_free(this_obj_conv);
+int64_t  CS_LDK_BlindedHop_hash(int64_t o) {
+       LDKBlindedHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedHop_hash(&o_conv);
+       return ret_conv;
 }
 
-static inline uint64_t BlindedPathCandidate_clone_ptr(LDKBlindedPathCandidate *NONNULL_PTR arg) {
-       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_BlindedPathCandidate_clone_ptr(int64_t arg) {
-       LDKBlindedPathCandidate arg_conv;
+jboolean  CS_LDK_BlindedHop_eq(int64_t a, int64_t b) {
+       LDKBlindedHop a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedHop b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_BlindedHop_write(int64_t obj) {
+       LDKBlindedHop obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedHop_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
+       *ret_conv = BlindedHop_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_BlindedPayInfo_free(int64_t this_obj) {
+       LDKBlindedPayInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedPayInfo_free(this_obj_conv);
+}
+
+int32_t  CS_LDK_BlindedPayInfo_get_fee_base_msat(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_fee_base_msat(int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
+}
+
+int32_t  CS_LDK_BlindedPayInfo_get_fee_proportional_millionths(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
+}
+
+int16_t  CS_LDK_BlindedPayInfo_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_BlindedPayInfo_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_get_features(int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_BlindedPayInfo_set_features(int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_BlindedPayInfo_new(int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_BlindedPayInfo_clone_ptr(int64_t arg) {
+       LDKBlindedPayInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPathCandidate_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPathCandidate_clone(int64_t orig) {
-       LDKBlindedPathCandidate orig_conv;
+int64_t  CS_LDK_BlindedPayInfo_clone(int64_t orig) {
+       LDKBlindedPayInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPathCandidate ret_var = BlindedPathCandidate_clone(&orig_conv);
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_OneHopBlindedPathCandidate_free(int64_t this_obj) {
-       LDKOneHopBlindedPathCandidate this_obj_conv;
+int64_t  CS_LDK_BlindedPayInfo_hash(int64_t o) {
+       LDKBlindedPayInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_BlindedPayInfo_eq(int64_t a, int64_t b) {
+       LDKBlindedPayInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedPayInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_BlindedPayInfo_write(int64_t obj) {
+       LDKBlindedPayInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedPayInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = BlindedPayInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_BlindedPaymentPath_free(int64_t this_obj) {
+       LDKBlindedPaymentPath this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OneHopBlindedPathCandidate_free(this_obj_conv);
+       BlindedPaymentPath_free(this_obj_conv);
 }
 
-static inline uint64_t OneHopBlindedPathCandidate_clone_ptr(LDKOneHopBlindedPathCandidate *NONNULL_PTR arg) {
-       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(arg);
+int64_t  CS_LDK_BlindedPaymentPath_get_payinfo(int64_t this_ptr) {
+       LDKBlindedPaymentPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedPayInfo ret_var = BlindedPaymentPath_get_payinfo(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_OneHopBlindedPathCandidate_clone_ptr(int64_t arg) {
-       LDKOneHopBlindedPathCandidate arg_conv;
+
+void  CS_LDK_BlindedPaymentPath_set_payinfo(int64_t this_ptr, int64_t val) {
+       LDKBlindedPaymentPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedPayInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedPayInfo_clone(&val_conv);
+       BlindedPaymentPath_set_payinfo(&this_ptr_conv, val_conv);
+}
+
+static inline uint64_t BlindedPaymentPath_clone_ptr(LDKBlindedPaymentPath *NONNULL_PTR arg) {
+       LDKBlindedPaymentPath ret_var = BlindedPaymentPath_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_BlindedPaymentPath_clone_ptr(int64_t arg) {
+       LDKBlindedPaymentPath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = OneHopBlindedPathCandidate_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedPaymentPath_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_OneHopBlindedPathCandidate_clone(int64_t orig) {
-       LDKOneHopBlindedPathCandidate orig_conv;
+int64_t  CS_LDK_BlindedPaymentPath_clone(int64_t orig) {
+       LDKBlindedPaymentPath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOneHopBlindedPathCandidate ret_var = OneHopBlindedPathCandidate_clone(&orig_conv);
+       LDKBlindedPaymentPath ret_var = BlindedPaymentPath_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_CandidateRouteHop_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCandidateRouteHop this_ptr_conv = *(LDKCandidateRouteHop*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CandidateRouteHop_free(this_ptr_conv);
-}
-
-static inline uint64_t CandidateRouteHop_clone_ptr(LDKCandidateRouteHop *NONNULL_PTR arg) {
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_CandidateRouteHop_clone_ptr(int64_t arg) {
-       LDKCandidateRouteHop* arg_conv = (LDKCandidateRouteHop*)untag_ptr(arg);
-       int64_t ret_conv = CandidateRouteHop_clone_ptr(arg_conv);
+int64_t  CS_LDK_BlindedPaymentPath_hash(int64_t o) {
+       LDKBlindedPaymentPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPaymentPath_hash(&o_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_clone(int64_t orig) {
-       LDKCandidateRouteHop* orig_conv = (LDKCandidateRouteHop*)untag_ptr(orig);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_CandidateRouteHop_first_hop(int64_t a) {
-       LDKFirstHopCandidate a_conv;
+jboolean  CS_LDK_BlindedPaymentPath_eq(int64_t a, int64_t b) {
+       LDKBlindedPaymentPath a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = FirstHopCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_first_hop(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       a_conv.is_owned = false;
+       LDKBlindedPaymentPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPaymentPath_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_public_hop(int64_t a) {
-       LDKPublicHopCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = PublicHopCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_public_hop(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedPaymentPath_one_hop(int8_tArray payee_node_id, int64_t payee_tlvs, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
+       LDKPublicKey payee_node_id_ref;
+       CHECK(payee_node_id->arr_len == 33);
+       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
+       LDKReceiveTlvs payee_tlvs_conv;
+       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
+       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
+       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = BlindedPaymentPath_one_hop(payee_node_id_ref, payee_tlvs_conv, min_final_cltv_expiry_delta, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_private_hop(int64_t a) {
-       LDKPrivateHopCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = PrivateHopCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_private_hop(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedPaymentPath_new(int64_tArray intermediate_nodes, int8_tArray payee_node_id, int64_t payee_tlvs, int64_t htlc_maximum_msat, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
+       LDKCVec_PaymentForwardNodeZ intermediate_nodes_constr;
+       intermediate_nodes_constr.datalen = intermediate_nodes->arr_len;
+       if (intermediate_nodes_constr.datalen > 0)
+               intermediate_nodes_constr.data = MALLOC(intermediate_nodes_constr.datalen * sizeof(LDKPaymentForwardNode), "LDKCVec_PaymentForwardNodeZ Elements");
+       else
+               intermediate_nodes_constr.data = NULL;
+       int64_t* intermediate_nodes_vals = intermediate_nodes->elems;
+       for (size_t u = 0; u < intermediate_nodes_constr.datalen; u++) {
+               int64_t intermediate_nodes_conv_20 = intermediate_nodes_vals[u];
+               LDKPaymentForwardNode intermediate_nodes_conv_20_conv;
+               intermediate_nodes_conv_20_conv.inner = untag_ptr(intermediate_nodes_conv_20);
+               intermediate_nodes_conv_20_conv.is_owned = ptr_is_owned(intermediate_nodes_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(intermediate_nodes_conv_20_conv);
+               intermediate_nodes_conv_20_conv = PaymentForwardNode_clone(&intermediate_nodes_conv_20_conv);
+               intermediate_nodes_constr.data[u] = intermediate_nodes_conv_20_conv;
+       }
+       FREE(intermediate_nodes);
+       LDKPublicKey payee_node_id_ref;
+       CHECK(payee_node_id->arr_len == 33);
+       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
+       LDKReceiveTlvs payee_tlvs_conv;
+       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
+       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
+       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedPaymentPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPaymentPathNoneZ), "LDKCResult_BlindedPaymentPathNoneZ");
+       *ret_conv = BlindedPaymentPath_new(intermediate_nodes_constr, payee_node_id_ref, payee_tlvs_conv, htlc_maximum_msat, min_final_cltv_expiry_delta, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_blinded(int64_t a) {
-       LDKBlindedPathCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPathCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_blinded(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_BlindedPaymentPath_public_introduction_node_id(int64_t this_arg, int64_t network_graph) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKNodeId ret_var = BlindedPaymentPath_public_introduction_node_id(&this_arg_conv, &network_graph_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_one_hop_blinded(int64_t a) {
-       LDKOneHopBlindedPathCandidate a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = OneHopBlindedPathCandidate_clone(&a_conv);
-       LDKCandidateRouteHop *ret_copy = MALLOC(sizeof(LDKCandidateRouteHop), "LDKCandidateRouteHop");
-       *ret_copy = CandidateRouteHop_one_hop_blinded(a_conv);
+int64_t  CS_LDK_BlindedPaymentPath_introduction_node(int64_t this_arg) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = BlindedPaymentPath_introduction_node(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_globally_unique_short_channel_id(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = CandidateRouteHop_globally_unique_short_channel_id(this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_BlindedPaymentPath_blinding_point(int64_t this_arg) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedPaymentPath_blinding_point(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_CandidateRouteHop_cltv_expiry_delta(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       int32_t ret_conv = CandidateRouteHop_cltv_expiry_delta(this_arg_conv);
-       return ret_conv;
+int64_tArray  CS_LDK_BlindedPaymentPath_blinded_hops(int64_t this_arg) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedPaymentPath_blinded_hops(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_htlc_minimum_msat(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       int64_t ret_conv = CandidateRouteHop_htlc_minimum_msat(this_arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_BlindedPaymentPath_advance_path_by_one(int64_t this_arg, int64_t node_signer, int64_t node_id_lookup) {
+       LDKBlindedPaymentPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedPaymentPath_advance_path_by_one(&this_arg_conv, node_signer_conv, node_id_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_fees(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKRoutingFees ret_var = CandidateRouteHop_fees(this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentForwardNode_free(int64_t this_obj) {
+       LDKPaymentForwardNode this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentForwardNode_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_CandidateRouteHop_source(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKNodeId ret_var = CandidateRouteHop_source(this_arg_conv);
+int64_t  CS_LDK_PaymentForwardNode_get_tlvs(int64_t this_ptr) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKForwardTlvs ret_var = PaymentForwardNode_get_tlvs(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_CandidateRouteHop_target(int64_t this_arg) {
-       LDKCandidateRouteHop* this_arg_conv = (LDKCandidateRouteHop*)untag_ptr(this_arg);
-       LDKNodeId ret_var = CandidateRouteHop_target(this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentForwardNode_set_tlvs(int64_t this_ptr, int64_t val) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKForwardTlvs val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ForwardTlvs_clone(&val_conv);
+       PaymentForwardNode_set_tlvs(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_find_route(int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK(our_node_pubkey->arr_len == 33);
-       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKCVec_ChannelDetailsZ first_hops_constr;
-       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
-       if (first_hops != NULL) {
-               first_hops_constr.datalen = first_hops->arr_len;
-               if (first_hops_constr.datalen > 0)
-                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
-               else
-                       first_hops_constr.data = NULL;
-               int64_t* first_hops_vals = first_hops->elems;
-               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
-                       int64_t first_hops_conv_16 = first_hops_vals[q];
-                       LDKChannelDetails first_hops_conv_16_conv;
-                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
-                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
-                       first_hops_conv_16_conv.is_owned = false;
-                       first_hops_constr.data[q] = first_hops_conv_16_conv;
-               }
-               FREE(first_hops);
-               first_hops_ptr = &first_hops_constr;
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* scorer_ptr = untag_ptr(scorer);
-       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
-       LDKScoreLookUp* scorer_conv = (LDKScoreLookUp*)scorer_ptr;
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv.is_owned = false;
-       uint8_t random_seed_bytes_arr[32];
-       CHECK(random_seed_bytes->arr_len == 32);
-       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
-       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
-       return tag_ptr(ret_conv, true);
+int8_tArray  CS_LDK_PaymentForwardNode_get_node_id(int64_t this_ptr) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, PaymentForwardNode_get_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_build_route_from_hops(int8_tArray our_node_pubkey, ptrArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK(our_node_pubkey->arr_len == 33);
-       memcpy(our_node_pubkey_ref.compressed_form, our_node_pubkey->elems, 33); FREE(our_node_pubkey);
-       LDKCVec_PublicKeyZ hops_constr;
-       hops_constr.datalen = hops->arr_len;
-       if (hops_constr.datalen > 0)
-               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               hops_constr.data = NULL;
-       int8_tArray* hops_vals = (void*) hops->elems;
-       for (size_t i = 0; i < hops_constr.datalen; i++) {
-               int8_tArray hops_conv_8 = hops_vals[i];
-               LDKPublicKey hops_conv_8_ref;
-               CHECK(hops_conv_8->arr_len == 33);
-               memcpy(hops_conv_8_ref.compressed_form, hops_conv_8->elems, 33); FREE(hops_conv_8);
-               hops_constr.data[i] = hops_conv_8_ref;
-       }
-       FREE(hops);
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       uint8_t random_seed_bytes_arr[32];
-       CHECK(random_seed_bytes->arr_len == 32);
-       memcpy(random_seed_bytes_arr, random_seed_bytes->elems, 32); FREE(random_seed_bytes);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_PaymentForwardNode_set_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       PaymentForwardNode_set_node_id(&this_ptr_conv, val_ref);
 }
 
-void  CS_LDK_ScoreLookUp_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScoreLookUp this_ptr_conv = *(LDKScoreLookUp*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ScoreLookUp_free(this_ptr_conv);
+int64_t  CS_LDK_PaymentForwardNode_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = PaymentForwardNode_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ScoreUpdate_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScoreUpdate this_ptr_conv = *(LDKScoreUpdate*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ScoreUpdate_free(this_ptr_conv);
+void  CS_LDK_PaymentForwardNode_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKPaymentForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentForwardNode_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-void  CS_LDK_Score_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Score_free(this_ptr_conv);
+int64_t  CS_LDK_PaymentForwardNode_new(int64_t tlvs_arg, int8_tArray node_id_arg, int64_t htlc_maximum_msat_arg) {
+       LDKForwardTlvs tlvs_arg_conv;
+       tlvs_arg_conv.inner = untag_ptr(tlvs_arg);
+       tlvs_arg_conv.is_owned = ptr_is_owned(tlvs_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_arg_conv);
+       tlvs_arg_conv = ForwardTlvs_clone(&tlvs_arg_conv);
+       LDKPublicKey node_id_arg_ref;
+       CHECK(node_id_arg->arr_len == 33);
+       memcpy(node_id_arg_ref.compressed_form, node_id_arg->elems, 33); FREE(node_id_arg);
+       LDKPaymentForwardNode ret_var = PaymentForwardNode_new(tlvs_arg_conv, node_id_arg_ref, htlc_maximum_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_LockableScore_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       LockableScore_free(this_ptr_conv);
+static inline uint64_t PaymentForwardNode_clone_ptr(LDKPaymentForwardNode *NONNULL_PTR arg) {
+       LDKPaymentForwardNode ret_var = PaymentForwardNode_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_PaymentForwardNode_clone_ptr(int64_t arg) {
+       LDKPaymentForwardNode arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PaymentForwardNode_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_WriteableScore_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableScore_free(this_ptr_conv);
+int64_t  CS_LDK_PaymentForwardNode_clone(int64_t orig) {
+       LDKPaymentForwardNode orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPaymentForwardNode ret_var = PaymentForwardNode_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_MultiThreadedLockableScore_free(int64_t this_obj) {
-       LDKMultiThreadedLockableScore this_obj_conv;
+void  CS_LDK_ForwardTlvs_free(int64_t this_obj) {
+       LDKForwardTlvs this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedLockableScore_free(this_obj_conv);
+       ForwardTlvs_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_MultiThreadedLockableScore_as_LockableScore(int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
-       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_ForwardTlvs_get_short_channel_id(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_MultiThreadedLockableScore_write(int64_t obj) {
-       LDKMultiThreadedLockableScore obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_ForwardTlvs_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ForwardTlvs_set_short_channel_id(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_MultiThreadedLockableScore_as_WriteableScore(int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
-       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_ForwardTlvs_get_payment_relay(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay ret_var = ForwardTlvs_get_payment_relay(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_MultiThreadedLockableScore_new(int64_t score) {
-       void* score_ptr = untag_ptr(score);
-       CHECK_ACCESS(score_ptr);
-       LDKScore score_conv = *(LDKScore*)(score_ptr);
-       if (score_conv.free == LDKScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&score_conv);
-       }
-       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
+void  CS_LDK_ForwardTlvs_set_payment_relay(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentRelay_clone(&val_conv);
+       ForwardTlvs_set_payment_relay(&this_ptr_conv, val_conv);
+}
+
+int64_t  CS_LDK_ForwardTlvs_get_payment_constraints(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints ret_var = ForwardTlvs_get_payment_constraints(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_MultiThreadedScoreLockRead_free(int64_t this_obj) {
-       LDKMultiThreadedScoreLockRead this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedScoreLockRead_free(this_obj_conv);
+void  CS_LDK_ForwardTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ForwardTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-void  CS_LDK_MultiThreadedScoreLockWrite_free(int64_t this_obj) {
-       LDKMultiThreadedScoreLockWrite this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedScoreLockWrite_free(this_obj_conv);
+int64_t  CS_LDK_ForwardTlvs_get_features(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = ForwardTlvs_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_MultiThreadedScoreLockRead_as_ScoreLookUp(int64_t this_arg) {
-       LDKMultiThreadedScoreLockRead this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = MultiThreadedScoreLockRead_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_ForwardTlvs_set_features(int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       ForwardTlvs_set_features(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_MultiThreadedScoreLockWrite_write(int64_t obj) {
-       LDKMultiThreadedScoreLockWrite obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedScoreLockWrite_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int8_tArray  CS_LDK_ForwardTlvs_get_next_blinding_override(int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, ForwardTlvs_get_next_blinding_override(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
 }
 
-int64_t  CS_LDK_MultiThreadedScoreLockWrite_as_ScoreUpdate(int64_t this_arg) {
-       LDKMultiThreadedScoreLockWrite this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
-       *ret_ret = MultiThreadedScoreLockWrite_as_ScoreUpdate(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_ForwardTlvs_set_next_blinding_override(int64_t this_ptr, int8_tArray val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       ForwardTlvs_set_next_blinding_override(&this_ptr_conv, val_ref);
 }
 
-void  CS_LDK_ChannelUsage_free(int64_t this_obj) {
-       LDKChannelUsage this_obj_conv;
+int64_t  CS_LDK_ForwardTlvs_new(int64_t short_channel_id_arg, int64_t payment_relay_arg, int64_t payment_constraints_arg, int64_t features_arg, int8_tArray next_blinding_override_arg) {
+       LDKPaymentRelay payment_relay_arg_conv;
+       payment_relay_arg_conv.inner = untag_ptr(payment_relay_arg);
+       payment_relay_arg_conv.is_owned = ptr_is_owned(payment_relay_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_relay_arg_conv);
+       payment_relay_arg_conv = PaymentRelay_clone(&payment_relay_arg_conv);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKPublicKey next_blinding_override_arg_ref;
+       CHECK(next_blinding_override_arg->arr_len == 33);
+       memcpy(next_blinding_override_arg_ref.compressed_form, next_blinding_override_arg->elems, 33); FREE(next_blinding_override_arg);
+       LDKForwardTlvs ret_var = ForwardTlvs_new(short_channel_id_arg, payment_relay_arg_conv, payment_constraints_arg_conv, features_arg_conv, next_blinding_override_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg) {
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ForwardTlvs_clone_ptr(int64_t arg) {
+       LDKForwardTlvs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ForwardTlvs_clone(int64_t orig) {
+       LDKForwardTlvs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+void  CS_LDK_ReceiveTlvs_free(int64_t this_obj) {
+       LDKReceiveTlvs this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUsage_free(this_obj_conv);
+       ReceiveTlvs_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelUsage_get_amount_msat(int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+int8_tArray  CS_LDK_ReceiveTlvs_get_payment_secret(int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
+       memcpy(ret_arr->elems, *ReceiveTlvs_get_payment_secret(&this_ptr_conv), 32);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelUsage_set_amount_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+void  CS_LDK_ReceiveTlvs_set_payment_secret(int64_t this_ptr, int8_tArray val) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
+       LDKThirtyTwoBytes val_ref;
+       CHECK(val->arr_len == 32);
+       memcpy(val_ref.data, val->elems, 32); FREE(val);
+       ReceiveTlvs_set_payment_secret(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_ChannelUsage_get_inflight_htlc_msat(int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+int64_t  CS_LDK_ReceiveTlvs_get_payment_constraints(int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKPaymentConstraints ret_var = ReceiveTlvs_get_payment_constraints(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelUsage_set_inflight_htlc_msat(int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+void  CS_LDK_ReceiveTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ReceiveTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelUsage_get_effective_capacity(int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+int64_t  CS_LDK_ReceiveTlvs_get_payment_context(int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = ReceiveTlvs_get_payment_context(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_ChannelUsage_set_effective_capacity(int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+void  CS_LDK_ReceiveTlvs_set_payment_context(int64_t this_ptr, int64_t val) {
+       LDKReceiveTlvs this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
-       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
-       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
+       LDKPaymentContext val_conv = *(LDKPaymentContext*)(val_ptr);
+       val_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(val));
+       ReceiveTlvs_set_payment_context(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelUsage_new(int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
-       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
-       CHECK_ACCESS(effective_capacity_arg_ptr);
-       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
-       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
-       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
+int64_t  CS_LDK_ReceiveTlvs_new(int8_tArray payment_secret_arg, int64_t payment_constraints_arg, int64_t payment_context_arg) {
+       LDKThirtyTwoBytes payment_secret_arg_ref;
+       CHECK(payment_secret_arg->arr_len == 32);
+       memcpy(payment_secret_arg_ref.data, payment_secret_arg->elems, 32); FREE(payment_secret_arg);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       void* payment_context_arg_ptr = untag_ptr(payment_context_arg);
+       CHECK_ACCESS(payment_context_arg_ptr);
+       LDKPaymentContext payment_context_arg_conv = *(LDKPaymentContext*)(payment_context_arg_ptr);
+       payment_context_arg_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(payment_context_arg));
+       LDKReceiveTlvs ret_var = ReceiveTlvs_new(payment_secret_arg_ref, payment_constraints_arg_conv, payment_context_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
-       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
+static inline uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg) {
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelUsage_clone_ptr(int64_t arg) {
-       LDKChannelUsage arg_conv;
+int64_t  CS_LDK_ReceiveTlvs_clone_ptr(int64_t arg) {
+       LDKReceiveTlvs arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
+       int64_t ret_conv = ReceiveTlvs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelUsage_clone(int64_t orig) {
-       LDKChannelUsage orig_conv;
+int64_t  CS_LDK_ReceiveTlvs_clone(int64_t orig) {
+       LDKReceiveTlvs orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_FixedPenaltyScorer_free(int64_t this_obj) {
-       LDKFixedPenaltyScorer this_obj_conv;
+void  CS_LDK_PaymentRelay_free(int64_t this_obj) {
+       LDKPaymentRelay this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FixedPenaltyScorer_free(this_obj_conv);
+       PaymentRelay_free(this_obj_conv);
 }
 
-static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_FixedPenaltyScorer_clone_ptr(int64_t arg) {
-       LDKFixedPenaltyScorer arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_clone(int64_t orig) {
-       LDKFixedPenaltyScorer orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_with_penalty(int64_t penalty_msat) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreLookUp(int64_t this_arg) {
-       LDKFixedPenaltyScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = FixedPenaltyScorer_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_as_ScoreUpdate(int64_t this_arg) {
-       LDKFixedPenaltyScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
-       *ret_ret = FixedPenaltyScorer_as_ScoreUpdate(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int8_tArray  CS_LDK_FixedPenaltyScorer_write(int64_t obj) {
-       LDKFixedPenaltyScorer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_FixedPenaltyScorer_read(int8_tArray ser, int64_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
-       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_ProbabilisticScorer_free(int64_t this_obj) {
-       LDKProbabilisticScorer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScorer_free(this_obj_conv);
-}
-
-void  CS_LDK_ProbabilisticScoringFeeParameters_free(int64_t this_obj) {
-       LDKProbabilisticScoringFeeParameters this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringFeeParameters_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int16_t  CS_LDK_PaymentRelay_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
+       int16_t ret_conv = PaymentRelay_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentRelay_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
+       PaymentRelay_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int32_t  CS_LDK_PaymentRelay_get_fee_proportional_millionths(int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentRelay_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentRelay_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       PaymentRelay_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int32_t  CS_LDK_PaymentRelay_get_fee_base_msat(int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentRelay_get_fee_base_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentRelay_set_fee_base_msat(int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
+       PaymentRelay_set_fee_base_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_PaymentRelay_new(int16_t cltv_expiry_delta_arg, int32_t fee_proportional_millionths_arg, int32_t fee_base_msat_arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+static inline uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+int64_t  CS_LDK_PaymentRelay_clone_ptr(int64_t arg) {
+       LDKPaymentRelay arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = PaymentRelay_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+int64_t  CS_LDK_PaymentRelay_clone(int64_t orig) {
+       LDKPaymentRelay orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPaymentRelay ret_var = PaymentRelay_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+void  CS_LDK_PaymentConstraints_free(int64_t this_obj) {
+       LDKPaymentConstraints this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentConstraints_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int32_t  CS_LDK_PaymentConstraints_get_max_cltv_expiry(int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentConstraints_get_max_cltv_expiry(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentConstraints_set_max_cltv_expiry(int64_t this_ptr, int32_t val) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
+       PaymentConstraints_set_max_cltv_expiry(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+int64_t  CS_LDK_PaymentConstraints_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
+       int64_t ret_conv = PaymentConstraints_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
-}
-
-jboolean  CS_LDK_ProbabilisticScoringFeeParameters_get_linear_success_probability(int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+void  CS_LDK_PaymentConstraints_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKPaymentConstraints this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ProbabilisticScoringFeeParameters_get_linear_success_probability(&this_ptr_conv);
-       return ret_conv;
+       PaymentConstraints_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_linear_success_probability(int64_t this_ptr, jboolean val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_linear_success_probability(&this_ptr_conv, val);
+int64_t  CS_LDK_PaymentConstraints_new(int32_t max_cltv_expiry_arg, int64_t htlc_minimum_msat_arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
+static inline uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone_ptr(int64_t arg) {
-       LDKProbabilisticScoringFeeParameters arg_conv;
+int64_t  CS_LDK_PaymentConstraints_clone_ptr(int64_t arg) {
+       LDKPaymentConstraints arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentConstraints_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_clone(int64_t orig) {
-       LDKProbabilisticScoringFeeParameters orig_conv;
+int64_t  CS_LDK_PaymentConstraints_clone(int64_t orig) {
+       LDKPaymentConstraints orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringFeeParameters_default() {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_PaymentContext_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPaymentContext this_ptr_conv = *(LDKPaymentContext*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PaymentContext_free(this_ptr_conv);
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned(int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
+static inline uint64_t PaymentContext_clone_ptr(LDKPaymentContext *NONNULL_PTR arg) {
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_PaymentContext_clone_ptr(int64_t arg) {
+       LDKPaymentContext* arg_conv = (LDKPaymentContext*)untag_ptr(arg);
+       int64_t ret_conv = PaymentContext_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_add_banned_from_list(int64_t this_arg, int64_tArray node_ids) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NodeIdZ node_ids_constr;
-       node_ids_constr.datalen = node_ids->arr_len;
-       if (node_ids_constr.datalen > 0)
-               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
-       else
-               node_ids_constr.data = NULL;
-       int64_t* node_ids_vals = node_ids->elems;
-       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
-               int64_t node_ids_conv_8 = node_ids_vals[i];
-               LDKNodeId node_ids_conv_8_conv;
-               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
-               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
-               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
-               node_ids_constr.data[i] = node_ids_conv_8_conv;
-       }
-       FREE(node_ids);
-       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
+int64_t  CS_LDK_PaymentContext_clone(int64_t orig) {
+       LDKPaymentContext* orig_conv = (LDKPaymentContext*)untag_ptr(orig);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_remove_banned(int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
+int64_t  CS_LDK_PaymentContext_unknown(int64_t a) {
+       LDKUnknownPaymentContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = UnknownPaymentContext_clone(&a_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_unknown(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_set_manual_penalty(int64_t this_arg, int64_t node_id, int64_t penalty) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
+int64_t  CS_LDK_PaymentContext_bolt12_offer(int64_t a) {
+       LDKBolt12OfferContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12OfferContext_clone(&a_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_bolt12_offer(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_remove_manual_penalty(int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
+int64_t  CS_LDK_PaymentContext_bolt12_refund(int64_t a) {
+       LDKBolt12RefundContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12RefundContext_clone(&a_conv);
+       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
+       *ret_copy = PaymentContext_bolt12_refund(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ProbabilisticScoringFeeParameters_clear_manual_penalties(int64_t this_arg) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
+jboolean  CS_LDK_PaymentContext_eq(int64_t a, int64_t b) {
+       LDKPaymentContext* a_conv = (LDKPaymentContext*)untag_ptr(a);
+       LDKPaymentContext* b_conv = (LDKPaymentContext*)untag_ptr(b);
+       jboolean ret_conv = PaymentContext_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ProbabilisticScoringDecayParameters_free(int64_t this_obj) {
-       LDKProbabilisticScoringDecayParameters this_obj_conv;
+void  CS_LDK_UnknownPaymentContext_free(int64_t this_obj) {
+       LDKUnknownPaymentContext this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringDecayParameters_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_new(int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       UnknownPaymentContext_free(this_obj_conv);
 }
 
-static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
+static inline uint64_t UnknownPaymentContext_clone_ptr(LDKUnknownPaymentContext *NONNULL_PTR arg) {
+       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone_ptr(int64_t arg) {
-       LDKProbabilisticScoringDecayParameters arg_conv;
+int64_t  CS_LDK_UnknownPaymentContext_clone_ptr(int64_t arg) {
+       LDKUnknownPaymentContext arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = UnknownPaymentContext_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_clone(int64_t orig) {
-       LDKProbabilisticScoringDecayParameters orig_conv;
+int64_t  CS_LDK_UnknownPaymentContext_clone(int64_t orig) {
+       LDKUnknownPaymentContext orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
+       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ProbabilisticScoringDecayParameters_default() {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_UnknownPaymentContext_eq(int64_t a, int64_t b) {
+       LDKUnknownPaymentContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKUnknownPaymentContext b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = UnknownPaymentContext_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ProbabilisticScorer_new(int64_t decay_params, int64_t network_graph, int64_t logger) {
-       LDKProbabilisticScoringDecayParameters decay_params_conv;
-       decay_params_conv.inner = untag_ptr(decay_params);
-       decay_params_conv.is_owned = ptr_is_owned(decay_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
-       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ProbabilisticScorer_debug_log_liquidity_stats(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_estimated_channel_liquidity_range(int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
-       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
-       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_historical_estimated_payment_success_probability(int64_t this_arg, int64_t scid, int64_t target, int64_t amount_msat, int64_t params) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKProbabilisticScoringFeeParameters params_conv;
-       params_conv.inner = untag_ptr(params);
-       params_conv.is_owned = ptr_is_owned(params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
-       params_conv.is_owned = false;
-       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
-       *ret_copy = ProbabilisticScorer_historical_estimated_payment_success_probability(&this_arg_conv, scid, &target_conv, amount_msat, &params_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_as_ScoreLookUp(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
-       *ret_ret = ProbabilisticScorer_as_ScoreLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_as_ScoreUpdate(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
-       *ret_ret = ProbabilisticScorer_as_ScoreUpdate(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_as_Score(int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int8_tArray  CS_LDK_ProbabilisticScorer_write(int64_t obj) {
-       LDKProbabilisticScorer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_ProbabilisticScorer_read(int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKProbabilisticScoringDecayParameters arg_a_conv;
-       arg_a_conv.inner = untag_ptr(arg_a);
-       arg_a_conv.is_owned = ptr_is_owned(arg_a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
-       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
-       LDKNetworkGraph arg_b_conv;
-       arg_b_conv.inner = untag_ptr(arg_b);
-       arg_b_conv.is_owned = ptr_is_owned(arg_b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
-       arg_b_conv.is_owned = false;
-       void* arg_c_ptr = untag_ptr(arg_c);
-       CHECK_ACCESS(arg_c_ptr);
-       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
-       if (arg_c_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_c_conv);
-       }
-       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
-       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_free(int64_t this_obj) {
-       LDKDelayedPaymentOutputDescriptor this_obj_conv;
+void  CS_LDK_Bolt12OfferContext_free(int64_t this_obj) {
+       LDKBolt12OfferContext this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DelayedPaymentOutputDescriptor_free(this_obj_conv);
+       Bolt12OfferContext_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+int64_t  CS_LDK_Bolt12OfferContext_get_offer_id(int64_t this_ptr) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
+       LDKOfferId ret_var = Bolt12OfferContext_get_offer_id(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+void  CS_LDK_Bolt12OfferContext_set_offer_id(int64_t this_ptr, int64_t val) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
+       LDKOfferId val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
-}
-
-int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_per_commitment_point(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
-}
-
-int16_t  CS_LDK_DelayedPaymentOutputDescriptor_get_to_self_delay(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_to_self_delay(int64_t this_ptr, int16_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_output(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
-}
-
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+       val_conv = OfferId_clone(&val_conv);
+       Bolt12OfferContext_set_offer_id(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_revocation_pubkey(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+int64_t  CS_LDK_Bolt12OfferContext_get_invoice_request(int64_t this_ptr) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRevocationKey ret_var = DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv);
+       LDKInvoiceRequestFields ret_var = Bolt12OfferContext_get_invoice_request(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_revocation_pubkey(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+void  CS_LDK_Bolt12OfferContext_set_invoice_request(int64_t this_ptr, int64_t val) {
+       LDKBolt12OfferContext this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKRevocationKey val_conv;
+       LDKInvoiceRequestFields val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RevocationKey_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_conv);
+       val_conv = InvoiceRequestFields_clone(&val_conv);
+       Bolt12OfferContext_set_invoice_request(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_Bolt12OfferContext_new(int64_t offer_id_arg, int64_t invoice_request_arg) {
+       LDKOfferId offer_id_arg_conv;
+       offer_id_arg_conv.inner = untag_ptr(offer_id_arg);
+       offer_id_arg_conv.is_owned = ptr_is_owned(offer_id_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(offer_id_arg_conv);
+       offer_id_arg_conv = OfferId_clone(&offer_id_arg_conv);
+       LDKInvoiceRequestFields invoice_request_arg_conv;
+       invoice_request_arg_conv.inner = untag_ptr(invoice_request_arg);
+       invoice_request_arg_conv.is_owned = ptr_is_owned(invoice_request_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_arg_conv);
+       invoice_request_arg_conv = InvoiceRequestFields_clone(&invoice_request_arg_conv);
+       LDKBolt12OfferContext ret_var = Bolt12OfferContext_new(offer_id_arg_conv, invoice_request_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+static inline uint64_t Bolt12OfferContext_clone_ptr(LDKBolt12OfferContext *NONNULL_PTR arg) {
+       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+int64_t  CS_LDK_Bolt12OfferContext_clone_ptr(int64_t arg) {
+       LDKBolt12OfferContext arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12OfferContext_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = DelayedPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
+int64_t  CS_LDK_Bolt12OfferContext_clone(int64_t orig) {
+       LDKBolt12OfferContext orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelTransactionParameters_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_Bolt12OfferContext_eq(int64_t a, int64_t b) {
+       LDKBolt12OfferContext a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBolt12OfferContext b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Bolt12OfferContext_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_new(int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int64_t revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       LDKPublicKey per_commitment_point_arg_ref;
-       CHECK(per_commitment_point_arg->arr_len == 33);
-       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKRevocationKey revocation_pubkey_arg_conv;
-       revocation_pubkey_arg_conv.inner = untag_ptr(revocation_pubkey_arg);
-       revocation_pubkey_arg_conv.is_owned = ptr_is_owned(revocation_pubkey_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(revocation_pubkey_arg_conv);
-       revocation_pubkey_arg_conv = RevocationKey_clone(&revocation_pubkey_arg_conv);
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK(channel_keys_id_arg->arr_len == 32);
-       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
-       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
-       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
-       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
-       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
+void  CS_LDK_Bolt12RefundContext_free(int64_t this_obj) {
+       LDKBolt12RefundContext this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12RefundContext_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_Bolt12RefundContext_new() {
+       LDKBolt12RefundContext ret_var = Bolt12RefundContext_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+static inline uint64_t Bolt12RefundContext_clone_ptr(LDKBolt12RefundContext *NONNULL_PTR arg) {
+       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone_ptr(int64_t arg) {
-       LDKDelayedPaymentOutputDescriptor arg_conv;
+int64_t  CS_LDK_Bolt12RefundContext_clone_ptr(int64_t arg) {
+       LDKBolt12RefundContext arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       int64_t ret_conv = Bolt12RefundContext_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_clone(int64_t orig) {
-       LDKDelayedPaymentOutputDescriptor orig_conv;
+int64_t  CS_LDK_Bolt12RefundContext_clone(int64_t orig) {
+       LDKBolt12RefundContext orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
+       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_hash(int64_t o) {
-       LDKDelayedPaymentOutputDescriptor o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_DelayedPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
+jboolean  CS_LDK_Bolt12RefundContext_eq(int64_t a, int64_t b) {
+       LDKBolt12RefundContext a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor b_conv;
+       LDKBolt12RefundContext b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Bolt12RefundContext_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_DelayedPaymentOutputDescriptor_write(int64_t obj) {
-       LDKDelayedPaymentOutputDescriptor obj_conv;
+int8_tArray  CS_LDK_ForwardTlvs_write(int64_t obj) {
+       LDKForwardTlvs obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ForwardTlvs_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_DelayedPaymentOutputDescriptor_read(int8_tArray ser) {
+int8_tArray  CS_LDK_ReceiveTlvs_write(int64_t obj) {
+       LDKReceiveTlvs obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ReceiveTlvs_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int8_tArray  CS_LDK_PaymentRelay_write(int64_t obj) {
+       LDKPaymentRelay obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = PaymentRelay_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_PaymentRelay_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = PaymentRelay_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_free(int64_t this_obj) {
-       LDKStaticPaymentOutputDescriptor this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       StaticPaymentOutputDescriptor_free(this_obj_conv);
+int8_tArray  CS_LDK_PaymentConstraints_write(int64_t obj) {
+       LDKPaymentConstraints obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = PaymentConstraints_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_outpoint(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_PaymentConstraints_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = PaymentConstraints_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_output(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+int8_tArray  CS_LDK_PaymentContext_write(int64_t obj) {
+       LDKPaymentContext* obj_conv = (LDKPaymentContext*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PaymentContext_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_output(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_PaymentContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentContextDecodeErrorZ), "LDKCResult_PaymentContextDecodeErrorZ");
+       *ret_conv = PaymentContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_get_channel_keys_id(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
+int8_tArray  CS_LDK_UnknownPaymentContext_write(int64_t obj) {
+       LDKUnknownPaymentContext obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnknownPaymentContext_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_keys_id(int64_t this_ptr, int8_tArray val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_UnknownPaymentContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_UnknownPaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnknownPaymentContextDecodeErrorZ), "LDKCResult_UnknownPaymentContextDecodeErrorZ");
+       *ret_conv = UnknownPaymentContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_value_satoshis(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Bolt12OfferContext_write(int64_t obj) {
+       LDKBolt12OfferContext obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12OfferContext_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_value_satoshis(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+int64_t  CS_LDK_Bolt12OfferContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12OfferContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12OfferContextDecodeErrorZ), "LDKCResult_Bolt12OfferContextDecodeErrorZ");
+       *ret_conv = Bolt12OfferContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_get_channel_transaction_parameters(int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = StaticPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int8_tArray  CS_LDK_Bolt12RefundContext_write(int64_t obj) {
+       LDKBolt12RefundContext obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12RefundContext_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_StaticPaymentOutputDescriptor_set_channel_transaction_parameters(int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelTransactionParameters_clone(&val_conv);
-       StaticPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_Bolt12RefundContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_Bolt12RefundContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12RefundContextDecodeErrorZ), "LDKCResult_Bolt12RefundContextDecodeErrorZ");
+       *ret_conv = Bolt12RefundContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_new(int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK(channel_keys_id_arg->arr_len == 32);
-       memcpy(channel_keys_id_arg_ref.data, channel_keys_id_arg->elems, 32); FREE(channel_keys_id_arg);
-       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
-       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
-       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
-       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_BlindedMessagePath_free(int64_t this_obj) {
+       LDKBlindedMessagePath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedMessagePath_free(this_obj_conv);
 }
 
-static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+static inline uint64_t BlindedMessagePath_clone_ptr(LDKBlindedMessagePath *NONNULL_PTR arg) {
+       LDKBlindedMessagePath ret_var = BlindedMessagePath_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone_ptr(int64_t arg) {
-       LDKStaticPaymentOutputDescriptor arg_conv;
+int64_t  CS_LDK_BlindedMessagePath_clone_ptr(int64_t arg) {
+       LDKBlindedMessagePath arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedMessagePath_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_clone(int64_t orig) {
-       LDKStaticPaymentOutputDescriptor orig_conv;
+int64_t  CS_LDK_BlindedMessagePath_clone(int64_t orig) {
+       LDKBlindedMessagePath orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
+       LDKBlindedMessagePath ret_var = BlindedMessagePath_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_hash(int64_t o) {
-       LDKStaticPaymentOutputDescriptor o_conv;
+int64_t  CS_LDK_BlindedMessagePath_hash(int64_t o) {
+       LDKBlindedMessagePath o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_hash(&o_conv);
+       int64_t ret_conv = BlindedMessagePath_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_StaticPaymentOutputDescriptor_eq(int64_t a, int64_t b) {
-       LDKStaticPaymentOutputDescriptor a_conv;
+jboolean  CS_LDK_BlindedMessagePath_eq(int64_t a, int64_t b) {
+       LDKBlindedMessagePath a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor b_conv;
+       LDKBlindedMessagePath b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       jboolean ret_conv = BlindedMessagePath_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_witness_script(int64_t this_arg) {
-       LDKStaticPaymentOutputDescriptor this_arg_conv;
+int8_tArray  CS_LDK_BlindedMessagePath_write(int64_t obj) {
+       LDKBlindedMessagePath obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedMessagePath_write(&obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_BlindedMessagePath_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_BlindedMessagePathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathDecodeErrorZ), "LDKCResult_BlindedMessagePathDecodeErrorZ");
+       *ret_conv = BlindedMessagePath_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_BlindedMessagePath_one_hop(int8_tArray recipient_node_id, int64_t context, int64_t entropy_source) {
+       LDKPublicKey recipient_node_id_ref;
+       CHECK(recipient_node_id->arr_len == 33);
+       memcpy(recipient_node_id_ref.compressed_form, recipient_node_id->elems, 33); FREE(recipient_node_id);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = BlindedMessagePath_one_hop(recipient_node_id_ref, context_conv, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_BlindedMessagePath_new(int64_tArray intermediate_nodes, int8_tArray recipient_node_id, int64_t context, int64_t entropy_source) {
+       LDKCVec_MessageForwardNodeZ intermediate_nodes_constr;
+       intermediate_nodes_constr.datalen = intermediate_nodes->arr_len;
+       if (intermediate_nodes_constr.datalen > 0)
+               intermediate_nodes_constr.data = MALLOC(intermediate_nodes_constr.datalen * sizeof(LDKMessageForwardNode), "LDKCVec_MessageForwardNodeZ Elements");
+       else
+               intermediate_nodes_constr.data = NULL;
+       int64_t* intermediate_nodes_vals = intermediate_nodes->elems;
+       for (size_t u = 0; u < intermediate_nodes_constr.datalen; u++) {
+               int64_t intermediate_nodes_conv_20 = intermediate_nodes_vals[u];
+               LDKMessageForwardNode intermediate_nodes_conv_20_conv;
+               intermediate_nodes_conv_20_conv.inner = untag_ptr(intermediate_nodes_conv_20);
+               intermediate_nodes_conv_20_conv.is_owned = ptr_is_owned(intermediate_nodes_conv_20);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(intermediate_nodes_conv_20_conv);
+               intermediate_nodes_conv_20_conv = MessageForwardNode_clone(&intermediate_nodes_conv_20_conv);
+               intermediate_nodes_constr.data[u] = intermediate_nodes_conv_20_conv;
+       }
+       FREE(intermediate_nodes);
+       LDKPublicKey recipient_node_id_ref;
+       CHECK(recipient_node_id->arr_len == 33);
+       memcpy(recipient_node_id_ref.compressed_form, recipient_node_id->elems, 33); FREE(recipient_node_id);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKMessageContext context_conv = *(LDKMessageContext*)(context_ptr);
+       context_conv = MessageContext_clone((LDKMessageContext*)untag_ptr(context));
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       LDKCResult_BlindedMessagePathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedMessagePathNoneZ), "LDKCResult_BlindedMessagePathNoneZ");
+       *ret_conv = BlindedMessagePath_new(intermediate_nodes_constr, recipient_node_id_ref, context_conv, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_BlindedMessagePath_use_compact_introduction_node(int64_t this_arg, int64_t network_graph) {
+       LDKBlindedMessagePath this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = StaticPaymentOutputDescriptor_witness_script(&this_arg_conv);
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       BlindedMessagePath_use_compact_introduction_node(&this_arg_conv, &network_graph_conv);
+}
+
+int64_t  CS_LDK_BlindedMessagePath_public_introduction_node_id(int64_t this_arg, int64_t network_graph) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKReadOnlyNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKNodeId ret_var = BlindedMessagePath_public_introduction_node_id(&this_arg_conv, &network_graph_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_BlindedMessagePath_introduction_node(int64_t this_arg) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
+       *ret_copy = BlindedMessagePath_introduction_node(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_max_witness_length(int64_t this_arg) {
-       LDKStaticPaymentOutputDescriptor this_arg_conv;
+int8_tArray  CS_LDK_BlindedMessagePath_blinding_point(int64_t this_arg) {
+       LDKBlindedMessagePath this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_max_witness_length(&this_arg_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, BlindedMessagePath_blinding_point(&this_arg_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-int8_tArray  CS_LDK_StaticPaymentOutputDescriptor_write(int64_t obj) {
-       LDKStaticPaymentOutputDescriptor obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int64_tArray  CS_LDK_BlindedMessagePath_blinded_hops(int64_t this_arg) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedMessagePath_blinded_hops(&this_arg_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               ret_arr_ptr[m] = ret_conv_12_ref;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_StaticPaymentOutputDescriptor_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_BlindedMessagePath_advance_path_by_one(int64_t this_arg, int64_t node_signer, int64_t node_id_lookup) {
+       LDKBlindedMessagePath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
+       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
+       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedMessagePath_advance_path_by_one(&this_arg_conv, node_signer_conv, node_id_lookup_conv);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_SpendableOutputDescriptor_free(int64_t this_ptr) {
+void  CS_LDK_NextMessageHop_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
+       LDKNextMessageHop this_ptr_conv = *(LDKNextMessageHop*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       SpendableOutputDescriptor_free(this_ptr_conv);
+       NextMessageHop_free(this_ptr_conv);
 }
 
-static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(arg);
+static inline uint64_t NextMessageHop_clone_ptr(LDKNextMessageHop *NONNULL_PTR arg) {
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_SpendableOutputDescriptor_clone_ptr(int64_t arg) {
-       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
-       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+int64_t  CS_LDK_NextMessageHop_clone_ptr(int64_t arg) {
+       LDKNextMessageHop* arg_conv = (LDKNextMessageHop*)untag_ptr(arg);
+       int64_t ret_conv = NextMessageHop_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_clone(int64_t orig) {
-       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_SpendableOutputDescriptor_static_output(int64_t outpoint, int64_t output, int8_tArray channel_keys_id) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       void* output_ptr = untag_ptr(output);
-       CHECK_ACCESS(output_ptr);
-       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
-       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
-       LDKThirtyTwoBytes channel_keys_id_ref;
-       CHECK(channel_keys_id->arr_len == 32);
-       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv, channel_keys_id_ref);
+int64_t  CS_LDK_NextMessageHop_clone(int64_t orig) {
+       LDKNextMessageHop* orig_conv = (LDKNextMessageHop*)untag_ptr(orig);
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_delayed_payment_output(int64_t a) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
+int64_t  CS_LDK_NextMessageHop_node_id(int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK(a->arr_len == 33);
+       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_node_id(a_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_static_payment_output(int64_t a) {
-       LDKStaticPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+int64_t  CS_LDK_NextMessageHop_short_channel_id(int64_t a) {
+       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
+       *ret_copy = NextMessageHop_short_channel_id(a);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SpendableOutputDescriptor_hash(int64_t o) {
-       LDKSpendableOutputDescriptor* o_conv = (LDKSpendableOutputDescriptor*)untag_ptr(o);
-       int64_t ret_conv = SpendableOutputDescriptor_hash(o_conv);
+int64_t  CS_LDK_NextMessageHop_hash(int64_t o) {
+       LDKNextMessageHop* o_conv = (LDKNextMessageHop*)untag_ptr(o);
+       int64_t ret_conv = NextMessageHop_hash(o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_SpendableOutputDescriptor_eq(int64_t a, int64_t b) {
-       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
-       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
-       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
+jboolean  CS_LDK_NextMessageHop_eq(int64_t a, int64_t b) {
+       LDKNextMessageHop* a_conv = (LDKNextMessageHop*)untag_ptr(a);
+       LDKNextMessageHop* b_conv = (LDKNextMessageHop*)untag_ptr(b);
+       jboolean ret_conv = NextMessageHop_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_SpendableOutputDescriptor_write(int64_t obj) {
-       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_SpendableOutputDescriptor_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
-       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_SpendableOutputDescriptor_create_spendable_outputs_psbt(int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = descriptors->arr_len;
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = descriptors->elems;
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       FREE(descriptors);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = outputs->arr_len;
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = outputs->elems;
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
-       }
-       FREE(outputs);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = change_destination_script->arr_len;
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(change_destination_script_ref.data, change_destination_script->elems, change_destination_script_ref.datalen); FREE(change_destination_script);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
-       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
-       LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ), "LDKCResult_C2Tuple_CVec_u8Zu64ZNoneZ");
-       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_ChannelDerivationParameters_free(int64_t this_obj) {
-       LDKChannelDerivationParameters this_obj_conv;
+void  CS_LDK_MessageForwardNode_free(int64_t this_obj) {
+       LDKMessageForwardNode this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelDerivationParameters_free(this_obj_conv);
+       MessageForwardNode_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_get_value_satoshis(int64_t this_ptr) {
-       LDKChannelDerivationParameters this_ptr_conv;
+int8_tArray  CS_LDK_MessageForwardNode_get_node_id(int64_t this_ptr) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelDerivationParameters_get_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, MessageForwardNode_get_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
 }
 
-void  CS_LDK_ChannelDerivationParameters_set_value_satoshis(int64_t this_ptr, int64_t val) {
-       LDKChannelDerivationParameters this_ptr_conv;
+void  CS_LDK_MessageForwardNode_set_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelDerivationParameters_set_value_satoshis(&this_ptr_conv, val);
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       MessageForwardNode_set_node_id(&this_ptr_conv, val_ref);
 }
 
-int8_tArray  CS_LDK_ChannelDerivationParameters_get_keys_id(int64_t this_ptr) {
-       LDKChannelDerivationParameters this_ptr_conv;
+int64_t  CS_LDK_MessageForwardNode_get_short_channel_id(int64_t this_ptr) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *ChannelDerivationParameters_get_keys_id(&this_ptr_conv), 32);
-       return ret_arr;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = MessageForwardNode_get_short_channel_id(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChannelDerivationParameters_set_keys_id(int64_t this_ptr, int8_tArray val) {
-       LDKChannelDerivationParameters this_ptr_conv;
+void  CS_LDK_MessageForwardNode_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKMessageForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       ChannelDerivationParameters_set_keys_id(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_ChannelDerivationParameters_get_transaction_parameters(int64_t this_ptr) {
-       LDKChannelDerivationParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = ChannelDerivationParameters_get_transaction_parameters(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ChannelDerivationParameters_set_transaction_parameters(int64_t this_ptr, int64_t val) {
-       LDKChannelDerivationParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelTransactionParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelTransactionParameters_clone(&val_conv);
-       ChannelDerivationParameters_set_transaction_parameters(&this_ptr_conv, val_conv);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       MessageForwardNode_set_short_channel_id(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_new(int64_t value_satoshis_arg, int8_tArray keys_id_arg, int64_t transaction_parameters_arg) {
-       LDKThirtyTwoBytes keys_id_arg_ref;
-       CHECK(keys_id_arg->arr_len == 32);
-       memcpy(keys_id_arg_ref.data, keys_id_arg->elems, 32); FREE(keys_id_arg);
-       LDKChannelTransactionParameters transaction_parameters_arg_conv;
-       transaction_parameters_arg_conv.inner = untag_ptr(transaction_parameters_arg);
-       transaction_parameters_arg_conv.is_owned = ptr_is_owned(transaction_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(transaction_parameters_arg_conv);
-       transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&transaction_parameters_arg_conv);
-       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_new(value_satoshis_arg, keys_id_arg_ref, transaction_parameters_arg_conv);
+int64_t  CS_LDK_MessageForwardNode_new(int8_tArray node_id_arg, int64_t short_channel_id_arg) {
+       LDKPublicKey node_id_arg_ref;
+       CHECK(node_id_arg->arr_len == 33);
+       memcpy(node_id_arg_ref.compressed_form, node_id_arg->elems, 33); FREE(node_id_arg);
+       void* short_channel_id_arg_ptr = untag_ptr(short_channel_id_arg);
+       CHECK_ACCESS(short_channel_id_arg_ptr);
+       LDKCOption_u64Z short_channel_id_arg_conv = *(LDKCOption_u64Z*)(short_channel_id_arg_ptr);
+       short_channel_id_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id_arg));
+       LDKMessageForwardNode ret_var = MessageForwardNode_new(node_id_arg_ref, short_channel_id_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelDerivationParameters_clone_ptr(LDKChannelDerivationParameters *NONNULL_PTR arg) {
-       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(arg);
+static inline uint64_t MessageForwardNode_clone_ptr(LDKMessageForwardNode *NONNULL_PTR arg) {
+       LDKMessageForwardNode ret_var = MessageForwardNode_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ChannelDerivationParameters_clone_ptr(int64_t arg) {
-       LDKChannelDerivationParameters arg_conv;
+int64_t  CS_LDK_MessageForwardNode_clone_ptr(int64_t arg) {
+       LDKMessageForwardNode arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelDerivationParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = MessageForwardNode_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_clone(int64_t orig) {
-       LDKChannelDerivationParameters orig_conv;
+int64_t  CS_LDK_MessageForwardNode_clone(int64_t orig) {
+       LDKMessageForwardNode orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelDerivationParameters ret_var = ChannelDerivationParameters_clone(&orig_conv);
+       LDKMessageForwardNode ret_var = MessageForwardNode_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ChannelDerivationParameters_eq(int64_t a, int64_t b) {
-       LDKChannelDerivationParameters a_conv;
+int64_t  CS_LDK_MessageForwardNode_hash(int64_t o) {
+       LDKMessageForwardNode o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = MessageForwardNode_hash(&o_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_MessageForwardNode_eq(int64_t a, int64_t b) {
+       LDKMessageForwardNode a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKChannelDerivationParameters b_conv;
+       LDKMessageForwardNode b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = ChannelDerivationParameters_eq(&a_conv, &b_conv);
+       jboolean ret_conv = MessageForwardNode_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ChannelDerivationParameters_write(int64_t obj) {
-       LDKChannelDerivationParameters obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelDerivationParameters_write(&obj_conv);
+void  CS_LDK_MessageContext_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageContext this_ptr_conv = *(LDKMessageContext*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageContext_free(this_ptr_conv);
+}
+
+static inline uint64_t MessageContext_clone_ptr(LDKMessageContext *NONNULL_PTR arg) {
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_MessageContext_clone_ptr(int64_t arg) {
+       LDKMessageContext* arg_conv = (LDKMessageContext*)untag_ptr(arg);
+       int64_t ret_conv = MessageContext_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_MessageContext_clone(int64_t orig) {
+       LDKMessageContext* orig_conv = (LDKMessageContext*)untag_ptr(orig);
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageContext_offers(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersContext a_conv = *(LDKOffersContext*)(a_ptr);
+       a_conv = OffersContext_clone((LDKOffersContext*)untag_ptr(a));
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_offers(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageContext_custom(int8_tArray a) {
+       LDKCVec_u8Z a_ref;
+       a_ref.datalen = a->arr_len;
+       a_ref.data = MALLOC(a_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(a_ref.data, a->elems, a_ref.datalen); FREE(a);
+       LDKMessageContext *ret_copy = MALLOC(sizeof(LDKMessageContext), "LDKMessageContext");
+       *ret_copy = MessageContext_custom(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_OffersContext_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersContext this_ptr_conv = *(LDKOffersContext*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersContext_free(this_ptr_conv);
+}
+
+static inline uint64_t OffersContext_clone_ptr(LDKOffersContext *NONNULL_PTR arg) {
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_OffersContext_clone_ptr(int64_t arg) {
+       LDKOffersContext* arg_conv = (LDKOffersContext*)untag_ptr(arg);
+       int64_t ret_conv = OffersContext_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OffersContext_clone(int64_t orig) {
+       LDKOffersContext* orig_conv = (LDKOffersContext*)untag_ptr(orig);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersContext_invoice_request(int64_t nonce) {
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_invoice_request(nonce_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersContext_outbound_payment(int8_tArray payment_id, int64_t nonce, int8_tArray hmac) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKNonce nonce_conv;
+       nonce_conv.inner = untag_ptr(nonce);
+       nonce_conv.is_owned = ptr_is_owned(nonce);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(nonce_conv);
+       nonce_conv = Nonce_clone(&nonce_conv);
+       LDKThirtyTwoBytes hmac_ref;
+       CHECK(hmac->arr_len == 32);
+       memcpy(hmac_ref.data, hmac->elems, 32); FREE(hmac);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_outbound_payment(payment_id_ref, nonce_conv, hmac_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_OffersContext_inbound_payment(int8_tArray payment_hash) {
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKOffersContext *ret_copy = MALLOC(sizeof(LDKOffersContext), "LDKOffersContext");
+       *ret_copy = OffersContext_inbound_payment(payment_hash_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_OffersContext_eq(int64_t a, int64_t b) {
+       LDKOffersContext* a_conv = (LDKOffersContext*)untag_ptr(a);
+       LDKOffersContext* b_conv = (LDKOffersContext*)untag_ptr(b);
+       jboolean ret_conv = OffersContext_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_MessageContext_write(int64_t obj) {
+       LDKMessageContext* obj_conv = (LDKMessageContext*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = MessageContext_write(obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ChannelDerivationParameters_read(int8_tArray ser) {
+int64_t  CS_LDK_MessageContext_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
-       *ret_conv = ChannelDerivationParameters_read(ser_ref);
+       LDKCResult_MessageContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_MessageContextDecodeErrorZ), "LDKCResult_MessageContextDecodeErrorZ");
+       *ret_conv = MessageContext_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_HTLCDescriptor_free(int64_t this_obj) {
-       LDKHTLCDescriptor this_obj_conv;
+int8_tArray  CS_LDK_OffersContext_write(int64_t obj) {
+       LDKOffersContext* obj_conv = (LDKOffersContext*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = OffersContext_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_OffersContext_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_OffersContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersContextDecodeErrorZ), "LDKCResult_OffersContextDecodeErrorZ");
+       *ret_conv = OffersContext_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_FundingInfo_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKFundingInfo this_ptr_conv = *(LDKFundingInfo*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       FundingInfo_free(this_ptr_conv);
+}
+
+static inline uint64_t FundingInfo_clone_ptr(LDKFundingInfo *NONNULL_PTR arg) {
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_FundingInfo_clone_ptr(int64_t arg) {
+       LDKFundingInfo* arg_conv = (LDKFundingInfo*)untag_ptr(arg);
+       int64_t ret_conv = FundingInfo_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_FundingInfo_clone(int64_t orig) {
+       LDKFundingInfo* orig_conv = (LDKFundingInfo*)untag_ptr(orig);
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FundingInfo_tx(int8_tArray transaction) {
+       LDKTransaction transaction_ref;
+       transaction_ref.datalen = transaction->arr_len;
+       transaction_ref.data = MALLOC(transaction_ref.datalen, "LDKTransaction Bytes");
+       memcpy(transaction_ref.data, transaction->elems, transaction_ref.datalen); FREE(transaction);
+       transaction_ref.data_is_owned = true;
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_tx(transaction_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_FundingInfo_out_point(int64_t outpoint) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       LDKFundingInfo *ret_copy = MALLOC(sizeof(LDKFundingInfo), "LDKFundingInfo");
+       *ret_copy = FundingInfo_out_point(outpoint_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_FundingInfo_eq(int64_t a, int64_t b) {
+       LDKFundingInfo* a_conv = (LDKFundingInfo*)untag_ptr(a);
+       LDKFundingInfo* b_conv = (LDKFundingInfo*)untag_ptr(b);
+       jboolean ret_conv = FundingInfo_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_FundingInfo_write(int64_t obj) {
+       LDKFundingInfo* obj_conv = (LDKFundingInfo*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = FundingInfo_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_FundingInfo_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_FundingInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingInfoDecodeErrorZ), "LDKCResult_FundingInfoDecodeErrorZ");
+       *ret_conv = FundingInfo_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_PaymentPurpose_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPaymentPurpose this_ptr_conv = *(LDKPaymentPurpose*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PaymentPurpose_free(this_ptr_conv);
+}
+
+static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_PaymentPurpose_clone_ptr(int64_t arg) {
+       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)untag_ptr(arg);
+       int64_t ret_conv = PaymentPurpose_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_PaymentPurpose_clone(int64_t orig) {
+       LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)untag_ptr(orig);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_bolt11_invoice_payment(int64_t payment_preimage, int8_tArray payment_secret) {
+       void* payment_preimage_ptr = untag_ptr(payment_preimage);
+       CHECK_ACCESS(payment_preimage_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_bolt11_invoice_payment(payment_preimage_conv, payment_secret_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_bolt12_offer_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
+       void* payment_preimage_ptr = untag_ptr(payment_preimage);
+       CHECK_ACCESS(payment_preimage_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKBolt12OfferContext payment_context_conv;
+       payment_context_conv.inner = untag_ptr(payment_context);
+       payment_context_conv.is_owned = ptr_is_owned(payment_context);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
+       payment_context_conv = Bolt12OfferContext_clone(&payment_context_conv);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_bolt12_offer_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_bolt12_refund_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
+       void* payment_preimage_ptr = untag_ptr(payment_preimage);
+       CHECK_ACCESS(payment_preimage_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
+       LDKThirtyTwoBytes payment_secret_ref;
+       CHECK(payment_secret->arr_len == 32);
+       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
+       LDKBolt12RefundContext payment_context_conv;
+       payment_context_conv.inner = untag_ptr(payment_context);
+       payment_context_conv.is_owned = ptr_is_owned(payment_context);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
+       payment_context_conv = Bolt12RefundContext_clone(&payment_context_conv);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_bolt12_refund_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_PaymentPurpose_spontaneous_payment(int8_tArray a) {
+       LDKThirtyTwoBytes a_ref;
+       CHECK(a->arr_len == 32);
+       memcpy(a_ref.data, a->elems, 32); FREE(a);
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_spontaneous_payment(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_PaymentPurpose_eq(int64_t a, int64_t b) {
+       LDKPaymentPurpose* a_conv = (LDKPaymentPurpose*)untag_ptr(a);
+       LDKPaymentPurpose* b_conv = (LDKPaymentPurpose*)untag_ptr(b);
+       jboolean ret_conv = PaymentPurpose_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_PaymentPurpose_preimage(int64_t this_arg) {
+       LDKPaymentPurpose* this_arg_conv = (LDKPaymentPurpose*)untag_ptr(this_arg);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = PaymentPurpose_preimage(this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int8_tArray  CS_LDK_PaymentPurpose_write(int64_t obj) {
+       LDKPaymentPurpose* obj_conv = (LDKPaymentPurpose*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PaymentPurpose_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_PaymentPurpose_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_PaymentPurposeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPurposeDecodeErrorZ), "LDKCResult_PaymentPurposeDecodeErrorZ");
+       *ret_conv = PaymentPurpose_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
+}
+
+void  CS_LDK_ClaimedHTLC_free(int64_t this_obj) {
+       LDKClaimedHTLC this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       HTLCDescriptor_free(this_obj_conv);
+       ClaimedHTLC_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int64_t  CS_LDK_ClaimedHTLC_get_channel_id(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters ret_var = HTLCDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
+       LDKChannelId ret_var = ClaimedHTLC_get_channel_id(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_HTLCDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_channel_id(int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters val_conv;
+       LDKChannelId val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelDerivationParameters_clone(&val_conv);
-       HTLCDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
+       val_conv = ChannelId_clone(&val_conv);
+       ClaimedHTLC_set_channel_id(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_get_commitment_txid(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int8_tArray  CS_LDK_ClaimedHTLC_get_user_channel_id(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *HTLCDescriptor_get_commitment_txid(&this_ptr_conv), 32);
+       int8_tArray ret_arr = init_int8_tArray(16, __LINE__);
+       memcpy(ret_arr->elems, ClaimedHTLC_get_user_channel_id(&this_ptr_conv).le_bytes, 16);
        return ret_arr;
 }
 
-void  CS_LDK_HTLCDescriptor_set_commitment_txid(int64_t this_ptr, int8_tArray val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_user_channel_id(int64_t this_ptr, int8_tArray val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       HTLCDescriptor_set_commitment_txid(&this_ptr_conv, val_ref);
+       LDKU128 val_ref;
+       CHECK(val->arr_len == 16);
+       memcpy(val_ref.le_bytes, val->elems, 16); FREE(val);
+       ClaimedHTLC_set_user_channel_id(&this_ptr_conv, val_ref);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_get_per_commitment_number(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int32_t  CS_LDK_ClaimedHTLC_get_cltv_expiry(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = HTLCDescriptor_get_per_commitment_number(&this_ptr_conv);
+       int32_t ret_conv = ClaimedHTLC_get_cltv_expiry(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_per_commitment_number(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_cltv_expiry(int64_t this_ptr, int32_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       HTLCDescriptor_set_per_commitment_number(&this_ptr_conv, val);
+       ClaimedHTLC_set_cltv_expiry(&this_ptr_conv, val);
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_get_per_commitment_point(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int64_t  CS_LDK_ClaimedHTLC_get_value_msat(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, HTLCDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       int64_t ret_conv = ClaimedHTLC_get_value_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_per_commitment_point(int64_t this_ptr, int8_tArray val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_value_msat(int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       HTLCDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+       ClaimedHTLC_set_value_msat(&this_ptr_conv, val);
 }
 
-int32_t  CS_LDK_HTLCDescriptor_get_feerate_per_kw(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
+int64_t  CS_LDK_ClaimedHTLC_get_counterparty_skimmed_fee_msat(int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = HTLCDescriptor_get_feerate_per_kw(&this_ptr_conv);
+       int64_t ret_conv = ClaimedHTLC_get_counterparty_skimmed_fee_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_feerate_per_kw(int64_t this_ptr, int32_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
+void  CS_LDK_ClaimedHTLC_set_counterparty_skimmed_fee_msat(int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       HTLCDescriptor_set_feerate_per_kw(&this_ptr_conv, val);
+       ClaimedHTLC_set_counterparty_skimmed_fee_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_get_htlc(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKHTLCOutputInCommitment ret_var = HTLCDescriptor_get_htlc(&this_ptr_conv);
+int64_t  CS_LDK_ClaimedHTLC_new(int64_t channel_id_arg, int8_tArray user_channel_id_arg, int32_t cltv_expiry_arg, int64_t value_msat_arg, int64_t counterparty_skimmed_fee_msat_arg) {
+       LDKChannelId channel_id_arg_conv;
+       channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
+       channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
+       channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
+       LDKU128 user_channel_id_arg_ref;
+       CHECK(user_channel_id_arg->arr_len == 16);
+       memcpy(user_channel_id_arg_ref.le_bytes, user_channel_id_arg->elems, 16); FREE(user_channel_id_arg);
+       LDKClaimedHTLC ret_var = ClaimedHTLC_new(channel_id_arg_conv, user_channel_id_arg_ref, cltv_expiry_arg, value_msat_arg, counterparty_skimmed_fee_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_HTLCDescriptor_set_htlc(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKHTLCOutputInCommitment val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = HTLCOutputInCommitment_clone(&val_conv);
-       HTLCDescriptor_set_htlc(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_HTLCDescriptor_get_preimage(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
-       *ret_copy = HTLCDescriptor_get_preimage(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg) {
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+int64_t  CS_LDK_ClaimedHTLC_clone_ptr(int64_t arg) {
+       LDKClaimedHTLC arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ClaimedHTLC_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-void  CS_LDK_HTLCDescriptor_set_preimage(int64_t this_ptr, int64_t val) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
-       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
-       HTLCDescriptor_set_preimage(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_ClaimedHTLC_clone(int64_t orig) {
+       LDKClaimedHTLC orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_get_counterparty_sig(int64_t this_ptr) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(64, __LINE__);
-       memcpy(ret_arr->elems, HTLCDescriptor_get_counterparty_sig(&this_ptr_conv).compact_form, 64);
-       return ret_arr;
+jboolean  CS_LDK_ClaimedHTLC_eq(int64_t a, int64_t b) {
+       LDKClaimedHTLC a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKClaimedHTLC b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ClaimedHTLC_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_HTLCDescriptor_set_counterparty_sig(int64_t this_ptr, int8_tArray val) {
-       LDKHTLCDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKECDSASignature val_ref;
-       CHECK(val->arr_len == 64);
-       memcpy(val_ref.compact_form, val->elems, 64); FREE(val);
-       HTLCDescriptor_set_counterparty_sig(&this_ptr_conv, val_ref);
-}
-
-int64_t  CS_LDK_HTLCDescriptor_new(int64_t channel_derivation_parameters_arg, int8_tArray commitment_txid_arg, int64_t per_commitment_number_arg, int8_tArray per_commitment_point_arg, int32_t feerate_per_kw_arg, int64_t htlc_arg, int64_t preimage_arg, int8_tArray counterparty_sig_arg) {
-       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
-       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
-       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
-       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
-       LDKThirtyTwoBytes commitment_txid_arg_ref;
-       CHECK(commitment_txid_arg->arr_len == 32);
-       memcpy(commitment_txid_arg_ref.data, commitment_txid_arg->elems, 32); FREE(commitment_txid_arg);
-       LDKPublicKey per_commitment_point_arg_ref;
-       CHECK(per_commitment_point_arg->arr_len == 33);
-       memcpy(per_commitment_point_arg_ref.compressed_form, per_commitment_point_arg->elems, 33); FREE(per_commitment_point_arg);
-       LDKHTLCOutputInCommitment htlc_arg_conv;
-       htlc_arg_conv.inner = untag_ptr(htlc_arg);
-       htlc_arg_conv.is_owned = ptr_is_owned(htlc_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_arg_conv);
-       htlc_arg_conv = HTLCOutputInCommitment_clone(&htlc_arg_conv);
-       void* preimage_arg_ptr = untag_ptr(preimage_arg);
-       CHECK_ACCESS(preimage_arg_ptr);
-       LDKCOption_ThirtyTwoBytesZ preimage_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(preimage_arg_ptr);
-       preimage_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(preimage_arg));
-       LDKECDSASignature counterparty_sig_arg_ref;
-       CHECK(counterparty_sig_arg->arr_len == 64);
-       memcpy(counterparty_sig_arg_ref.compact_form, counterparty_sig_arg->elems, 64); FREE(counterparty_sig_arg);
-       LDKHTLCDescriptor ret_var = HTLCDescriptor_new(channel_derivation_parameters_arg_conv, commitment_txid_arg_ref, per_commitment_number_arg, per_commitment_point_arg_ref, feerate_per_kw_arg, htlc_arg_conv, preimage_arg_conv, counterparty_sig_arg_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t HTLCDescriptor_clone_ptr(LDKHTLCDescriptor *NONNULL_PTR arg) {
-       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_HTLCDescriptor_clone_ptr(int64_t arg) {
-       LDKHTLCDescriptor arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = HTLCDescriptor_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_HTLCDescriptor_clone(int64_t orig) {
-       LDKHTLCDescriptor orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKHTLCDescriptor ret_var = HTLCDescriptor_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_HTLCDescriptor_eq(int64_t a, int64_t b) {
-       LDKHTLCDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKHTLCDescriptor b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = HTLCDescriptor_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_HTLCDescriptor_write(int64_t obj) {
-       LDKHTLCDescriptor obj_conv;
+int8_tArray  CS_LDK_ClaimedHTLC_write(int64_t obj) {
+       LDKClaimedHTLC obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = HTLCDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ClaimedHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_read(int8_tArray ser) {
+int64_t  CS_LDK_ClaimedHTLC_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
-       *ret_conv = HTLCDescriptor_read(ser_ref);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = ClaimedHTLC_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDescriptor_outpoint(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutPoint ret_var = HTLCDescriptor_outpoint(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+void  CS_LDK_PathFailure_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPathFailure this_ptr_conv = *(LDKPathFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       PathFailure_free(this_ptr_conv);
+}
+
+static inline uint64_t PathFailure_clone_ptr(LDKPathFailure *NONNULL_PTR arg) {
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_PathFailure_clone_ptr(int64_t arg) {
+       LDKPathFailure* arg_conv = (LDKPathFailure*)untag_ptr(arg);
+       int64_t ret_conv = PathFailure_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_HTLCDescriptor_previous_utxo(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = HTLCDescriptor_previous_utxo(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+int64_t  CS_LDK_PathFailure_clone(int64_t orig) {
+       LDKPathFailure* orig_conv = (LDKPathFailure*)untag_ptr(orig);
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_unsigned_tx_input(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
-       *ret_ref = HTLCDescriptor_unsigned_tx_input(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+int64_t  CS_LDK_PathFailure_initial_send(int64_t err) {
+       void* err_ptr = untag_ptr(err);
+       CHECK_ACCESS(err_ptr);
+       LDKAPIError err_conv = *(LDKAPIError*)(err_ptr);
+       err_conv = APIError_clone((LDKAPIError*)untag_ptr(err));
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_initial_send(err_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_tx_output(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = HTLCDescriptor_tx_output(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+int64_t  CS_LDK_PathFailure_on_path(int64_t network_update) {
+       void* network_update_ptr = untag_ptr(network_update);
+       CHECK_ACCESS(network_update_ptr);
+       LDKCOption_NetworkUpdateZ network_update_conv = *(LDKCOption_NetworkUpdateZ*)(network_update_ptr);
+       network_update_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)untag_ptr(network_update));
+       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
+       *ret_copy = PathFailure_on_path(network_update_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_witness_script(int64_t this_arg) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = HTLCDescriptor_witness_script(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_PathFailure_eq(int64_t a, int64_t b) {
+       LDKPathFailure* a_conv = (LDKPathFailure*)untag_ptr(a);
+       LDKPathFailure* b_conv = (LDKPathFailure*)untag_ptr(b);
+       jboolean ret_conv = PathFailure_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_HTLCDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature, int8_tArray witness_script) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKECDSASignature signature_ref;
-       CHECK(signature->arr_len == 64);
-       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
-       LDKu8slice witness_script_ref;
-       witness_script_ref.datalen = witness_script->arr_len;
-       witness_script_ref.data = witness_script->elems;
-       LDKWitness ret_var = HTLCDescriptor_tx_input_witness(&this_arg_conv, signature_ref, witness_script_ref);
+int8_tArray  CS_LDK_PathFailure_write(int64_t obj) {
+       LDKPathFailure* obj_conv = (LDKPathFailure*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PathFailure_write(obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       Witness_free(ret_var);
-       FREE(witness_script);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_HTLCDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
-       LDKHTLCDescriptor this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
-       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = HTLCDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_PathFailure_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_PathFailureZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PathFailureZDecodeErrorZ), "LDKCResult_COption_PathFailureZDecodeErrorZ");
+       *ret_conv = PathFailure_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ChannelSigner_free(int64_t this_ptr) {
+void  CS_LDK_ClosureReason_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
+       LDKClosureReason this_ptr_conv = *(LDKClosureReason*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       ChannelSigner_free(this_ptr_conv);
+       ClosureReason_free(this_ptr_conv);
 }
 
-int32_t  CS_LDK_Recipient_clone(int64_t orig) {
-       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
-       int32_t ret_conv = LDKRecipient_to_cs(Recipient_clone(orig_conv));
+static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+int64_t  CS_LDK_ClosureReason_clone_ptr(int64_t arg) {
+       LDKClosureReason* arg_conv = (LDKClosureReason*)untag_ptr(arg);
+       int64_t ret_conv = ClosureReason_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_Recipient_node() {
-       int32_t ret_conv = LDKRecipient_to_cs(Recipient_node());
-       return ret_conv;
+int64_t  CS_LDK_ClosureReason_clone(int64_t orig) {
+       LDKClosureReason* orig_conv = (LDKClosureReason*)untag_ptr(orig);
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int32_t  CS_LDK_Recipient_phantom_node() {
-       int32_t ret_conv = LDKRecipient_to_cs(Recipient_phantom_node());
-       return ret_conv;
+int64_t  CS_LDK_ClosureReason_counterparty_force_closed(int64_t peer_msg) {
+       LDKUntrustedString peer_msg_conv;
+       peer_msg_conv.inner = untag_ptr(peer_msg);
+       peer_msg_conv.is_owned = ptr_is_owned(peer_msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_msg_conv);
+       peer_msg_conv = UntrustedString_clone(&peer_msg_conv);
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_counterparty_force_closed(peer_msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_EntropySource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EntropySource_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_holder_force_closed(int64_t broadcasted_latest_txn) {
+       void* broadcasted_latest_txn_ptr = untag_ptr(broadcasted_latest_txn);
+       CHECK_ACCESS(broadcasted_latest_txn_ptr);
+       LDKCOption_boolZ broadcasted_latest_txn_conv = *(LDKCOption_boolZ*)(broadcasted_latest_txn_ptr);
+       broadcasted_latest_txn_conv = COption_boolZ_clone((LDKCOption_boolZ*)untag_ptr(broadcasted_latest_txn));
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_holder_force_closed(broadcasted_latest_txn_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_NodeSigner_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NodeSigner_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_legacy_cooperative_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_legacy_cooperative_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OutputSpender_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOutputSpender this_ptr_conv = *(LDKOutputSpender*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OutputSpender_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_counterparty_initiated_cooperative_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_counterparty_initiated_cooperative_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_SignerProvider_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignerProvider_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_locally_initiated_cooperative_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_locally_initiated_cooperative_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ChangeDestinationSource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKChangeDestinationSource this_ptr_conv = *(LDKChangeDestinationSource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ChangeDestinationSource_free(this_ptr_conv);
+int64_t  CS_LDK_ClosureReason_commitment_tx_confirmed() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_commitment_tx_confirmed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_free(int64_t this_obj) {
-       LDKInMemorySigner this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InMemorySigner_free(this_obj_conv);
+int64_t  CS_LDK_ClosureReason_funding_timed_out() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_funding_timed_out();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_funding_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_funding_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_processing_error(jstring err) {
+       LDKStr err_conv = str_ref_to_owned_c(err);
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_processing_error(err_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_funding_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_disconnected_peer() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_disconnected_peer();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_revocation_base_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_revocation_base_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_outdated_channel_manager() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_outdated_channel_manager();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_revocation_base_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_counterparty_coop_closed_unfunded_channel() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_counterparty_coop_closed_unfunded_channel();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_payment_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_payment_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_funding_batch_closure() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_funding_batch_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_payment_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_htlcs_timed_out() {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_htlcs_timed_out();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_delayed_payment_base_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv), 32);
-       return ret_arr;
+int64_t  CS_LDK_ClosureReason_peer_feerate_too_low(int32_t peer_feerate_sat_per_kw, int32_t required_feerate_sat_per_kw) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_peer_feerate_too_low(peer_feerate_sat_per_kw, required_feerate_sat_per_kw);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_InMemorySigner_set_delayed_payment_base_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
+jboolean  CS_LDK_ClosureReason_eq(int64_t a, int64_t b) {
+       LDKClosureReason* a_conv = (LDKClosureReason*)untag_ptr(a);
+       LDKClosureReason* b_conv = (LDKClosureReason*)untag_ptr(b);
+       jboolean ret_conv = ClosureReason_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_htlc_base_key(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_htlc_base_key(&this_ptr_conv), 32);
+jstring  CS_LDK_ClosureReason_to_str(int64_t o) {
+       LDKClosureReason* o_conv = (LDKClosureReason*)untag_ptr(o);
+       LDKStr ret_str = ClosureReason_to_str(o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+int8_tArray  CS_LDK_ClosureReason_write(int64_t obj) {
+       LDKClosureReason* obj_conv = (LDKClosureReason*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = ClosureReason_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_InMemorySigner_set_htlc_base_key(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.bytes, val->elems, 32); FREE(val);
-       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
+int64_t  CS_LDK_ClosureReason_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = ClosureReason_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_InMemorySigner_get_commitment_seed(int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *InMemorySigner_get_commitment_seed(&this_ptr_conv), 32);
-       return ret_arr;
+void  CS_LDK_HTLCDestination_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKHTLCDestination this_ptr_conv = *(LDKHTLCDestination*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       HTLCDestination_free(this_ptr_conv);
 }
 
-void  CS_LDK_InMemorySigner_set_commitment_seed(int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
-}
-
-static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
-       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+static inline uint64_t HTLCDestination_clone_ptr(LDKHTLCDestination *NONNULL_PTR arg) {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_InMemorySigner_clone_ptr(int64_t arg) {
-       LDKInMemorySigner arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
+int64_t  CS_LDK_HTLCDestination_clone_ptr(int64_t arg) {
+       LDKHTLCDestination* arg_conv = (LDKHTLCDestination*)untag_ptr(arg);
+       int64_t ret_conv = HTLCDestination_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_InMemorySigner_clone(int64_t orig) {
-       LDKInMemorySigner orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InMemorySigner_new(int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
-       LDKSecretKey funding_key_ref;
-       CHECK(funding_key->arr_len == 32);
-       memcpy(funding_key_ref.bytes, funding_key->elems, 32); FREE(funding_key);
-       LDKSecretKey revocation_base_key_ref;
-       CHECK(revocation_base_key->arr_len == 32);
-       memcpy(revocation_base_key_ref.bytes, revocation_base_key->elems, 32); FREE(revocation_base_key);
-       LDKSecretKey payment_key_ref;
-       CHECK(payment_key->arr_len == 32);
-       memcpy(payment_key_ref.bytes, payment_key->elems, 32); FREE(payment_key);
-       LDKSecretKey delayed_payment_base_key_ref;
-       CHECK(delayed_payment_base_key->arr_len == 32);
-       memcpy(delayed_payment_base_key_ref.bytes, delayed_payment_base_key->elems, 32); FREE(delayed_payment_base_key);
-       LDKSecretKey htlc_base_key_ref;
-       CHECK(htlc_base_key->arr_len == 32);
-       memcpy(htlc_base_key_ref.bytes, htlc_base_key->elems, 32); FREE(htlc_base_key);
-       LDKThirtyTwoBytes commitment_seed_ref;
-       CHECK(commitment_seed->arr_len == 32);
-       memcpy(commitment_seed_ref.data, commitment_seed->elems, 32); FREE(commitment_seed);
-       LDKThirtyTwoBytes channel_keys_id_ref;
-       CHECK(channel_keys_id->arr_len == 32);
-       memcpy(channel_keys_id_ref.data, channel_keys_id->elems, 32); FREE(channel_keys_id);
-       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
-       CHECK(rand_bytes_unique_start->arr_len == 32);
-       memcpy(rand_bytes_unique_start_ref.data, rand_bytes_unique_start->elems, 32); FREE(rand_bytes_unique_start);
-       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InMemorySigner_counterparty_pubkeys(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_InMemorySigner_counterparty_selected_contest_delay(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
+int64_t  CS_LDK_HTLCDestination_clone(int64_t orig) {
+       LDKHTLCDestination* orig_conv = (LDKHTLCDestination*)untag_ptr(orig);
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_holder_selected_contest_delay(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
+int64_t  CS_LDK_HTLCDestination_next_hop_channel(int8_tArray node_id, int64_t channel_id) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_next_hop_channel(node_id_ref, channel_id_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_is_outbound(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
-       *ret_copy = InMemorySigner_is_outbound(&this_arg_conv);
+int64_t  CS_LDK_HTLCDestination_unknown_next_hop(int64_t requested_forward_scid) {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_unknown_next_hop(requested_forward_scid);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_funding_outpoint(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_HTLCDestination_invalid_forward(int64_t requested_forward_scid) {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_invalid_forward(requested_forward_scid);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_get_channel_parameters(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_HTLCDestination_invalid_onion() {
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_invalid_onion();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_channel_type_features(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_HTLCDestination_failed_payment(int8_tArray payment_hash) {
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
+       *ret_copy = HTLCDestination_failed_payment(payment_hash_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_InMemorySigner_sign_counterparty_payment_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = spend_tx->arr_len;
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
-       spend_tx_ref.data_is_owned = true;
-       LDKStaticPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
-       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_sign_dynamic_p2wsh_input(int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = spend_tx->arr_len;
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       memcpy(spend_tx_ref.data, spend_tx->elems, spend_tx_ref.datalen); FREE(spend_tx);
-       spend_tx_ref.data_is_owned = true;
-       LDKDelayedPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_WitnessNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_WitnessNoneZ), "LDKCResult_WitnessNoneZ");
-       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_EntropySource(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_ChannelSigner(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
-       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_EcdsaChannelSigner(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-int64_t  CS_LDK_InMemorySigner_as_WriteableEcdsaChannelSigner(int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_WriteableEcdsaChannelSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jboolean  CS_LDK_HTLCDestination_eq(int64_t a, int64_t b) {
+       LDKHTLCDestination* a_conv = (LDKHTLCDestination*)untag_ptr(a);
+       LDKHTLCDestination* b_conv = (LDKHTLCDestination*)untag_ptr(b);
+       jboolean ret_conv = HTLCDestination_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_InMemorySigner_write(int64_t obj) {
-       LDKInMemorySigner obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
+int8_tArray  CS_LDK_HTLCDestination_write(int64_t obj) {
+       LDKHTLCDestination* obj_conv = (LDKHTLCDestination*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = HTLCDestination_write(obj_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_InMemorySigner_read(int8_tArray ser, int64_t arg) {
+int64_t  CS_LDK_HTLCDestination_read(int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = ser->arr_len;
        ser_ref.data = ser->elems;
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
-       if (arg_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&arg_conv);
-       }
-       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
-       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
+       LDKCResult_COption_HTLCDestinationZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_HTLCDestinationZDecodeErrorZ), "LDKCResult_COption_HTLCDestinationZDecodeErrorZ");
+       *ret_conv = HTLCDestination_read(ser_ref);
        FREE(ser);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_KeysManager_free(int64_t this_obj) {
-       LDKKeysManager this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       KeysManager_free(this_obj_conv);
+int32_t  CS_LDK_PaymentFailureReason_clone(int64_t orig) {
+       LDKPaymentFailureReason* orig_conv = (LDKPaymentFailureReason*)untag_ptr(orig);
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_clone(orig_conv));
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
-       uint8_t seed_arr[32];
-       CHECK(seed->arr_len == 32);
-       memcpy(seed_arr, seed->elems, 32); FREE(seed);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_PaymentFailureReason_recipient_rejected() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_recipient_rejected());
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_KeysManager_get_node_secret_key(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, KeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
-       return ret_arr;
+int32_t  CS_LDK_PaymentFailureReason_user_abandoned() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_user_abandoned());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       uint8_t params_arr[32];
-       CHECK(params->arr_len == 32);
-       memcpy(params_arr, params->elems, 32); FREE(params);
-       uint8_t (*params_ref)[32] = &params_arr;
-       LDKInMemorySigner ret_var = KeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int32_t  CS_LDK_PaymentFailureReason_retries_exhausted() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_retries_exhausted());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_sign_spendable_outputs_psbt(int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = descriptors->arr_len;
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = descriptors->elems;
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       FREE(descriptors);
-       LDKCVec_u8Z psbt_ref;
-       psbt_ref.datalen = psbt->arr_len;
-       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(psbt_ref.data, psbt->elems, psbt_ref.datalen); FREE(psbt);
-       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
-       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
-       return tag_ptr(ret_conv, true);
+int32_t  CS_LDK_PaymentFailureReason_payment_expired() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_payment_expired());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_EntropySource(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_route_not_found() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_route_not_found());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_NodeSigner(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_unexpected_error() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_unexpected_error());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_OutputSpender(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
-       *ret_ret = KeysManager_as_OutputSpender(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_unknown_required_features() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_unknown_required_features());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_KeysManager_as_SignerProvider(int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int32_t  CS_LDK_PaymentFailureReason_invoice_request_expired() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_invoice_request_expired());
+       return ret_conv;
 }
 
-void  CS_LDK_PhantomKeysManager_free(int64_t this_obj) {
-       LDKPhantomKeysManager this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PhantomKeysManager_free(this_obj_conv);
+int32_t  CS_LDK_PaymentFailureReason_invoice_request_rejected() {
+       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_invoice_request_rejected());
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_EntropySource(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jboolean  CS_LDK_PaymentFailureReason_eq(int64_t a, int64_t b) {
+       LDKPaymentFailureReason* a_conv = (LDKPaymentFailureReason*)untag_ptr(a);
+       LDKPaymentFailureReason* b_conv = (LDKPaymentFailureReason*)untag_ptr(b);
+       jboolean ret_conv = PaymentFailureReason_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_NodeSigner(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int8_tArray  CS_LDK_PaymentFailureReason_write(int64_t obj) {
+       LDKPaymentFailureReason* obj_conv = (LDKPaymentFailureReason*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = PaymentFailureReason_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_OutputSpender(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOutputSpender* ret_ret = MALLOC(sizeof(LDKOutputSpender), "LDKOutputSpender");
-       *ret_ret = PhantomKeysManager_as_OutputSpender(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_PaymentFailureReason_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ), "LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ");
+       *ret_conv = PaymentFailureReason_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_PhantomKeysManager_as_SignerProvider(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+void  CS_LDK_Event_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEvent this_ptr_conv = *(LDKEvent*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Event_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_PhantomKeysManager_new(int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
-       uint8_t seed_arr[32];
-       CHECK(seed->arr_len == 32);
-       memcpy(seed_arr, seed->elems, 32); FREE(seed);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       uint8_t cross_node_seed_arr[32];
-       CHECK(cross_node_seed->arr_len == 32);
-       memcpy(cross_node_seed_arr, cross_node_seed->elems, 32); FREE(cross_node_seed);
-       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
-       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+int64_t  CS_LDK_Event_clone_ptr(int64_t arg) {
+       LDKEvent* arg_conv = (LDKEvent*)untag_ptr(arg);
+       int64_t ret_conv = Event_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-int64_t  CS_LDK_PhantomKeysManager_derive_channel_keys(int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       uint8_t params_arr[32];
-       CHECK(params->arr_len == 32);
-       memcpy(params_arr, params->elems, 32); FREE(params);
-       uint8_t (*params_ref)[32] = &params_arr;
-       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_clone(int64_t orig) {
+       LDKEvent* orig_conv = (LDKEvent*)untag_ptr(orig);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_PhantomKeysManager_get_node_secret_key(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes, 32);
-       return ret_arr;
-}
-
-int8_tArray  CS_LDK_PhantomKeysManager_get_phantom_node_secret_key(int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes, 32);
-       return ret_arr;
-}
-
-void  CS_LDK_RandomBytes_free(int64_t this_obj) {
-       LDKRandomBytes this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RandomBytes_free(this_obj_conv);
+int64_t  CS_LDK_Event_funding_generation_ready(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t channel_value_satoshis, int8_tArray output_script, int8_tArray user_channel_id) {
+       LDKChannelId temporary_channel_id_conv;
+       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
+       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKCVec_u8Z output_script_ref;
+       output_script_ref.datalen = output_script->arr_len;
+       output_script_ref.data = MALLOC(output_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       memcpy(output_script_ref.data, output_script->elems, output_script_ref.datalen); FREE(output_script);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_funding_generation_ready(temporary_channel_id_conv, counterparty_node_id_ref, channel_value_satoshis, output_script_ref, user_channel_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_RandomBytes_new(int8_tArray seed) {
-       LDKThirtyTwoBytes seed_ref;
-       CHECK(seed->arr_len == 32);
-       memcpy(seed_ref.data, seed->elems, 32); FREE(seed);
-       LDKRandomBytes ret_var = RandomBytes_new(seed_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_funding_tx_broadcast_safe(int64_t channel_id, int8_tArray user_channel_id, int64_t funding_txo, int8_tArray counterparty_node_id, int64_t former_temporary_channel_id) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKOutPoint funding_txo_conv;
+       funding_txo_conv.inner = untag_ptr(funding_txo);
+       funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
+       funding_txo_conv = OutPoint_clone(&funding_txo_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKChannelId former_temporary_channel_id_conv;
+       former_temporary_channel_id_conv.inner = untag_ptr(former_temporary_channel_id);
+       former_temporary_channel_id_conv.is_owned = ptr_is_owned(former_temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_conv);
+       former_temporary_channel_id_conv = ChannelId_clone(&former_temporary_channel_id_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_funding_tx_broadcast_safe(channel_id_conv, user_channel_id_ref, funding_txo_conv, counterparty_node_id_ref, former_temporary_channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_RandomBytes_as_EntropySource(int64_t this_arg) {
-       LDKRandomBytes this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = RandomBytes_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_Event_payment_claimable(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int64_t via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
+       LDKPublicKey receiver_node_id_ref;
+       CHECK(receiver_node_id->arr_len == 33);
+       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKRecipientOnionFields onion_fields_conv;
+       onion_fields_conv.inner = untag_ptr(onion_fields);
+       onion_fields_conv.is_owned = ptr_is_owned(onion_fields);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_conv);
+       onion_fields_conv = RecipientOnionFields_clone(&onion_fields_conv);
+       void* purpose_ptr = untag_ptr(purpose);
+       CHECK_ACCESS(purpose_ptr);
+       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
+       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
+       LDKChannelId via_channel_id_conv;
+       via_channel_id_conv.inner = untag_ptr(via_channel_id);
+       via_channel_id_conv.is_owned = ptr_is_owned(via_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(via_channel_id_conv);
+       via_channel_id_conv = ChannelId_clone(&via_channel_id_conv);
+       void* via_user_channel_id_ptr = untag_ptr(via_user_channel_id);
+       CHECK_ACCESS(via_user_channel_id_ptr);
+       LDKCOption_U128Z via_user_channel_id_conv = *(LDKCOption_U128Z*)(via_user_channel_id_ptr);
+       via_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(via_user_channel_id));
+       void* claim_deadline_ptr = untag_ptr(claim_deadline);
+       CHECK_ACCESS(claim_deadline_ptr);
+       LDKCOption_u32Z claim_deadline_conv = *(LDKCOption_u32Z*)(claim_deadline_ptr);
+       claim_deadline_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(claim_deadline));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_conv, via_user_channel_id_conv, claim_deadline_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_EcdsaChannelSigner_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EcdsaChannelSigner_free(this_ptr_conv);
+int64_t  CS_LDK_Event_payment_claimed(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose, int64_tArray htlcs, int64_t sender_intended_total_msat, int64_t onion_fields) {
+       LDKPublicKey receiver_node_id_ref;
+       CHECK(receiver_node_id->arr_len == 33);
+       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* purpose_ptr = untag_ptr(purpose);
+       CHECK_ACCESS(purpose_ptr);
+       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
+       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
+       LDKCVec_ClaimedHTLCZ htlcs_constr;
+       htlcs_constr.datalen = htlcs->arr_len;
+       if (htlcs_constr.datalen > 0)
+               htlcs_constr.data = MALLOC(htlcs_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
+       else
+               htlcs_constr.data = NULL;
+       int64_t* htlcs_vals = htlcs->elems;
+       for (size_t n = 0; n < htlcs_constr.datalen; n++) {
+               int64_t htlcs_conv_13 = htlcs_vals[n];
+               LDKClaimedHTLC htlcs_conv_13_conv;
+               htlcs_conv_13_conv.inner = untag_ptr(htlcs_conv_13);
+               htlcs_conv_13_conv.is_owned = ptr_is_owned(htlcs_conv_13);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_conv);
+               htlcs_conv_13_conv = ClaimedHTLC_clone(&htlcs_conv_13_conv);
+               htlcs_constr.data[n] = htlcs_conv_13_conv;
+       }
+       FREE(htlcs);
+       void* sender_intended_total_msat_ptr = untag_ptr(sender_intended_total_msat);
+       CHECK_ACCESS(sender_intended_total_msat_ptr);
+       LDKCOption_u64Z sender_intended_total_msat_conv = *(LDKCOption_u64Z*)(sender_intended_total_msat_ptr);
+       sender_intended_total_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(sender_intended_total_msat));
+       LDKRecipientOnionFields onion_fields_conv;
+       onion_fields_conv.inner = untag_ptr(onion_fields);
+       onion_fields_conv.is_owned = ptr_is_owned(onion_fields);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_conv);
+       onion_fields_conv = RecipientOnionFields_clone(&onion_fields_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv, htlcs_constr, sender_intended_total_msat_conv, onion_fields_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg) {
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(arg);
-       return tag_ptr(ret_ret, true);
-}
-int64_t  CS_LDK_WriteableEcdsaChannelSigner_clone_ptr(int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKWriteableEcdsaChannelSigner* arg_conv = (LDKWriteableEcdsaChannelSigner*)arg_ptr;
-       int64_t ret_conv = WriteableEcdsaChannelSigner_clone_ptr(arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_Event_connection_needed(int8_tArray node_id, int64_tArray addresses) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKCVec_SocketAddressZ addresses_constr;
+       addresses_constr.datalen = addresses->arr_len;
+       if (addresses_constr.datalen > 0)
+               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
+       else
+               addresses_constr.data = NULL;
+       int64_t* addresses_vals = addresses->elems;
+       for (size_t p = 0; p < addresses_constr.datalen; p++) {
+               int64_t addresses_conv_15 = addresses_vals[p];
+               void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
+               CHECK_ACCESS(addresses_conv_15_ptr);
+               LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
+               addresses_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(addresses_conv_15));
+               addresses_constr.data[p] = addresses_conv_15_conv;
+       }
+       FREE(addresses);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_connection_needed(node_id_ref, addresses_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_WriteableEcdsaChannelSigner_clone(int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKWriteableEcdsaChannelSigner* orig_conv = (LDKWriteableEcdsaChannelSigner*)orig_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_Event_invoice_received(int8_tArray payment_id, int64_t invoice, int64_t context, int64_t responder) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv = Bolt12Invoice_clone(&invoice_conv);
+       void* context_ptr = untag_ptr(context);
+       CHECK_ACCESS(context_ptr);
+       LDKCOption_OffersContextZ context_conv = *(LDKCOption_OffersContextZ*)(context_ptr);
+       context_conv = COption_OffersContextZ_clone((LDKCOption_OffersContextZ*)untag_ptr(context));
+       LDKResponder responder_conv;
+       responder_conv.inner = untag_ptr(responder);
+       responder_conv.is_owned = ptr_is_owned(responder);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(responder_conv);
+       responder_conv = Responder_clone(&responder_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_invoice_received(payment_id_ref, invoice_conv, context_conv, responder_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_WriteableEcdsaChannelSigner_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableEcdsaChannelSigner this_ptr_conv = *(LDKWriteableEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableEcdsaChannelSigner_free(this_ptr_conv);
+int64_t  CS_LDK_Event_payment_sent(int64_t payment_id, int8_tArray payment_preimage, int8_tArray payment_hash, int64_t fee_paid_msat) {
+       void* payment_id_ptr = untag_ptr(payment_id);
+       CHECK_ACCESS(payment_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
+       LDKThirtyTwoBytes payment_preimage_ref;
+       CHECK(payment_preimage->arr_len == 32);
+       memcpy(payment_preimage_ref.data, payment_preimage->elems, 32); FREE(payment_preimage);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* fee_paid_msat_ptr = untag_ptr(fee_paid_msat);
+       CHECK_ACCESS(fee_paid_msat_ptr);
+       LDKCOption_u64Z fee_paid_msat_conv = *(LDKCOption_u64Z*)(fee_paid_msat_ptr);
+       fee_paid_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(fee_paid_msat));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_sent(payment_id_conv, payment_preimage_ref, payment_hash_ref, fee_paid_msat_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OnionMessenger_free(int64_t this_obj) {
-       LDKOnionMessenger this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessenger_free(this_obj_conv);
+int64_t  CS_LDK_Event_payment_failed(int8_tArray payment_id, int64_t payment_hash, int64_t reason) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       void* reason_ptr = untag_ptr(reason);
+       CHECK_ACCESS(reason_ptr);
+       LDKCOption_PaymentFailureReasonZ reason_conv = *(LDKCOption_PaymentFailureReasonZ*)(reason_ptr);
+       reason_conv = COption_PaymentFailureReasonZ_clone((LDKCOption_PaymentFailureReasonZ*)untag_ptr(reason));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_failed(payment_id_ref, payment_hash_conv, reason_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_MessageRouter_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageRouter_free(this_ptr_conv);
+int64_t  CS_LDK_Event_payment_path_successful(int8_tArray payment_id, int64_t payment_hash, int64_t path) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       void* payment_hash_ptr = untag_ptr(payment_hash);
+       CHECK_ACCESS(payment_hash_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_path_successful(payment_id_ref, payment_hash_conv, path_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_DefaultMessageRouter_free(int64_t this_obj) {
-       LDKDefaultMessageRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultMessageRouter_free(this_obj_conv);
+int64_t  CS_LDK_Event_payment_path_failed(int64_t payment_id, int8_tArray payment_hash, jboolean payment_failed_permanently, int64_t failure, int64_t path, int64_t short_channel_id) {
+       void* payment_id_ptr = untag_ptr(payment_id);
+       CHECK_ACCESS(payment_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       void* failure_ptr = untag_ptr(failure);
+       CHECK_ACCESS(failure_ptr);
+       LDKPathFailure failure_conv = *(LDKPathFailure*)(failure_ptr);
+       failure_conv = PathFailure_clone((LDKPathFailure*)untag_ptr(failure));
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       void* short_channel_id_ptr = untag_ptr(short_channel_id);
+       CHECK_ACCESS(short_channel_id_ptr);
+       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
+       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_path_failed(payment_id_conv, payment_hash_ref, payment_failed_permanently, failure_conv, path_conv, short_channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_DefaultMessageRouter_new(int64_t network_graph, int64_t entropy_source) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new(&network_graph_conv, entropy_source_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_probe_successful(int8_tArray payment_id, int8_tArray payment_hash, int64_t path) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_probe_successful(payment_id_ref, payment_hash_ref, path_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_DefaultMessageRouter_as_MessageRouter(int64_t this_arg) {
-       LDKDefaultMessageRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
-       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_Event_probe_failed(int8_tArray payment_id, int8_tArray payment_hash, int64_t path, int64_t short_channel_id) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK(payment_id->arr_len == 32);
+       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = Path_clone(&path_conv);
+       void* short_channel_id_ptr = untag_ptr(short_channel_id);
+       CHECK_ACCESS(short_channel_id_ptr);
+       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
+       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_probe_failed(payment_id_ref, payment_hash_ref, path_conv, short_channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_free(int64_t this_obj) {
-       LDKOnionMessagePath this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessagePath_free(this_obj_conv);
+int64_t  CS_LDK_Event_pending_htlcs_forwardable(int64_t time_forwardable) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_pending_htlcs_forwardable(time_forwardable);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-ptrArray  CS_LDK_OnionMessagePath_get_intermediate_nodes(int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&this_ptr_conv);
-       ptrArray ret_arr = NULL;
-       ret_arr = init_ptrArray(ret_var.datalen, __LINE__);
-       int8_tArray *ret_arr_ptr = (int8_tArray*)(((uint8_t*)ret_arr) + 8);
-       for (size_t i = 0; i < ret_var.datalen; i++) {
-               int8_tArray ret_conv_8_arr = init_int8_tArray(33, __LINE__);
-               memcpy(ret_conv_8_arr->elems, ret_var.data[i].compressed_form, 33);
-               ret_arr_ptr[i] = ret_conv_8_arr;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+int64_t  CS_LDK_Event_htlcintercepted(int8_tArray intercept_id, int64_t requested_next_hop_scid, int8_tArray payment_hash, int64_t inbound_amount_msat, int64_t expected_outbound_amount_msat) {
+       LDKThirtyTwoBytes intercept_id_ref;
+       CHECK(intercept_id->arr_len == 32);
+       memcpy(intercept_id_ref.data, intercept_id->elems, 32); FREE(intercept_id);
+       LDKThirtyTwoBytes payment_hash_ref;
+       CHECK(payment_hash->arr_len == 32);
+       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_htlcintercepted(intercept_id_ref, requested_next_hop_scid, payment_hash_ref, inbound_amount_msat, expected_outbound_amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_set_intermediate_nodes(int64_t this_ptr, ptrArray val) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+int64_t  CS_LDK_Event_spendable_outputs(int64_tArray outputs, int64_t channel_id) {
+       LDKCVec_SpendableOutputDescriptorZ outputs_constr;
+       outputs_constr.datalen = outputs->arr_len;
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
        else
-               val_constr.data = NULL;
-       int8_tArray* val_vals = (void*) val->elems;
-       for (size_t i = 0; i < val_constr.datalen; i++) {
-               int8_tArray val_conv_8 = val_vals[i];
-               LDKPublicKey val_conv_8_ref;
-               CHECK(val_conv_8->arr_len == 33);
-               memcpy(val_conv_8_ref.compressed_form, val_conv_8->elems, 33); FREE(val_conv_8);
-               val_constr.data[i] = val_conv_8_ref;
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = outputs->elems;
+       for (size_t b = 0; b < outputs_constr.datalen; b++) {
+               int64_t outputs_conv_27 = outputs_vals[b];
+               void* outputs_conv_27_ptr = untag_ptr(outputs_conv_27);
+               CHECK_ACCESS(outputs_conv_27_ptr);
+               LDKSpendableOutputDescriptor outputs_conv_27_conv = *(LDKSpendableOutputDescriptor*)(outputs_conv_27_ptr);
+               outputs_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(outputs_conv_27));
+               outputs_constr.data[b] = outputs_conv_27_conv;
        }
-       FREE(val);
-       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
+       FREE(outputs);
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_spendable_outputs(outputs_constr, channel_id_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessagePath_get_destination(int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
+int64_t  CS_LDK_Event_payment_forwarded(int64_t prev_channel_id, int64_t next_channel_id, int64_t prev_user_channel_id, int64_t next_user_channel_id, int64_t total_fee_earned_msat, int64_t skimmed_fee_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
+       LDKChannelId prev_channel_id_conv;
+       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
+       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
+       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
+       LDKChannelId next_channel_id_conv;
+       next_channel_id_conv.inner = untag_ptr(next_channel_id);
+       next_channel_id_conv.is_owned = ptr_is_owned(next_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(next_channel_id_conv);
+       next_channel_id_conv = ChannelId_clone(&next_channel_id_conv);
+       void* prev_user_channel_id_ptr = untag_ptr(prev_user_channel_id);
+       CHECK_ACCESS(prev_user_channel_id_ptr);
+       LDKCOption_U128Z prev_user_channel_id_conv = *(LDKCOption_U128Z*)(prev_user_channel_id_ptr);
+       prev_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(prev_user_channel_id));
+       void* next_user_channel_id_ptr = untag_ptr(next_user_channel_id);
+       CHECK_ACCESS(next_user_channel_id_ptr);
+       LDKCOption_U128Z next_user_channel_id_conv = *(LDKCOption_U128Z*)(next_user_channel_id_ptr);
+       next_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(next_user_channel_id));
+       void* total_fee_earned_msat_ptr = untag_ptr(total_fee_earned_msat);
+       CHECK_ACCESS(total_fee_earned_msat_ptr);
+       LDKCOption_u64Z total_fee_earned_msat_conv = *(LDKCOption_u64Z*)(total_fee_earned_msat_ptr);
+       total_fee_earned_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(total_fee_earned_msat));
+       void* skimmed_fee_msat_ptr = untag_ptr(skimmed_fee_msat);
+       CHECK_ACCESS(skimmed_fee_msat_ptr);
+       LDKCOption_u64Z skimmed_fee_msat_conv = *(LDKCOption_u64Z*)(skimmed_fee_msat_ptr);
+       skimmed_fee_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(skimmed_fee_msat));
+       void* outbound_amount_forwarded_msat_ptr = untag_ptr(outbound_amount_forwarded_msat);
+       CHECK_ACCESS(outbound_amount_forwarded_msat_ptr);
+       LDKCOption_u64Z outbound_amount_forwarded_msat_conv = *(LDKCOption_u64Z*)(outbound_amount_forwarded_msat_ptr);
+       outbound_amount_forwarded_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(outbound_amount_forwarded_msat));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_payment_forwarded(prev_channel_id_conv, next_channel_id_conv, prev_user_channel_id_conv, next_user_channel_id_conv, total_fee_earned_msat_conv, skimmed_fee_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_set_destination(int64_t this_ptr, int64_t val) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
-       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
-       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_OnionMessagePath_get_first_node_addresses(int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
-       *ret_copy = OnionMessagePath_get_first_node_addresses(&this_ptr_conv);
+int64_t  CS_LDK_Event_channel_pending(int64_t channel_id, int8_tArray user_channel_id, int64_t former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo, int64_t channel_type) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKChannelId former_temporary_channel_id_conv;
+       former_temporary_channel_id_conv.inner = untag_ptr(former_temporary_channel_id);
+       former_temporary_channel_id_conv.is_owned = ptr_is_owned(former_temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_conv);
+       former_temporary_channel_id_conv = ChannelId_clone(&former_temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKOutPoint funding_txo_conv;
+       funding_txo_conv.inner = untag_ptr(funding_txo);
+       funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
+       funding_txo_conv = OutPoint_clone(&funding_txo_conv);
+       LDKChannelTypeFeatures channel_type_conv;
+       channel_type_conv.inner = untag_ptr(channel_type);
+       channel_type_conv.is_owned = ptr_is_owned(channel_type);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
+       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_channel_pending(channel_id_conv, user_channel_id_ref, former_temporary_channel_id_conv, counterparty_node_id_ref, funding_txo_conv, channel_type_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-void  CS_LDK_OnionMessagePath_set_first_node_addresses(int64_t this_ptr, int64_t val) {
-       LDKOnionMessagePath this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_SocketAddressZZ val_conv = *(LDKCOption_CVec_SocketAddressZZ*)(val_ptr);
-       val_conv = COption_CVec_SocketAddressZZ_clone((LDKCOption_CVec_SocketAddressZZ*)untag_ptr(val));
-       OnionMessagePath_set_first_node_addresses(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_OnionMessagePath_new(ptrArray intermediate_nodes_arg, int64_t destination_arg, int64_t first_node_addresses_arg) {
-       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
-       intermediate_nodes_arg_constr.datalen = intermediate_nodes_arg->arr_len;
-       if (intermediate_nodes_arg_constr.datalen > 0)
-               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               intermediate_nodes_arg_constr.data = NULL;
-       int8_tArray* intermediate_nodes_arg_vals = (void*) intermediate_nodes_arg->elems;
-       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
-               int8_tArray intermediate_nodes_arg_conv_8 = intermediate_nodes_arg_vals[i];
-               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
-               CHECK(intermediate_nodes_arg_conv_8->arr_len == 33);
-               memcpy(intermediate_nodes_arg_conv_8_ref.compressed_form, intermediate_nodes_arg_conv_8->elems, 33); FREE(intermediate_nodes_arg_conv_8);
-               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
-       }
-       FREE(intermediate_nodes_arg);
-       void* destination_arg_ptr = untag_ptr(destination_arg);
-       CHECK_ACCESS(destination_arg_ptr);
-       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
-       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
-       void* first_node_addresses_arg_ptr = untag_ptr(first_node_addresses_arg);
-       CHECK_ACCESS(first_node_addresses_arg_ptr);
-       LDKCOption_CVec_SocketAddressZZ first_node_addresses_arg_conv = *(LDKCOption_CVec_SocketAddressZZ*)(first_node_addresses_arg_ptr);
-       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv, first_node_addresses_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_channel_ready(int64_t channel_id, int8_tArray user_channel_id, int8_tArray counterparty_node_id, int64_t channel_type) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKChannelTypeFeatures channel_type_conv;
+       channel_type_conv.inner = untag_ptr(channel_type);
+       channel_type_conv.is_owned = ptr_is_owned(channel_type);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
+       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_channel_ready(channel_id_conv, user_channel_id_ref, counterparty_node_id_ref, channel_type_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_channel_closed(int64_t channel_id, int8_tArray user_channel_id, int64_t reason, int8_tArray counterparty_node_id, int64_t channel_capacity_sats, int64_t channel_funding_txo) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKU128 user_channel_id_ref;
+       CHECK(user_channel_id->arr_len == 16);
+       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
+       void* reason_ptr = untag_ptr(reason);
+       CHECK_ACCESS(reason_ptr);
+       LDKClosureReason reason_conv = *(LDKClosureReason*)(reason_ptr);
+       reason_conv = ClosureReason_clone((LDKClosureReason*)untag_ptr(reason));
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       void* channel_capacity_sats_ptr = untag_ptr(channel_capacity_sats);
+       CHECK_ACCESS(channel_capacity_sats_ptr);
+       LDKCOption_u64Z channel_capacity_sats_conv = *(LDKCOption_u64Z*)(channel_capacity_sats_ptr);
+       channel_capacity_sats_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(channel_capacity_sats));
+       LDKOutPoint channel_funding_txo_conv;
+       channel_funding_txo_conv.inner = untag_ptr(channel_funding_txo);
+       channel_funding_txo_conv.is_owned = ptr_is_owned(channel_funding_txo);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_txo_conv);
+       channel_funding_txo_conv = OutPoint_clone(&channel_funding_txo_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_channel_closed(channel_id_conv, user_channel_id_ref, reason_conv, counterparty_node_id_ref, channel_capacity_sats_conv, channel_funding_txo_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_OnionMessagePath_clone_ptr(int64_t arg) {
-       LDKOnionMessagePath arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_OnionMessagePath_clone(int64_t orig) {
-       LDKOnionMessagePath orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_Event_discard_funding(int64_t channel_id, int64_t funding_info) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       void* funding_info_ptr = untag_ptr(funding_info);
+       CHECK_ACCESS(funding_info_ptr);
+       LDKFundingInfo funding_info_conv = *(LDKFundingInfo*)(funding_info_ptr);
+       funding_info_conv = FundingInfo_clone((LDKFundingInfo*)untag_ptr(funding_info));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_discard_funding(channel_id_conv, funding_info_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int8_tArray  CS_LDK_OnionMessagePath_first_node(int64_t this_arg) {
-       LDKOnionMessagePath this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, OnionMessagePath_first_node(&this_arg_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_Destination_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Destination_free(this_ptr_conv);
+int64_t  CS_LDK_Event_open_channel_request(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_satoshis, int64_t push_msat, int64_t channel_type, jboolean is_announced, int64_t params) {
+       LDKChannelId temporary_channel_id_conv;
+       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
+       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
+       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKChannelTypeFeatures channel_type_conv;
+       channel_type_conv.inner = untag_ptr(channel_type);
+       channel_type_conv.is_owned = ptr_is_owned(channel_type);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
+       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
+       LDKChannelParameters params_conv;
+       params_conv.inner = untag_ptr(params);
+       params_conv.is_owned = ptr_is_owned(params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
+       params_conv = ChannelParameters_clone(&params_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_open_channel_request(temporary_channel_id_conv, counterparty_node_id_ref, funding_satoshis, push_msat, channel_type_conv, is_announced, params_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(arg);
+int64_t  CS_LDK_Event_htlchandling_failed(int64_t prev_channel_id, int64_t failed_next_destination) {
+       LDKChannelId prev_channel_id_conv;
+       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
+       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
+       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
+       void* failed_next_destination_ptr = untag_ptr(failed_next_destination);
+       CHECK_ACCESS(failed_next_destination_ptr);
+       LDKHTLCDestination failed_next_destination_conv = *(LDKHTLCDestination*)(failed_next_destination_ptr);
+       failed_next_destination_conv = HTLCDestination_clone((LDKHTLCDestination*)untag_ptr(failed_next_destination));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_htlchandling_failed(prev_channel_id_conv, failed_next_destination_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_Destination_clone_ptr(int64_t arg) {
-       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
-       int64_t ret_conv = Destination_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Destination_clone(int64_t orig) {
-       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(orig_conv);
+int64_t  CS_LDK_Event_bump_transaction(int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKBumpTransactionEvent a_conv = *(LDKBumpTransactionEvent*)(a_ptr);
+       a_conv = BumpTransactionEvent_clone((LDKBumpTransactionEvent*)untag_ptr(a));
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_bump_transaction(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Destination_node(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_node(a_ref);
+int64_t  CS_LDK_Event_onion_message_intercepted(int8_tArray peer_node_id, int64_t message) {
+       LDKPublicKey peer_node_id_ref;
+       CHECK(peer_node_id->arr_len == 33);
+       memcpy(peer_node_id_ref.compressed_form, peer_node_id->elems, 33); FREE(peer_node_id);
+       LDKOnionMessage message_conv;
+       message_conv.inner = untag_ptr(message);
+       message_conv.is_owned = ptr_is_owned(message);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_conv);
+       message_conv = OnionMessage_clone(&message_conv);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_onion_message_intercepted(peer_node_id_ref, message_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Destination_blinded_path(int64_t a) {
-       LDKBlindedPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPath_clone(&a_conv);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_blinded_path(a_conv);
+int64_t  CS_LDK_Event_onion_message_peer_connected(int8_tArray peer_node_id) {
+       LDKPublicKey peer_node_id_ref;
+       CHECK(peer_node_id->arr_len == 33);
+       memcpy(peer_node_id_ref.compressed_form, peer_node_id->elems, 33); FREE(peer_node_id);
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_onion_message_peer_connected(peer_node_id_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Destination_hash(int64_t o) {
-       LDKDestination* o_conv = (LDKDestination*)untag_ptr(o);
-       int64_t ret_conv = Destination_hash(o_conv);
+jboolean  CS_LDK_Event_eq(int64_t a, int64_t b) {
+       LDKEvent* a_conv = (LDKEvent*)untag_ptr(a);
+       LDKEvent* b_conv = (LDKEvent*)untag_ptr(b);
+       jboolean ret_conv = Event_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Destination_eq(int64_t a, int64_t b) {
-       LDKDestination* a_conv = (LDKDestination*)untag_ptr(a);
-       LDKDestination* b_conv = (LDKDestination*)untag_ptr(b);
-       jboolean ret_conv = Destination_eq(a_conv, b_conv);
-       return ret_conv;
+int8_tArray  CS_LDK_Event_write(int64_t obj) {
+       LDKEvent* obj_conv = (LDKEvent*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = Event_write(obj_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       CVec_u8Z_free(ret_var);
+       return ret_arr;
 }
 
-void  CS_LDK_Destination_resolve(int64_t this_arg, int64_t network_graph) {
-       LDKDestination* this_arg_conv = (LDKDestination*)untag_ptr(this_arg);
-       LDKReadOnlyNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       Destination_resolve(this_arg_conv, &network_graph_conv);
+int64_t  CS_LDK_Event_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = ser->arr_len;
+       ser_ref.data = ser->elems;
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = Event_read(ser_ref);
+       FREE(ser);
+       return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_SendSuccess_free(int64_t this_ptr) {
+void  CS_LDK_MessageSendEvent_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKSendSuccess this_ptr_conv = *(LDKSendSuccess*)(this_ptr_ptr);
+       LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       SendSuccess_free(this_ptr_conv);
+       MessageSendEvent_free(this_ptr_conv);
 }
 
-static inline uint64_t SendSuccess_clone_ptr(LDKSendSuccess *NONNULL_PTR arg) {
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_clone(arg);
+static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_SendSuccess_clone_ptr(int64_t arg) {
-       LDKSendSuccess* arg_conv = (LDKSendSuccess*)untag_ptr(arg);
-       int64_t ret_conv = SendSuccess_clone_ptr(arg_conv);
+int64_t  CS_LDK_MessageSendEvent_clone_ptr(int64_t arg) {
+       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)untag_ptr(arg);
+       int64_t ret_conv = MessageSendEvent_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_SendSuccess_clone(int64_t orig) {
-       LDKSendSuccess* orig_conv = (LDKSendSuccess*)untag_ptr(orig);
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_clone(int64_t orig) {
+       LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)untag_ptr(orig);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendSuccess_buffered() {
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_buffered();
+int64_t  CS_LDK_MessageSendEvent_send_accept_channel(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKAcceptChannel msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = AcceptChannel_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendSuccess_buffered_awaiting_connection(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKSendSuccess *ret_copy = MALLOC(sizeof(LDKSendSuccess), "LDKSendSuccess");
-       *ret_copy = SendSuccess_buffered_awaiting_connection(a_ref);
+int64_t  CS_LDK_MessageSendEvent_send_accept_channel_v2(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKAcceptChannelV2 msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = AcceptChannelV2_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_accept_channel_v2(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendSuccess_hash(int64_t o) {
-       LDKSendSuccess* o_conv = (LDKSendSuccess*)untag_ptr(o);
-       int64_t ret_conv = SendSuccess_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_SendSuccess_eq(int64_t a, int64_t b) {
-       LDKSendSuccess* a_conv = (LDKSendSuccess*)untag_ptr(a);
-       LDKSendSuccess* b_conv = (LDKSendSuccess*)untag_ptr(b);
-       jboolean ret_conv = SendSuccess_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_SendError_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SendError_free(this_ptr_conv);
-}
-
-static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(arg);
+int64_t  CS_LDK_MessageSendEvent_send_open_channel(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKOpenChannel msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = OpenChannel_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_SendError_clone_ptr(int64_t arg) {
-       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
-       int64_t ret_conv = SendError_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_SendError_clone(int64_t orig) {
-       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_send_open_channel_v2(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKOpenChannelV2 msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = OpenChannelV2_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_open_channel_v2(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_secp256k1(int32_t a) {
-       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_cs(a);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_secp256k1(a_conv);
+int64_t  CS_LDK_MessageSendEvent_send_funding_created(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKFundingCreated msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = FundingCreated_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_too_big_packet() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_big_packet();
+int64_t  CS_LDK_MessageSendEvent_send_funding_signed(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKFundingSigned msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = FundingSigned_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_too_few_blinded_hops() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_few_blinded_hops();
+int64_t  CS_LDK_MessageSendEvent_send_stfu(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKStfu msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = Stfu_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_stfu(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_invalid_first_hop(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_first_hop(a_ref);
+int64_t  CS_LDK_MessageSendEvent_send_splice_init(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKSpliceInit msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = SpliceInit_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_splice_init(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_path_not_found() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_path_not_found();
+int64_t  CS_LDK_MessageSendEvent_send_splice_ack(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKSpliceAck msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = SpliceAck_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_splice_ack(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_invalid_message() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_message();
+int64_t  CS_LDK_MessageSendEvent_send_splice_locked(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKSpliceLocked msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = SpliceLocked_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_splice_locked(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_buffer_full() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_buffer_full();
+int64_t  CS_LDK_MessageSendEvent_send_tx_add_input(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAddInput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxAddInput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_add_input(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_get_node_id_failed() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_get_node_id_failed();
+int64_t  CS_LDK_MessageSendEvent_send_tx_add_output(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAddOutput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxAddOutput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_add_output(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_unresolved_introduction_node() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_unresolved_introduction_node();
+int64_t  CS_LDK_MessageSendEvent_send_tx_remove_input(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxRemoveInput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxRemoveInput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_remove_input(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_blinded_path_advance_failed() {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_blinded_path_advance_failed();
+int64_t  CS_LDK_MessageSendEvent_send_tx_remove_output(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxRemoveOutput msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxRemoveOutput_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_remove_output(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_SendError_hash(int64_t o) {
-       LDKSendError* o_conv = (LDKSendError*)untag_ptr(o);
-       int64_t ret_conv = SendError_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_SendError_eq(int64_t a, int64_t b) {
-       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
-       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
-       jboolean ret_conv = SendError_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_CustomOnionMessageHandler_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomOnionMessageHandler_free(this_ptr_conv);
-}
-
-void  CS_LDK_PeeledOnion_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPeeledOnion this_ptr_conv = *(LDKPeeledOnion*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PeeledOnion_free(this_ptr_conv);
-}
-
-static inline uint64_t PeeledOnion_clone_ptr(LDKPeeledOnion *NONNULL_PTR arg) {
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_clone(arg);
+int64_t  CS_LDK_MessageSendEvent_send_tx_complete(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxComplete msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxComplete_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_complete(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_PeeledOnion_clone_ptr(int64_t arg) {
-       LDKPeeledOnion* arg_conv = (LDKPeeledOnion*)untag_ptr(arg);
-       int64_t ret_conv = PeeledOnion_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_PeeledOnion_clone(int64_t orig) {
-       LDKPeeledOnion* orig_conv = (LDKPeeledOnion*)untag_ptr(orig);
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_send_tx_signatures(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxSignatures msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxSignatures_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_signatures(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PeeledOnion_forward(int64_t a, int64_t b) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKNextMessageHop a_conv = *(LDKNextMessageHop*)(a_ptr);
-       a_conv = NextMessageHop_clone((LDKNextMessageHop*)untag_ptr(a));
-       LDKOnionMessage b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv = OnionMessage_clone(&b_conv);
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_forward(a_conv, b_conv);
+int64_t  CS_LDK_MessageSendEvent_send_tx_init_rbf(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxInitRbf msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxInitRbf_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_init_rbf(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_PeeledOnion_receive(int64_t a, int8_tArray b, int64_t c) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKParsedOnionMessageContents a_conv = *(LDKParsedOnionMessageContents*)(a_ptr);
-       a_conv = ParsedOnionMessageContents_clone((LDKParsedOnionMessageContents*)untag_ptr(a));
-       LDKThirtyTwoBytes b_ref;
-       CHECK(b->arr_len == 32);
-       memcpy(b_ref.data, b->elems, 32); FREE(b);
-       LDKBlindedPath c_conv;
-       c_conv.inner = untag_ptr(c);
-       c_conv.is_owned = ptr_is_owned(c);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
-       c_conv = BlindedPath_clone(&c_conv);
-       LDKPeeledOnion *ret_copy = MALLOC(sizeof(LDKPeeledOnion), "LDKPeeledOnion");
-       *ret_copy = PeeledOnion_receive(a_conv, b_ref, c_conv);
+int64_t  CS_LDK_MessageSendEvent_send_tx_ack_rbf(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAckRbf msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = TxAckRbf_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_ack_rbf(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_create_onion_message_resolving_destination(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t network_graph, int64_t path, int64_t contents, int64_t reply_path) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
-       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
-       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
-       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
-       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
-       LDKReadOnlyNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKOnionMessagePath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = OnionMessagePath_clone(&path_conv);
-       void* contents_ptr = untag_ptr(contents);
-       CHECK_ACCESS(contents_ptr);
-       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
-       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
-       }
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
-       *ret_conv = create_onion_message_resolving_destination(entropy_source_conv, node_signer_conv, node_id_lookup_conv, &network_graph_conv, path_conv, contents_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_onion_message(int64_t entropy_source, int64_t node_signer, int64_t node_id_lookup, int64_t path, int64_t contents, int64_t reply_path) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
-       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
-       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
-       if (ptr_is_owned(node_id_lookup)) { CHECK_ACCESS(node_id_lookup_ptr); }
-       LDKNodeIdLookUp* node_id_lookup_conv = (LDKNodeIdLookUp*)node_id_lookup_ptr;
-       LDKOnionMessagePath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = OnionMessagePath_clone(&path_conv);
-       void* contents_ptr = untag_ptr(contents);
-       CHECK_ACCESS(contents_ptr);
-       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
-       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
-       }
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ), "LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ");
-       *ret_conv = create_onion_message(entropy_source_conv, node_signer_conv, node_id_lookup_conv, path_conv, contents_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_peel_onion_message(int64_t msg, int64_t node_signer, int64_t logger, int64_t custom_handler) {
-       LDKOnionMessage msg_conv;
+int64_t  CS_LDK_MessageSendEvent_send_tx_abort(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKTxAbort msg_conv;
        msg_conv.inner = untag_ptr(msg);
        msg_conv.is_owned = ptr_is_owned(msg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* custom_handler_ptr = untag_ptr(custom_handler);
-       CHECK_ACCESS(custom_handler_ptr);
-       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
-       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
-       }
-       LDKCResult_PeeledOnionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PeeledOnionNoneZ), "LDKCResult_PeeledOnionNoneZ");
-       *ret_conv = peel_onion_message(&msg_conv, node_signer_conv, logger_conv, custom_handler_conv);
-       return tag_ptr(ret_conv, true);
+       msg_conv = TxAbort_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_tx_abort(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessenger_new(int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t node_id_lookup, int64_t message_router, int64_t offers_handler, int64_t custom_handler) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* node_id_lookup_ptr = untag_ptr(node_id_lookup);
-       CHECK_ACCESS(node_id_lookup_ptr);
-       LDKNodeIdLookUp node_id_lookup_conv = *(LDKNodeIdLookUp*)(node_id_lookup_ptr);
-       if (node_id_lookup_conv.free == LDKNodeIdLookUp_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeIdLookUp_JCalls_cloned(&node_id_lookup_conv);
-       }
-       void* message_router_ptr = untag_ptr(message_router);
-       CHECK_ACCESS(message_router_ptr);
-       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
-       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKMessageRouter_JCalls_cloned(&message_router_conv);
-       }
-       void* offers_handler_ptr = untag_ptr(offers_handler);
-       CHECK_ACCESS(offers_handler_ptr);
-       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
-       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
-       }
-       void* custom_handler_ptr = untag_ptr(custom_handler);
-       CHECK_ACCESS(custom_handler_ptr);
-       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
-       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
-       }
-       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, node_id_lookup_conv, message_router_conv, offers_handler_conv, custom_handler_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+int64_t  CS_LDK_MessageSendEvent_send_channel_ready(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelReady msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelReady_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_ready(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessenger_send_onion_message(int64_t this_arg, int64_t contents, int64_t destination, int64_t reply_path) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       void* contents_ptr = untag_ptr(contents);
-       CHECK_ACCESS(contents_ptr);
-       LDKOnionMessageContents contents_conv = *(LDKOnionMessageContents*)(contents_ptr);
-       if (contents_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&contents_conv);
-       }
-       void* destination_ptr = untag_ptr(destination);
-       CHECK_ACCESS(destination_ptr);
-       LDKDestination destination_conv = *(LDKDestination*)(destination_ptr);
-       destination_conv = Destination_clone((LDKDestination*)untag_ptr(destination));
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_SendSuccessSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SendSuccessSendErrorZ), "LDKCResult_SendSuccessSendErrorZ");
-       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, contents_conv, destination_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_MessageSendEvent_send_announcement_signatures(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKAnnouncementSignatures msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = AnnouncementSignatures_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OnionMessenger_as_OnionMessageHandler(int64_t this_arg) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
-       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_MessageSendEvent_update_htlcs(int8_tArray node_id, int64_t updates) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKCommitmentUpdate updates_conv;
+       updates_conv.inner = untag_ptr(updates);
+       updates_conv.is_owned = ptr_is_owned(updates);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
+       updates_conv = CommitmentUpdate_clone(&updates_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OffersMessageHandler_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessageHandler_free(this_ptr_conv);
+int64_t  CS_LDK_MessageSendEvent_send_revoke_and_ack(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKRevokeAndACK msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = RevokeAndACK_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_OffersMessage_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessage_free(this_ptr_conv);
+int64_t  CS_LDK_MessageSendEvent_send_closing_signed(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKClosingSigned msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ClosingSigned_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(arg);
+int64_t  CS_LDK_MessageSendEvent_send_shutdown(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKShutdown msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = Shutdown_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_OffersMessage_clone_ptr(int64_t arg) {
-       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
-       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_OffersMessage_clone(int64_t orig) {
-       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(orig_conv);
+int64_t  CS_LDK_MessageSendEvent_send_channel_reestablish(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelReestablish msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelReestablish_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_invoice_request(int64_t a) {
-       LDKInvoiceRequest a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceRequest_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_request(a_conv);
+int64_t  CS_LDK_MessageSendEvent_send_channel_announcement(int8_tArray node_id, int64_t msg, int64_t update_msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelAnnouncement_clone(&msg_conv);
+       LDKChannelUpdate update_msg_conv;
+       update_msg_conv.inner = untag_ptr(update_msg);
+       update_msg_conv.is_owned = ptr_is_owned(update_msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
+       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_announcement(node_id_ref, msg_conv, update_msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_invoice(int64_t a) {
-       LDKBolt12Invoice a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12Invoice_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice(a_conv);
+int64_t  CS_LDK_MessageSendEvent_broadcast_channel_announcement(int64_t msg, int64_t update_msg) {
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelAnnouncement_clone(&msg_conv);
+       LDKChannelUpdate update_msg_conv;
+       update_msg_conv.inner = untag_ptr(update_msg);
+       update_msg_conv.is_owned = ptr_is_owned(update_msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
+       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_invoice_error(int64_t a) {
-       LDKInvoiceError a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceError_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_error(a_conv);
+int64_t  CS_LDK_MessageSendEvent_broadcast_channel_update(int64_t msg) {
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelUpdate_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-jboolean  CS_LDK_OffersMessage_is_known_type(int64_t tlv_type) {
-       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
-       return ret_conv;
+int64_t  CS_LDK_MessageSendEvent_broadcast_node_announcement(int64_t msg) {
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = NodeAnnouncement_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_as_OnionMessageContents(int64_t this_arg) {
-       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = OffersMessage_as_OnionMessageContents(this_arg_conv);
-       return tag_ptr(ret_ret, true);
+int64_t  CS_LDK_MessageSendEvent_send_channel_update(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelUpdate_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_OffersMessage_write(int64_t obj) {
-       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = OffersMessage_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_MessageSendEvent_handle_error(int8_tArray node_id, int64_t action) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       void* action_ptr = untag_ptr(action);
+       CHECK_ACCESS(action_ptr);
+       LDKErrorAction action_conv = *(LDKErrorAction*)(action_ptr);
+       action_conv = ErrorAction_clone((LDKErrorAction*)untag_ptr(action));
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_handle_error(node_id_ref, action_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_OffersMessage_read(int8_tArray ser, int64_t arg_a, int64_t arg_b) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       void* arg_b_ptr = untag_ptr(arg_b);
-       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
-       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
-       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
-       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_MessageSendEvent_send_channel_range_query(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKQueryChannelRange msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = QueryChannelRange_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Packet_free(int64_t this_obj) {
-       LDKPacket this_obj_conv;
+int64_t  CS_LDK_MessageSendEvent_send_short_ids_query(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKQueryShortChannelIds msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = QueryShortChannelIds_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageSendEvent_send_reply_channel_range(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKReplyChannelRange msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ReplyChannelRange_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_MessageSendEvent_send_gossip_timestamp_filter(int8_tArray node_id, int64_t msg) {
+       LDKPublicKey node_id_ref;
+       CHECK(node_id->arr_len == 33);
+       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
+       LDKGossipTimestampFilter msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = GossipTimestampFilter_clone(&msg_conv);
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_send_gossip_timestamp_filter(node_id_ref, msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_MessageSendEventsProvider_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageSendEventsProvider_free(this_ptr_conv);
+}
+
+void  CS_LDK_EventsProvider_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EventsProvider_free(this_ptr_conv);
+}
+
+void  CS_LDK_ReplayEvent_free(int64_t this_obj) {
+       LDKReplayEvent this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Packet_free(this_obj_conv);
+       ReplayEvent_free(this_obj_conv);
 }
 
-int8_t  CS_LDK_Packet_get_version(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_t ret_conv = Packet_get_version(&this_ptr_conv);
+int64_t  CS_LDK_ReplayEvent_new() {
+       LDKReplayEvent ret_var = ReplayEvent_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ReplayEvent_clone_ptr(LDKReplayEvent *NONNULL_PTR arg) {
+       LDKReplayEvent ret_var = ReplayEvent_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_ReplayEvent_clone_ptr(int64_t arg) {
+       LDKReplayEvent arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ReplayEvent_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Packet_set_version(int64_t this_ptr, int8_t val) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       Packet_set_version(&this_ptr_conv, val);
+int64_t  CS_LDK_ReplayEvent_clone(int64_t orig) {
+       LDKReplayEvent orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKReplayEvent ret_var = ReplayEvent_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_Packet_get_public_key(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, Packet_get_public_key(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+void  CS_LDK_EventHandler_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEventHandler this_ptr_conv = *(LDKEventHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EventHandler_free(this_ptr_conv);
 }
 
-void  CS_LDK_Packet_set_public_key(int64_t this_ptr, int8_tArray val) {
-       LDKPacket this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       Packet_set_public_key(&this_ptr_conv, val_ref);
+void  CS_LDK_AnchorDescriptor_free(int64_t this_obj) {
+       LDKAnchorDescriptor this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       AnchorDescriptor_free(this_obj_conv);
 }
 
-int8_tArray  CS_LDK_Packet_get_hop_data(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
+int64_t  CS_LDK_AnchorDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Packet_get_hop_data(&this_ptr_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       LDKChannelDerivationParameters ret_var = AnchorDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Packet_set_hop_data(int64_t this_ptr, int8_tArray val) {
-       LDKPacket this_ptr_conv;
+void  CS_LDK_AnchorDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z val_ref;
-       val_ref.datalen = val->arr_len;
-       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
-       Packet_set_hop_data(&this_ptr_conv, val_ref);
+       LDKChannelDerivationParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelDerivationParameters_clone(&val_conv);
+       AnchorDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_Packet_get_hmac(int64_t this_ptr) {
-       LDKPacket this_ptr_conv;
+int64_t  CS_LDK_AnchorDescriptor_get_outpoint(int64_t this_ptr) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *Packet_get_hmac(&this_ptr_conv), 32);
-       return ret_arr;
+       LDKOutPoint ret_var = AnchorDescriptor_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-void  CS_LDK_Packet_set_hmac(int64_t this_ptr, int8_tArray val) {
-       LDKPacket this_ptr_conv;
+void  CS_LDK_AnchorDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKAnchorDescriptor this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       Packet_set_hmac(&this_ptr_conv, val_ref);
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       AnchorDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Packet_new(int8_t version_arg, int8_tArray public_key_arg, int8_tArray hop_data_arg, int8_tArray hmac_arg) {
-       LDKPublicKey public_key_arg_ref;
-       CHECK(public_key_arg->arr_len == 33);
-       memcpy(public_key_arg_ref.compressed_form, public_key_arg->elems, 33); FREE(public_key_arg);
-       LDKCVec_u8Z hop_data_arg_ref;
-       hop_data_arg_ref.datalen = hop_data_arg->arr_len;
-       hop_data_arg_ref.data = MALLOC(hop_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(hop_data_arg_ref.data, hop_data_arg->elems, hop_data_arg_ref.datalen); FREE(hop_data_arg);
-       LDKThirtyTwoBytes hmac_arg_ref;
-       CHECK(hmac_arg->arr_len == 32);
-       memcpy(hmac_arg_ref.data, hmac_arg->elems, 32); FREE(hmac_arg);
-       LDKPacket ret_var = Packet_new(version_arg, public_key_arg_ref, hop_data_arg_ref, hmac_arg_ref);
+int64_t  CS_LDK_AnchorDescriptor_new(int64_t channel_derivation_parameters_arg, int64_t outpoint_arg) {
+       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
+       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
+       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
+       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       LDKAnchorDescriptor ret_var = AnchorDescriptor_new(channel_derivation_parameters_arg_conv, outpoint_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg) {
-       LDKPacket ret_var = Packet_clone(arg);
+static inline uint64_t AnchorDescriptor_clone_ptr(LDKAnchorDescriptor *NONNULL_PTR arg) {
+       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Packet_clone_ptr(int64_t arg) {
-       LDKPacket arg_conv;
+int64_t  CS_LDK_AnchorDescriptor_clone_ptr(int64_t arg) {
+       LDKAnchorDescriptor arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Packet_clone_ptr(&arg_conv);
+       int64_t ret_conv = AnchorDescriptor_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Packet_clone(int64_t orig) {
-       LDKPacket orig_conv;
+int64_t  CS_LDK_AnchorDescriptor_clone(int64_t orig) {
+       LDKAnchorDescriptor orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPacket ret_var = Packet_clone(&orig_conv);
+       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Packet_hash(int64_t o) {
-       LDKPacket o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Packet_hash(&o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Packet_eq(int64_t a, int64_t b) {
-       LDKPacket a_conv;
+jboolean  CS_LDK_AnchorDescriptor_eq(int64_t a, int64_t b) {
+       LDKAnchorDescriptor a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKPacket b_conv;
+       LDKAnchorDescriptor b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Packet_eq(&a_conv, &b_conv);
+       jboolean ret_conv = AnchorDescriptor_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Packet_write(int64_t obj) {
-       LDKPacket obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Packet_write(&obj_conv);
+int64_t  CS_LDK_AnchorDescriptor_previous_utxo(int64_t this_arg) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = AnchorDescriptor_previous_utxo(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+int64_t  CS_LDK_AnchorDescriptor_unsigned_tx_input(int64_t this_arg) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
+       *ret_ref = AnchorDescriptor_unsigned_tx_input(&this_arg_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+int8_tArray  CS_LDK_AnchorDescriptor_witness_script(int64_t this_arg) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = AnchorDescriptor_witness_script(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-void  CS_LDK_ParsedOnionMessageContents_free(int64_t this_ptr) {
+int8_tArray  CS_LDK_AnchorDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKECDSASignature signature_ref;
+       CHECK(signature->arr_len == 64);
+       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
+       LDKWitness ret_var = AnchorDescriptor_tx_input_witness(&this_arg_conv, signature_ref);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       Witness_free(ret_var);
+       return ret_arr;
+}
+
+int64_t  CS_LDK_AnchorDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
+       LDKAnchorDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
+       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = AnchorDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+void  CS_LDK_BumpTransactionEvent_free(int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKParsedOnionMessageContents this_ptr_conv = *(LDKParsedOnionMessageContents*)(this_ptr_ptr);
+       LDKBumpTransactionEvent this_ptr_conv = *(LDKBumpTransactionEvent*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       ParsedOnionMessageContents_free(this_ptr_conv);
+       BumpTransactionEvent_free(this_ptr_conv);
 }
 
-static inline uint64_t ParsedOnionMessageContents_clone_ptr(LDKParsedOnionMessageContents *NONNULL_PTR arg) {
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_clone(arg);
+static inline uint64_t BumpTransactionEvent_clone_ptr(LDKBumpTransactionEvent *NONNULL_PTR arg) {
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-int64_t  CS_LDK_ParsedOnionMessageContents_clone_ptr(int64_t arg) {
-       LDKParsedOnionMessageContents* arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(arg);
-       int64_t ret_conv = ParsedOnionMessageContents_clone_ptr(arg_conv);
+int64_t  CS_LDK_BumpTransactionEvent_clone_ptr(int64_t arg) {
+       LDKBumpTransactionEvent* arg_conv = (LDKBumpTransactionEvent*)untag_ptr(arg);
+       int64_t ret_conv = BumpTransactionEvent_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_clone(int64_t orig) {
-       LDKParsedOnionMessageContents* orig_conv = (LDKParsedOnionMessageContents*)untag_ptr(orig);
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_clone(orig_conv);
+int64_t  CS_LDK_BumpTransactionEvent_clone(int64_t orig) {
+       LDKBumpTransactionEvent* orig_conv = (LDKBumpTransactionEvent*)untag_ptr(orig);
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_offers(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
-       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_offers(a_conv);
+int64_t  CS_LDK_BumpTransactionEvent_channel_close(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t package_target_feerate_sat_per_1000_weight, int8_tArray commitment_tx, int64_t commitment_tx_fee_satoshis, int64_t anchor_descriptor, int64_tArray pending_htlcs) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKThirtyTwoBytes claim_id_ref;
+       CHECK(claim_id->arr_len == 32);
+       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
+       LDKTransaction commitment_tx_ref;
+       commitment_tx_ref.datalen = commitment_tx->arr_len;
+       commitment_tx_ref.data = MALLOC(commitment_tx_ref.datalen, "LDKTransaction Bytes");
+       memcpy(commitment_tx_ref.data, commitment_tx->elems, commitment_tx_ref.datalen); FREE(commitment_tx);
+       commitment_tx_ref.data_is_owned = true;
+       LDKAnchorDescriptor anchor_descriptor_conv;
+       anchor_descriptor_conv.inner = untag_ptr(anchor_descriptor);
+       anchor_descriptor_conv.is_owned = ptr_is_owned(anchor_descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(anchor_descriptor_conv);
+       anchor_descriptor_conv = AnchorDescriptor_clone(&anchor_descriptor_conv);
+       LDKCVec_HTLCOutputInCommitmentZ pending_htlcs_constr;
+       pending_htlcs_constr.datalen = pending_htlcs->arr_len;
+       if (pending_htlcs_constr.datalen > 0)
+               pending_htlcs_constr.data = MALLOC(pending_htlcs_constr.datalen * sizeof(LDKHTLCOutputInCommitment), "LDKCVec_HTLCOutputInCommitmentZ Elements");
+       else
+               pending_htlcs_constr.data = NULL;
+       int64_t* pending_htlcs_vals = pending_htlcs->elems;
+       for (size_t y = 0; y < pending_htlcs_constr.datalen; y++) {
+               int64_t pending_htlcs_conv_24 = pending_htlcs_vals[y];
+               LDKHTLCOutputInCommitment pending_htlcs_conv_24_conv;
+               pending_htlcs_conv_24_conv.inner = untag_ptr(pending_htlcs_conv_24);
+               pending_htlcs_conv_24_conv.is_owned = ptr_is_owned(pending_htlcs_conv_24);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(pending_htlcs_conv_24_conv);
+               pending_htlcs_conv_24_conv = HTLCOutputInCommitment_clone(&pending_htlcs_conv_24_conv);
+               pending_htlcs_constr.data[y] = pending_htlcs_conv_24_conv;
+       }
+       FREE(pending_htlcs);
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_channel_close(channel_id_conv, counterparty_node_id_ref, claim_id_ref, package_target_feerate_sat_per_1000_weight, commitment_tx_ref, commitment_tx_fee_satoshis, anchor_descriptor_conv, pending_htlcs_constr);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_custom(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKOnionMessageContents a_conv = *(LDKOnionMessageContents*)(a_ptr);
-       if (a_conv.free == LDKOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOnionMessageContents_JCalls_cloned(&a_conv);
+int64_t  CS_LDK_BumpTransactionEvent_htlcresolution(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t target_feerate_sat_per_1000_weight, int64_tArray htlc_descriptors, int32_t tx_lock_time) {
+       LDKChannelId channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = ChannelId_clone(&channel_id_conv);
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK(counterparty_node_id->arr_len == 33);
+       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
+       LDKThirtyTwoBytes claim_id_ref;
+       CHECK(claim_id->arr_len == 32);
+       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
+       LDKCVec_HTLCDescriptorZ htlc_descriptors_constr;
+       htlc_descriptors_constr.datalen = htlc_descriptors->arr_len;
+       if (htlc_descriptors_constr.datalen > 0)
+               htlc_descriptors_constr.data = MALLOC(htlc_descriptors_constr.datalen * sizeof(LDKHTLCDescriptor), "LDKCVec_HTLCDescriptorZ Elements");
+       else
+               htlc_descriptors_constr.data = NULL;
+       int64_t* htlc_descriptors_vals = htlc_descriptors->elems;
+       for (size_t q = 0; q < htlc_descriptors_constr.datalen; q++) {
+               int64_t htlc_descriptors_conv_16 = htlc_descriptors_vals[q];
+               LDKHTLCDescriptor htlc_descriptors_conv_16_conv;
+               htlc_descriptors_conv_16_conv.inner = untag_ptr(htlc_descriptors_conv_16);
+               htlc_descriptors_conv_16_conv.is_owned = ptr_is_owned(htlc_descriptors_conv_16);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_descriptors_conv_16_conv);
+               htlc_descriptors_conv_16_conv = HTLCDescriptor_clone(&htlc_descriptors_conv_16_conv);
+               htlc_descriptors_constr.data[q] = htlc_descriptors_conv_16_conv;
        }
-       LDKParsedOnionMessageContents *ret_copy = MALLOC(sizeof(LDKParsedOnionMessageContents), "LDKParsedOnionMessageContents");
-       *ret_copy = ParsedOnionMessageContents_custom(a_conv);
+       FREE(htlc_descriptors);
+       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
+       *ret_copy = BumpTransactionEvent_htlcresolution(channel_id_conv, counterparty_node_id_ref, claim_id_ref, target_feerate_sat_per_1000_weight, htlc_descriptors_constr, tx_lock_time);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ParsedOnionMessageContents_as_OnionMessageContents(int64_t this_arg) {
-       LDKParsedOnionMessageContents* this_arg_conv = (LDKParsedOnionMessageContents*)untag_ptr(this_arg);
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = ParsedOnionMessageContents_as_OnionMessageContents(this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jboolean  CS_LDK_BumpTransactionEvent_eq(int64_t a, int64_t b) {
+       LDKBumpTransactionEvent* a_conv = (LDKBumpTransactionEvent*)untag_ptr(a);
+       LDKBumpTransactionEvent* b_conv = (LDKBumpTransactionEvent*)untag_ptr(b);
+       jboolean ret_conv = BumpTransactionEvent_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_ParsedOnionMessageContents_write(int64_t obj) {
-       LDKParsedOnionMessageContents* obj_conv = (LDKParsedOnionMessageContents*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = ParsedOnionMessageContents_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_Input_free(int64_t this_obj) {
+       LDKInput this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Input_free(this_obj_conv);
 }
 
-static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = OnionMessageContents_clone(arg);
-       return tag_ptr(ret_ret, true);
-}
-int64_t  CS_LDK_OnionMessageContents_clone_ptr(int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)arg_ptr;
-       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_OnionMessageContents_clone(int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)orig_ptr;
-       LDKOnionMessageContents* ret_ret = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_ret = OnionMessageContents_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-void  CS_LDK_OnionMessageContents_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OnionMessageContents_free(this_ptr_conv);
-}
-
-void  CS_LDK_NextMessageHop_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNextMessageHop this_ptr_conv = *(LDKNextMessageHop*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NextMessageHop_free(this_ptr_conv);
-}
-
-static inline uint64_t NextMessageHop_clone_ptr(LDKNextMessageHop *NONNULL_PTR arg) {
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_NextMessageHop_clone_ptr(int64_t arg) {
-       LDKNextMessageHop* arg_conv = (LDKNextMessageHop*)untag_ptr(arg);
-       int64_t ret_conv = NextMessageHop_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_NextMessageHop_clone(int64_t orig) {
-       LDKNextMessageHop* orig_conv = (LDKNextMessageHop*)untag_ptr(orig);
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_NextMessageHop_node_id(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_node_id(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_NextMessageHop_short_channel_id(int64_t a) {
-       LDKNextMessageHop *ret_copy = MALLOC(sizeof(LDKNextMessageHop), "LDKNextMessageHop");
-       *ret_copy = NextMessageHop_short_channel_id(a);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_NextMessageHop_hash(int64_t o) {
-       LDKNextMessageHop* o_conv = (LDKNextMessageHop*)untag_ptr(o);
-       int64_t ret_conv = NextMessageHop_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_NextMessageHop_eq(int64_t a, int64_t b) {
-       LDKNextMessageHop* a_conv = (LDKNextMessageHop*)untag_ptr(a);
-       LDKNextMessageHop* b_conv = (LDKNextMessageHop*)untag_ptr(b);
-       jboolean ret_conv = NextMessageHop_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_BlindedPath_free(int64_t this_obj) {
-       LDKBlindedPath this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPath_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_BlindedPath_get_introduction_node(int64_t this_ptr) {
-       LDKBlindedPath this_ptr_conv;
+int64_t  CS_LDK_Input_get_outpoint(int64_t this_ptr) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = BlindedPath_get_introduction_node(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKOutPoint ret_var = Input_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_BlindedPath_set_introduction_node(int64_t this_ptr, int64_t val) {
-       LDKBlindedPath this_ptr_conv;
+void  CS_LDK_Input_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKIntroductionNode val_conv = *(LDKIntroductionNode*)(val_ptr);
-       val_conv = IntroductionNode_clone((LDKIntroductionNode*)untag_ptr(val));
-       BlindedPath_set_introduction_node(&this_ptr_conv, val_conv);
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       Input_set_outpoint(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_BlindedPath_get_blinding_point(int64_t this_ptr) {
-       LDKBlindedPath this_ptr_conv;
+int64_t  CS_LDK_Input_get_previous_utxo(int64_t this_ptr) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, BlindedPath_get_blinding_point(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = Input_get_previous_utxo(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_BlindedPath_set_blinding_point(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedPath this_ptr_conv;
+void  CS_LDK_Input_set_previous_utxo(int64_t this_ptr, int64_t val) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       BlindedPath_set_blinding_point(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       Input_set_previous_utxo(&this_ptr_conv, val_conv);
 }
 
-int64_tArray  CS_LDK_BlindedPath_get_blinded_hops(int64_t this_ptr) {
-       LDKBlindedPath this_ptr_conv;
+int64_t  CS_LDK_Input_get_satisfaction_weight(int64_t this_ptr) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ ret_var = BlindedPath_get_blinded_hops(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t m = 0; m < ret_var.datalen; m++) {
-               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
-               int64_t ret_conv_12_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
-               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
-               ret_arr_ptr[m] = ret_conv_12_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
+       int64_t ret_conv = Input_get_satisfaction_weight(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_BlindedPath_set_blinded_hops(int64_t this_ptr, int64_tArray val) {
-       LDKBlindedPath this_ptr_conv;
+void  CS_LDK_Input_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
+       LDKInput this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               LDKBlindedHop val_conv_12_conv;
-               val_conv_12_conv.inner = untag_ptr(val_conv_12);
-               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
-               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
-               val_constr.data[m] = val_conv_12_conv;
-       }
-       FREE(val);
-       BlindedPath_set_blinded_hops(&this_ptr_conv, val_constr);
+       Input_set_satisfaction_weight(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_BlindedPath_new(int64_t introduction_node_arg, int8_tArray blinding_point_arg, int64_tArray blinded_hops_arg) {
-       void* introduction_node_arg_ptr = untag_ptr(introduction_node_arg);
-       CHECK_ACCESS(introduction_node_arg_ptr);
-       LDKIntroductionNode introduction_node_arg_conv = *(LDKIntroductionNode*)(introduction_node_arg_ptr);
-       introduction_node_arg_conv = IntroductionNode_clone((LDKIntroductionNode*)untag_ptr(introduction_node_arg));
-       LDKPublicKey blinding_point_arg_ref;
-       CHECK(blinding_point_arg->arr_len == 33);
-       memcpy(blinding_point_arg_ref.compressed_form, blinding_point_arg->elems, 33); FREE(blinding_point_arg);
-       LDKCVec_BlindedHopZ blinded_hops_arg_constr;
-       blinded_hops_arg_constr.datalen = blinded_hops_arg->arr_len;
-       if (blinded_hops_arg_constr.datalen > 0)
-               blinded_hops_arg_constr.data = MALLOC(blinded_hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               blinded_hops_arg_constr.data = NULL;
-       int64_t* blinded_hops_arg_vals = blinded_hops_arg->elems;
-       for (size_t m = 0; m < blinded_hops_arg_constr.datalen; m++) {
-               int64_t blinded_hops_arg_conv_12 = blinded_hops_arg_vals[m];
-               LDKBlindedHop blinded_hops_arg_conv_12_conv;
-               blinded_hops_arg_conv_12_conv.inner = untag_ptr(blinded_hops_arg_conv_12);
-               blinded_hops_arg_conv_12_conv.is_owned = ptr_is_owned(blinded_hops_arg_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_hops_arg_conv_12_conv);
-               blinded_hops_arg_conv_12_conv = BlindedHop_clone(&blinded_hops_arg_conv_12_conv);
-               blinded_hops_arg_constr.data[m] = blinded_hops_arg_conv_12_conv;
-       }
-       FREE(blinded_hops_arg);
-       LDKBlindedPath ret_var = BlindedPath_new(introduction_node_arg_conv, blinding_point_arg_ref, blinded_hops_arg_constr);
+int64_t  CS_LDK_Input_new(int64_t outpoint_arg, int64_t previous_utxo_arg, int64_t satisfaction_weight_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* previous_utxo_arg_ptr = untag_ptr(previous_utxo_arg);
+       CHECK_ACCESS(previous_utxo_arg_ptr);
+       LDKTxOut previous_utxo_arg_conv = *(LDKTxOut*)(previous_utxo_arg_ptr);
+       previous_utxo_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(previous_utxo_arg));
+       LDKInput ret_var = Input_new(outpoint_arg_conv, previous_utxo_arg_conv, satisfaction_weight_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg) {
-       LDKBlindedPath ret_var = BlindedPath_clone(arg);
+static inline uint64_t Input_clone_ptr(LDKInput *NONNULL_PTR arg) {
+       LDKInput ret_var = Input_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedPath_clone_ptr(int64_t arg) {
-       LDKBlindedPath arg_conv;
+int64_t  CS_LDK_Input_clone_ptr(int64_t arg) {
+       LDKInput arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_clone_ptr(&arg_conv);
+       int64_t ret_conv = Input_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPath_clone(int64_t orig) {
-       LDKBlindedPath orig_conv;
+int64_t  CS_LDK_Input_clone(int64_t orig) {
+       LDKInput orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPath ret_var = BlindedPath_clone(&orig_conv);
+       LDKInput ret_var = Input_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedPath_hash(int64_t o) {
-       LDKBlindedPath o_conv;
+int64_t  CS_LDK_Input_hash(int64_t o) {
+       LDKInput o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_hash(&o_conv);
+       int64_t ret_conv = Input_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_BlindedPath_eq(int64_t a, int64_t b) {
-       LDKBlindedPath a_conv;
+jboolean  CS_LDK_Input_eq(int64_t a, int64_t b) {
+       LDKInput a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedPath b_conv;
+       LDKInput b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPath_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_IntroductionNode_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKIntroductionNode this_ptr_conv = *(LDKIntroductionNode*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       IntroductionNode_free(this_ptr_conv);
-}
-
-static inline uint64_t IntroductionNode_clone_ptr(LDKIntroductionNode *NONNULL_PTR arg) {
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_IntroductionNode_clone_ptr(int64_t arg) {
-       LDKIntroductionNode* arg_conv = (LDKIntroductionNode*)untag_ptr(arg);
-       int64_t ret_conv = IntroductionNode_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_IntroductionNode_clone(int64_t orig) {
-       LDKIntroductionNode* orig_conv = (LDKIntroductionNode*)untag_ptr(orig);
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_IntroductionNode_node_id(int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK(a->arr_len == 33);
-       memcpy(a_ref.compressed_form, a->elems, 33); FREE(a);
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_node_id(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_IntroductionNode_directed_short_channel_id(int32_t a, int64_t b) {
-       LDKDirection a_conv = LDKDirection_from_cs(a);
-       LDKIntroductionNode *ret_copy = MALLOC(sizeof(LDKIntroductionNode), "LDKIntroductionNode");
-       *ret_copy = IntroductionNode_directed_short_channel_id(a_conv, b);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_IntroductionNode_hash(int64_t o) {
-       LDKIntroductionNode* o_conv = (LDKIntroductionNode*)untag_ptr(o);
-       int64_t ret_conv = IntroductionNode_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_IntroductionNode_eq(int64_t a, int64_t b) {
-       LDKIntroductionNode* a_conv = (LDKIntroductionNode*)untag_ptr(a);
-       LDKIntroductionNode* b_conv = (LDKIntroductionNode*)untag_ptr(b);
-       jboolean ret_conv = IntroductionNode_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Direction_clone(int64_t orig) {
-       LDKDirection* orig_conv = (LDKDirection*)untag_ptr(orig);
-       int32_t ret_conv = LDKDirection_to_cs(Direction_clone(orig_conv));
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Direction_node_one() {
-       int32_t ret_conv = LDKDirection_to_cs(Direction_node_one());
-       return ret_conv;
-}
-
-int32_t  CS_LDK_Direction_node_two() {
-       int32_t ret_conv = LDKDirection_to_cs(Direction_node_two());
-       return ret_conv;
-}
-
-int64_t  CS_LDK_Direction_hash(int64_t o) {
-       LDKDirection* o_conv = (LDKDirection*)untag_ptr(o);
-       int64_t ret_conv = Direction_hash(o_conv);
-       return ret_conv;
-}
-
-jboolean  CS_LDK_Direction_eq(int64_t a, int64_t b) {
-       LDKDirection* a_conv = (LDKDirection*)untag_ptr(a);
-       LDKDirection* b_conv = (LDKDirection*)untag_ptr(b);
-       jboolean ret_conv = Direction_eq(a_conv, b_conv);
+       jboolean ret_conv = Input_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-void  CS_LDK_NodeIdLookUp_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNodeIdLookUp this_ptr_conv = *(LDKNodeIdLookUp*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NodeIdLookUp_free(this_ptr_conv);
-}
-
-void  CS_LDK_EmptyNodeIdLookUp_free(int64_t this_obj) {
-       LDKEmptyNodeIdLookUp this_obj_conv;
+void  CS_LDK_Utxo_free(int64_t this_obj) {
+       LDKUtxo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       EmptyNodeIdLookUp_free(this_obj_conv);
+       Utxo_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_EmptyNodeIdLookUp_new() {
-       LDKEmptyNodeIdLookUp ret_var = EmptyNodeIdLookUp_new();
+int64_t  CS_LDK_Utxo_get_outpoint(int64_t this_ptr) {
+       LDKUtxo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint ret_var = Utxo_get_outpoint(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_EmptyNodeIdLookUp_as_NodeIdLookUp(int64_t this_arg) {
-       LDKEmptyNodeIdLookUp this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeIdLookUp* ret_ret = MALLOC(sizeof(LDKNodeIdLookUp), "LDKNodeIdLookUp");
-       *ret_ret = EmptyNodeIdLookUp_as_NodeIdLookUp(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-void  CS_LDK_BlindedHop_free(int64_t this_obj) {
-       LDKBlindedHop this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedHop_free(this_obj_conv);
+void  CS_LDK_Utxo_set_outpoint(int64_t this_ptr, int64_t val) {
+       LDKUtxo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       Utxo_set_outpoint(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_BlindedHop_get_blinded_node_id(int64_t this_ptr) {
-       LDKBlindedHop this_ptr_conv;
+int64_t  CS_LDK_Utxo_get_output(int64_t this_ptr) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, BlindedHop_get_blinded_node_id(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = Utxo_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
 }
 
-void  CS_LDK_BlindedHop_set_blinded_node_id(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedHop this_ptr_conv;
+void  CS_LDK_Utxo_set_output(int64_t this_ptr, int64_t val) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       BlindedHop_set_blinded_node_id(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       Utxo_set_output(&this_ptr_conv, val_conv);
 }
 
-int8_tArray  CS_LDK_BlindedHop_get_encrypted_payload(int64_t this_ptr) {
-       LDKBlindedHop this_ptr_conv;
+int64_t  CS_LDK_Utxo_get_satisfaction_weight(int64_t this_ptr) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHop_get_encrypted_payload(&this_ptr_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       int64_t ret_conv = Utxo_get_satisfaction_weight(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_BlindedHop_set_encrypted_payload(int64_t this_ptr, int8_tArray val) {
-       LDKBlindedHop this_ptr_conv;
+void  CS_LDK_Utxo_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
+       LDKUtxo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u8Z val_ref;
-       val_ref.datalen = val->arr_len;
-       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(val_ref.data, val->elems, val_ref.datalen); FREE(val);
-       BlindedHop_set_encrypted_payload(&this_ptr_conv, val_ref);
+       Utxo_set_satisfaction_weight(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_BlindedHop_new(int8_tArray blinded_node_id_arg, int8_tArray encrypted_payload_arg) {
-       LDKPublicKey blinded_node_id_arg_ref;
-       CHECK(blinded_node_id_arg->arr_len == 33);
-       memcpy(blinded_node_id_arg_ref.compressed_form, blinded_node_id_arg->elems, 33); FREE(blinded_node_id_arg);
-       LDKCVec_u8Z encrypted_payload_arg_ref;
-       encrypted_payload_arg_ref.datalen = encrypted_payload_arg->arr_len;
-       encrypted_payload_arg_ref.data = MALLOC(encrypted_payload_arg_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(encrypted_payload_arg_ref.data, encrypted_payload_arg->elems, encrypted_payload_arg_ref.datalen); FREE(encrypted_payload_arg);
-       LDKBlindedHop ret_var = BlindedHop_new(blinded_node_id_arg_ref, encrypted_payload_arg_ref);
+int64_t  CS_LDK_Utxo_new(int64_t outpoint_arg, int64_t output_arg, int64_t satisfaction_weight_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKUtxo ret_var = Utxo_new(outpoint_arg_conv, output_arg_conv, satisfaction_weight_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
-       LDKBlindedHop ret_var = BlindedHop_clone(arg);
+static inline uint64_t Utxo_clone_ptr(LDKUtxo *NONNULL_PTR arg) {
+       LDKUtxo ret_var = Utxo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_BlindedHop_clone_ptr(int64_t arg) {
-       LDKBlindedHop arg_conv;
+int64_t  CS_LDK_Utxo_clone_ptr(int64_t arg) {
+       LDKUtxo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = Utxo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedHop_clone(int64_t orig) {
-       LDKBlindedHop orig_conv;
+int64_t  CS_LDK_Utxo_clone(int64_t orig) {
+       LDKUtxo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
+       LDKUtxo ret_var = Utxo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedHop_hash(int64_t o) {
-       LDKBlindedHop o_conv;
+int64_t  CS_LDK_Utxo_hash(int64_t o) {
+       LDKUtxo o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_hash(&o_conv);
+       int64_t ret_conv = Utxo_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_BlindedHop_eq(int64_t a, int64_t b) {
-       LDKBlindedHop a_conv;
+jboolean  CS_LDK_Utxo_eq(int64_t a, int64_t b) {
+       LDKUtxo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedHop b_conv;
+       LDKUtxo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Utxo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_BlindedPath_one_hop_for_message(int8_tArray recipient_node_id, int64_t entropy_source) {
-       LDKPublicKey recipient_node_id_ref;
-       CHECK(recipient_node_id->arr_len == 33);
-       memcpy(recipient_node_id_ref.compressed_form, recipient_node_id->elems, 33); FREE(recipient_node_id);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = BlindedPath_one_hop_for_message(recipient_node_id_ref, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_Utxo_new_p2pkh(int64_t outpoint, int64_t value, int8_tArray pubkey_hash) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       uint8_t pubkey_hash_arr[20];
+       CHECK(pubkey_hash->arr_len == 20);
+       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
+       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
+       LDKUtxo ret_var = Utxo_new_p2pkh(outpoint_conv, value, pubkey_hash_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int64_t  CS_LDK_BlindedPath_new_for_message(ptrArray node_pks, int64_t entropy_source) {
-       LDKCVec_PublicKeyZ node_pks_constr;
-       node_pks_constr.datalen = node_pks->arr_len;
-       if (node_pks_constr.datalen > 0)
-               node_pks_constr.data = MALLOC(node_pks_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               node_pks_constr.data = NULL;
-       int8_tArray* node_pks_vals = (void*) node_pks->elems;
-       for (size_t i = 0; i < node_pks_constr.datalen; i++) {
-               int8_tArray node_pks_conv_8 = node_pks_vals[i];
-               LDKPublicKey node_pks_conv_8_ref;
-               CHECK(node_pks_conv_8->arr_len == 33);
-               memcpy(node_pks_conv_8_ref.compressed_form, node_pks_conv_8->elems, 33); FREE(node_pks_conv_8);
-               node_pks_constr.data[i] = node_pks_conv_8_ref;
-       }
-       FREE(node_pks);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = BlindedPath_new_for_message(node_pks_constr, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_CoinSelection_free(int64_t this_obj) {
+       LDKCoinSelection this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       CoinSelection_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_BlindedPath_one_hop_for_payment(int8_tArray payee_node_id, int64_t payee_tlvs, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
-       LDKPublicKey payee_node_id_ref;
-       CHECK(payee_node_id->arr_len == 33);
-       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
-       LDKReceiveTlvs payee_tlvs_conv;
-       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
-       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
-       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+int64_tArray  CS_LDK_CoinSelection_get_confirmed_utxos(int64_t this_ptr) {
+       LDKCoinSelection this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_UtxoZ ret_var = CoinSelection_get_confirmed_utxos(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               LDKUtxo ret_conv_6_var = ret_var.data[g];
+               int64_t ret_conv_6_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
+               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
+               ret_arr_ptr[g] = ret_conv_6_ref;
        }
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = BlindedPath_one_hop_for_payment(payee_node_id_ref, payee_tlvs_conv, min_final_cltv_expiry_delta, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_BlindedPath_new_for_payment(int64_tArray intermediate_nodes, int8_tArray payee_node_id, int64_t payee_tlvs, int64_t htlc_maximum_msat, int16_t min_final_cltv_expiry_delta, int64_t entropy_source) {
-       LDKCVec_ForwardNodeZ intermediate_nodes_constr;
-       intermediate_nodes_constr.datalen = intermediate_nodes->arr_len;
-       if (intermediate_nodes_constr.datalen > 0)
-               intermediate_nodes_constr.data = MALLOC(intermediate_nodes_constr.datalen * sizeof(LDKForwardNode), "LDKCVec_ForwardNodeZ Elements");
-       else
-               intermediate_nodes_constr.data = NULL;
-       int64_t* intermediate_nodes_vals = intermediate_nodes->elems;
-       for (size_t n = 0; n < intermediate_nodes_constr.datalen; n++) {
-               int64_t intermediate_nodes_conv_13 = intermediate_nodes_vals[n];
-               LDKForwardNode intermediate_nodes_conv_13_conv;
-               intermediate_nodes_conv_13_conv.inner = untag_ptr(intermediate_nodes_conv_13);
-               intermediate_nodes_conv_13_conv.is_owned = ptr_is_owned(intermediate_nodes_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(intermediate_nodes_conv_13_conv);
-               intermediate_nodes_conv_13_conv = ForwardNode_clone(&intermediate_nodes_conv_13_conv);
-               intermediate_nodes_constr.data[n] = intermediate_nodes_conv_13_conv;
-       }
-       FREE(intermediate_nodes);
-       LDKPublicKey payee_node_id_ref;
-       CHECK(payee_node_id->arr_len == 33);
-       memcpy(payee_node_id_ref.compressed_form, payee_node_id->elems, 33); FREE(payee_node_id);
-       LDKReceiveTlvs payee_tlvs_conv;
-       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
-       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
-       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
-       *ret_conv = BlindedPath_new_for_payment(intermediate_nodes_constr, payee_node_id_ref, payee_tlvs_conv, htlc_maximum_msat, min_final_cltv_expiry_delta, entropy_source_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_BlindedPath_public_introduction_node_id(int64_t this_arg, int64_t network_graph) {
-       LDKBlindedPath this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKReadOnlyNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKNodeId ret_var = BlindedPath_public_introduction_node_id(&this_arg_conv, &network_graph_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-int8_tArray  CS_LDK_BlindedPath_write(int64_t obj) {
-       LDKBlindedPath obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPath_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_BlindedPath_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = BlindedPath_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int8_tArray  CS_LDK_BlindedHop_write(int64_t obj) {
-       LDKBlindedHop obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
-}
-
-int64_t  CS_LDK_BlindedHop_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
-       *ret_conv = BlindedHop_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_ForwardNode_free(int64_t this_obj) {
-       LDKForwardNode this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ForwardNode_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_ForwardNode_get_tlvs(int64_t this_ptr) {
-       LDKForwardNode this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKForwardTlvs ret_var = ForwardNode_get_tlvs(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ForwardNode_set_tlvs(int64_t this_ptr, int64_t val) {
-       LDKForwardNode this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKForwardTlvs val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ForwardTlvs_clone(&val_conv);
-       ForwardNode_set_tlvs(&this_ptr_conv, val_conv);
-}
-
-int8_tArray  CS_LDK_ForwardNode_get_node_id(int64_t this_ptr) {
-       LDKForwardNode this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
-       memcpy(ret_arr->elems, ForwardNode_get_node_id(&this_ptr_conv).compressed_form, 33);
-       return ret_arr;
-}
-
-void  CS_LDK_ForwardNode_set_node_id(int64_t this_ptr, int8_tArray val) {
-       LDKForwardNode this_ptr_conv;
+void  CS_LDK_CoinSelection_set_confirmed_utxos(int64_t this_ptr, int64_tArray val) {
+       LDKCoinSelection this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK(val->arr_len == 33);
-       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
-       ForwardNode_set_node_id(&this_ptr_conv, val_ref);
+       LDKCVec_UtxoZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               LDKUtxo val_conv_6_conv;
+               val_conv_6_conv.inner = untag_ptr(val_conv_6);
+               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
+               val_conv_6_conv = Utxo_clone(&val_conv_6_conv);
+               val_constr.data[g] = val_conv_6_conv;
+       }
+       FREE(val);
+       CoinSelection_set_confirmed_utxos(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_ForwardNode_get_htlc_maximum_msat(int64_t this_ptr) {
-       LDKForwardNode this_ptr_conv;
+int64_t  CS_LDK_CoinSelection_get_change_output(int64_t this_ptr) {
+       LDKCoinSelection this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ForwardNode_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_TxOutZ *ret_copy = MALLOC(sizeof(LDKCOption_TxOutZ), "LDKCOption_TxOutZ");
+       *ret_copy = CoinSelection_get_change_output(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_ForwardNode_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
-       LDKForwardNode this_ptr_conv;
+void  CS_LDK_CoinSelection_set_change_output(int64_t this_ptr, int64_t val) {
+       LDKCoinSelection this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ForwardNode_set_htlc_maximum_msat(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_TxOutZ val_conv = *(LDKCOption_TxOutZ*)(val_ptr);
+       val_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(val));
+       CoinSelection_set_change_output(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_ForwardNode_new(int64_t tlvs_arg, int8_tArray node_id_arg, int64_t htlc_maximum_msat_arg) {
-       LDKForwardTlvs tlvs_arg_conv;
-       tlvs_arg_conv.inner = untag_ptr(tlvs_arg);
-       tlvs_arg_conv.is_owned = ptr_is_owned(tlvs_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_arg_conv);
-       tlvs_arg_conv = ForwardTlvs_clone(&tlvs_arg_conv);
-       LDKPublicKey node_id_arg_ref;
-       CHECK(node_id_arg->arr_len == 33);
-       memcpy(node_id_arg_ref.compressed_form, node_id_arg->elems, 33); FREE(node_id_arg);
-       LDKForwardNode ret_var = ForwardNode_new(tlvs_arg_conv, node_id_arg_ref, htlc_maximum_msat_arg);
+int64_t  CS_LDK_CoinSelection_new(int64_tArray confirmed_utxos_arg, int64_t change_output_arg) {
+       LDKCVec_UtxoZ confirmed_utxos_arg_constr;
+       confirmed_utxos_arg_constr.datalen = confirmed_utxos_arg->arr_len;
+       if (confirmed_utxos_arg_constr.datalen > 0)
+               confirmed_utxos_arg_constr.data = MALLOC(confirmed_utxos_arg_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
+       else
+               confirmed_utxos_arg_constr.data = NULL;
+       int64_t* confirmed_utxos_arg_vals = confirmed_utxos_arg->elems;
+       for (size_t g = 0; g < confirmed_utxos_arg_constr.datalen; g++) {
+               int64_t confirmed_utxos_arg_conv_6 = confirmed_utxos_arg_vals[g];
+               LDKUtxo confirmed_utxos_arg_conv_6_conv;
+               confirmed_utxos_arg_conv_6_conv.inner = untag_ptr(confirmed_utxos_arg_conv_6);
+               confirmed_utxos_arg_conv_6_conv.is_owned = ptr_is_owned(confirmed_utxos_arg_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(confirmed_utxos_arg_conv_6_conv);
+               confirmed_utxos_arg_conv_6_conv = Utxo_clone(&confirmed_utxos_arg_conv_6_conv);
+               confirmed_utxos_arg_constr.data[g] = confirmed_utxos_arg_conv_6_conv;
+       }
+       FREE(confirmed_utxos_arg);
+       void* change_output_arg_ptr = untag_ptr(change_output_arg);
+       CHECK_ACCESS(change_output_arg_ptr);
+       LDKCOption_TxOutZ change_output_arg_conv = *(LDKCOption_TxOutZ*)(change_output_arg_ptr);
+       change_output_arg_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(change_output_arg));
+       LDKCoinSelection ret_var = CoinSelection_new(confirmed_utxos_arg_constr, change_output_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ForwardNode_clone_ptr(LDKForwardNode *NONNULL_PTR arg) {
-       LDKForwardNode ret_var = ForwardNode_clone(arg);
+static inline uint64_t CoinSelection_clone_ptr(LDKCoinSelection *NONNULL_PTR arg) {
+       LDKCoinSelection ret_var = CoinSelection_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ForwardNode_clone_ptr(int64_t arg) {
-       LDKForwardNode arg_conv;
+int64_t  CS_LDK_CoinSelection_clone_ptr(int64_t arg) {
+       LDKCoinSelection arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ForwardNode_clone_ptr(&arg_conv);
+       int64_t ret_conv = CoinSelection_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ForwardNode_clone(int64_t orig) {
-       LDKForwardNode orig_conv;
+int64_t  CS_LDK_CoinSelection_clone(int64_t orig) {
+       LDKCoinSelection orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKForwardNode ret_var = ForwardNode_clone(&orig_conv);
+       LDKCoinSelection ret_var = CoinSelection_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ForwardTlvs_free(int64_t this_obj) {
-       LDKForwardTlvs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ForwardTlvs_free(this_obj_conv);
+void  CS_LDK_CoinSelectionSource_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCoinSelectionSource this_ptr_conv = *(LDKCoinSelectionSource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CoinSelectionSource_free(this_ptr_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_get_short_channel_id(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ForwardTlvs_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+void  CS_LDK_WalletSource_free(int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWalletSource this_ptr_conv = *(LDKWalletSource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WalletSource_free(this_ptr_conv);
 }
 
-void  CS_LDK_ForwardTlvs_set_short_channel_id(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ForwardTlvs_set_short_channel_id(&this_ptr_conv, val);
+void  CS_LDK_Wallet_free(int64_t this_obj) {
+       LDKWallet this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Wallet_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_get_payment_relay(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentRelay ret_var = ForwardTlvs_get_payment_relay(&this_ptr_conv);
+int64_t  CS_LDK_Wallet_new(int64_t source, int64_t logger) {
+       void* source_ptr = untag_ptr(source);
+       CHECK_ACCESS(source_ptr);
+       LDKWalletSource source_conv = *(LDKWalletSource*)(source_ptr);
+       if (source_conv.free == LDKWalletSource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKWalletSource_JCalls_cloned(&source_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKWallet ret_var = Wallet_new(source_conv, logger_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ForwardTlvs_set_payment_relay(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentRelay val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentRelay_clone(&val_conv);
-       ForwardTlvs_set_payment_relay(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_ForwardTlvs_get_payment_constraints(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints ret_var = ForwardTlvs_get_payment_constraints(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_Wallet_as_CoinSelectionSource(int64_t this_arg) {
+       LDKWallet this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCoinSelectionSource* ret_ret = MALLOC(sizeof(LDKCoinSelectionSource), "LDKCoinSelectionSource");
+       *ret_ret = Wallet_as_CoinSelectionSource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-void  CS_LDK_ForwardTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentConstraints_clone(&val_conv);
-       ForwardTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
+void  CS_LDK_BumpTransactionEventHandler_free(int64_t this_obj) {
+       LDKBumpTransactionEventHandler this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BumpTransactionEventHandler_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_get_features(int64_t this_ptr) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = ForwardTlvs_get_features(&this_ptr_conv);
+int64_t  CS_LDK_BumpTransactionEventHandler_new(int64_t broadcaster, int64_t utxo_source, int64_t signer_provider, int64_t logger) {
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       CHECK_ACCESS(broadcaster_ptr);
+       LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(broadcaster_ptr);
+       if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKBroadcasterInterface_JCalls_cloned(&broadcaster_conv);
+       }
+       void* utxo_source_ptr = untag_ptr(utxo_source);
+       CHECK_ACCESS(utxo_source_ptr);
+       LDKCoinSelectionSource utxo_source_conv = *(LDKCoinSelectionSource*)(utxo_source_ptr);
+       if (utxo_source_conv.free == LDKCoinSelectionSource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCoinSelectionSource_JCalls_cloned(&utxo_source_conv);
+       }
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       CHECK_ACCESS(signer_provider_ptr);
+       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
+       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKBumpTransactionEventHandler ret_var = BumpTransactionEventHandler_new(broadcaster_conv, utxo_source_conv, signer_provider_conv, logger_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ForwardTlvs_set_features(int64_t this_ptr, int64_t val) {
-       LDKForwardTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedHopFeatures_clone(&val_conv);
-       ForwardTlvs_set_features(&this_ptr_conv, val_conv);
+void  CS_LDK_BumpTransactionEventHandler_handle_event(int64_t this_arg, int64_t event) {
+       LDKBumpTransactionEventHandler this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBumpTransactionEvent* event_conv = (LDKBumpTransactionEvent*)untag_ptr(event);
+       BumpTransactionEventHandler_handle_event(&this_arg_conv, event_conv);
 }
 
-int64_t  CS_LDK_ForwardTlvs_new(int64_t short_channel_id_arg, int64_t payment_relay_arg, int64_t payment_constraints_arg, int64_t features_arg) {
-       LDKPaymentRelay payment_relay_arg_conv;
-       payment_relay_arg_conv.inner = untag_ptr(payment_relay_arg);
-       payment_relay_arg_conv.is_owned = ptr_is_owned(payment_relay_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_relay_arg_conv);
-       payment_relay_arg_conv = PaymentRelay_clone(&payment_relay_arg_conv);
-       LDKPaymentConstraints payment_constraints_arg_conv;
-       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
-       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
-       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
-       LDKBlindedHopFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
-       LDKForwardTlvs ret_var = ForwardTlvs_new(short_channel_id_arg, payment_relay_arg_conv, payment_constraints_arg_conv, features_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_eq(int64_t a, int64_t b) {
+       LDKInitFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKInitFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-static inline uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg) {
-       LDKForwardTlvs ret_var = ForwardTlvs_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-int64_t  CS_LDK_ForwardTlvs_clone_ptr(int64_t arg) {
-       LDKForwardTlvs arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ForwardTlvs_clone_ptr(&arg_conv);
+jboolean  CS_LDK_NodeFeatures_eq(int64_t a, int64_t b) {
+       LDKNodeFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKNodeFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ForwardTlvs_clone(int64_t orig) {
-       LDKForwardTlvs orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKForwardTlvs ret_var = ForwardTlvs_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelFeatures_eq(int64_t a, int64_t b) {
+       LDKChannelFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ReceiveTlvs_free(int64_t this_obj) {
-       LDKReceiveTlvs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ReceiveTlvs_free(this_obj_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_eq(int64_t a, int64_t b) {
+       LDKBolt11InvoiceFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_ReceiveTlvs_get_payment_secret(int64_t this_ptr) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(32, __LINE__);
-       memcpy(ret_arr->elems, *ReceiveTlvs_get_payment_secret(&this_ptr_conv), 32);
-       return ret_arr;
+jboolean  CS_LDK_OfferFeatures_eq(int64_t a, int64_t b) {
+       LDKOfferFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKOfferFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ReceiveTlvs_set_payment_secret(int64_t this_ptr, int8_tArray val) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK(val->arr_len == 32);
-       memcpy(val_ref.data, val->elems, 32); FREE(val);
-       ReceiveTlvs_set_payment_secret(&this_ptr_conv, val_ref);
+jboolean  CS_LDK_InvoiceRequestFeatures_eq(int64_t a, int64_t b) {
+       LDKInvoiceRequestFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKInvoiceRequestFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ReceiveTlvs_get_payment_constraints(int64_t this_ptr) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints ret_var = ReceiveTlvs_get_payment_constraints(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_ReceiveTlvs_set_payment_constraints(int64_t this_ptr, int64_t val) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentConstraints val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentConstraints_clone(&val_conv);
-       ReceiveTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_ReceiveTlvs_get_payment_context(int64_t this_ptr) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = ReceiveTlvs_get_payment_context(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt12InvoiceFeatures_eq(int64_t a, int64_t b) {
+       LDKBolt12InvoiceFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_ReceiveTlvs_set_payment_context(int64_t this_ptr, int64_t val) {
-       LDKReceiveTlvs this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKPaymentContext val_conv = *(LDKPaymentContext*)(val_ptr);
-       val_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(val));
-       ReceiveTlvs_set_payment_context(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_BlindedHopFeatures_eq(int64_t a, int64_t b) {
+       LDKBlindedHopFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedHopFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ReceiveTlvs_new(int8_tArray payment_secret_arg, int64_t payment_constraints_arg, int64_t payment_context_arg) {
-       LDKThirtyTwoBytes payment_secret_arg_ref;
-       CHECK(payment_secret_arg->arr_len == 32);
-       memcpy(payment_secret_arg_ref.data, payment_secret_arg->elems, 32); FREE(payment_secret_arg);
-       LDKPaymentConstraints payment_constraints_arg_conv;
-       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
-       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
-       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
-       void* payment_context_arg_ptr = untag_ptr(payment_context_arg);
-       CHECK_ACCESS(payment_context_arg_ptr);
-       LDKPaymentContext payment_context_arg_conv = *(LDKPaymentContext*)(payment_context_arg_ptr);
-       payment_context_arg_conv = PaymentContext_clone((LDKPaymentContext*)untag_ptr(payment_context_arg));
-       LDKReceiveTlvs ret_var = ReceiveTlvs_new(payment_secret_arg_ref, payment_constraints_arg_conv, payment_context_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_eq(int64_t a, int64_t b) {
+       LDKChannelTypeFeatures a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKChannelTypeFeatures b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-static inline uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg) {
-       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(arg);
+static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
+       LDKInitFeatures ret_var = InitFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_ReceiveTlvs_clone_ptr(int64_t arg) {
-       LDKReceiveTlvs arg_conv;
+int64_t  CS_LDK_InitFeatures_clone_ptr(int64_t arg) {
+       LDKInitFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ReceiveTlvs_clone_ptr(&arg_conv);
+       int64_t ret_conv = InitFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_ReceiveTlvs_clone(int64_t orig) {
-       LDKReceiveTlvs orig_conv;
+int64_t  CS_LDK_InitFeatures_clone(int64_t orig) {
+       LDKInitFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(&orig_conv);
+       LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentRelay_free(int64_t this_obj) {
-       LDKPaymentRelay this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentRelay_free(this_obj_conv);
-}
-
-int16_t  CS_LDK_PaymentRelay_get_cltv_expiry_delta(int64_t this_ptr) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = PaymentRelay_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_PaymentRelay_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentRelay_set_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-int32_t  CS_LDK_PaymentRelay_get_fee_proportional_millionths(int64_t this_ptr) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentRelay_get_fee_proportional_millionths(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_PaymentRelay_set_fee_proportional_millionths(int64_t this_ptr, int32_t val) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentRelay_set_fee_proportional_millionths(&this_ptr_conv, val);
+static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
+       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int32_t  CS_LDK_PaymentRelay_get_fee_base_msat(int64_t this_ptr) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentRelay_get_fee_base_msat(&this_ptr_conv);
+int64_t  CS_LDK_NodeFeatures_clone_ptr(int64_t arg) {
+       LDKNodeFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = NodeFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_PaymentRelay_set_fee_base_msat(int64_t this_ptr, int32_t val) {
-       LDKPaymentRelay this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentRelay_set_fee_base_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_PaymentRelay_new(int16_t cltv_expiry_delta_arg, int32_t fee_proportional_millionths_arg, int32_t fee_base_msat_arg) {
-       LDKPaymentRelay ret_var = PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
+int64_t  CS_LDK_NodeFeatures_clone(int64_t orig) {
+       LDKNodeFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg) {
-       LDKPaymentRelay ret_var = PaymentRelay_clone(arg);
+static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PaymentRelay_clone_ptr(int64_t arg) {
-       LDKPaymentRelay arg_conv;
+int64_t  CS_LDK_ChannelFeatures_clone_ptr(int64_t arg) {
+       LDKChannelFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentRelay_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentRelay_clone(int64_t orig) {
-       LDKPaymentRelay orig_conv;
+int64_t  CS_LDK_ChannelFeatures_clone(int64_t orig) {
+       LDKChannelFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentRelay ret_var = PaymentRelay_clone(&orig_conv);
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentConstraints_free(int64_t this_obj) {
-       LDKPaymentConstraints this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentConstraints_free(this_obj_conv);
-}
-
-int32_t  CS_LDK_PaymentConstraints_get_max_cltv_expiry(int64_t this_ptr) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentConstraints_get_max_cltv_expiry(&this_ptr_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_PaymentConstraints_set_max_cltv_expiry(int64_t this_ptr, int32_t val) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentConstraints_set_max_cltv_expiry(&this_ptr_conv, val);
+static inline uint64_t Bolt11InvoiceFeatures_clone_ptr(LDKBolt11InvoiceFeatures *NONNULL_PTR arg) {
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-int64_t  CS_LDK_PaymentConstraints_get_htlc_minimum_msat(int64_t this_ptr) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = PaymentConstraints_get_htlc_minimum_msat(&this_ptr_conv);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_clone_ptr(int64_t arg) {
+       LDKBolt11InvoiceFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt11InvoiceFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_PaymentConstraints_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
-       LDKPaymentConstraints this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       PaymentConstraints_set_htlc_minimum_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_PaymentConstraints_new(int32_t max_cltv_expiry_arg, int64_t htlc_minimum_msat_arg) {
-       LDKPaymentConstraints ret_var = PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_clone(int64_t orig) {
+       LDKBolt11InvoiceFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg) {
-       LDKPaymentConstraints ret_var = PaymentConstraints_clone(arg);
+static inline uint64_t OfferFeatures_clone_ptr(LDKOfferFeatures *NONNULL_PTR arg) {
+       LDKOfferFeatures ret_var = OfferFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_PaymentConstraints_clone_ptr(int64_t arg) {
-       LDKPaymentConstraints arg_conv;
+int64_t  CS_LDK_OfferFeatures_clone_ptr(int64_t arg) {
+       LDKOfferFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentConstraints_clone_ptr(&arg_conv);
+       int64_t ret_conv = OfferFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentConstraints_clone(int64_t orig) {
-       LDKPaymentConstraints orig_conv;
+int64_t  CS_LDK_OfferFeatures_clone(int64_t orig) {
+       LDKOfferFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentConstraints ret_var = PaymentConstraints_clone(&orig_conv);
+       LDKOfferFeatures ret_var = OfferFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_PaymentContext_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPaymentContext this_ptr_conv = *(LDKPaymentContext*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PaymentContext_free(this_ptr_conv);
-}
-
-static inline uint64_t PaymentContext_clone_ptr(LDKPaymentContext *NONNULL_PTR arg) {
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_PaymentContext_clone_ptr(int64_t arg) {
-       LDKPaymentContext* arg_conv = (LDKPaymentContext*)untag_ptr(arg);
-       int64_t ret_conv = PaymentContext_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_PaymentContext_clone(int64_t orig) {
-       LDKPaymentContext* orig_conv = (LDKPaymentContext*)untag_ptr(orig);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentContext_unknown(int64_t a) {
-       LDKUnknownPaymentContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = UnknownPaymentContext_clone(&a_conv);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_unknown(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentContext_bolt12_offer(int64_t a) {
-       LDKBolt12OfferContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12OfferContext_clone(&a_conv);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_bolt12_offer(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentContext_bolt12_refund(int64_t a) {
-       LDKBolt12RefundContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12RefundContext_clone(&a_conv);
-       LDKPaymentContext *ret_copy = MALLOC(sizeof(LDKPaymentContext), "LDKPaymentContext");
-       *ret_copy = PaymentContext_bolt12_refund(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_PaymentContext_eq(int64_t a, int64_t b) {
-       LDKPaymentContext* a_conv = (LDKPaymentContext*)untag_ptr(a);
-       LDKPaymentContext* b_conv = (LDKPaymentContext*)untag_ptr(b);
-       jboolean ret_conv = PaymentContext_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-void  CS_LDK_UnknownPaymentContext_free(int64_t this_obj) {
-       LDKUnknownPaymentContext this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnknownPaymentContext_free(this_obj_conv);
-}
-
-static inline uint64_t UnknownPaymentContext_clone_ptr(LDKUnknownPaymentContext *NONNULL_PTR arg) {
-       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(arg);
+static inline uint64_t InvoiceRequestFeatures_clone_ptr(LDKInvoiceRequestFeatures *NONNULL_PTR arg) {
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_UnknownPaymentContext_clone_ptr(int64_t arg) {
-       LDKUnknownPaymentContext arg_conv;
+int64_t  CS_LDK_InvoiceRequestFeatures_clone_ptr(int64_t arg) {
+       LDKInvoiceRequestFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = UnknownPaymentContext_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvoiceRequestFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_UnknownPaymentContext_clone(int64_t orig) {
-       LDKUnknownPaymentContext orig_conv;
+int64_t  CS_LDK_InvoiceRequestFeatures_clone(int64_t orig) {
+       LDKInvoiceRequestFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUnknownPaymentContext ret_var = UnknownPaymentContext_clone(&orig_conv);
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_UnknownPaymentContext_eq(int64_t a, int64_t b) {
-       LDKUnknownPaymentContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKUnknownPaymentContext b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = UnknownPaymentContext_eq(&a_conv, &b_conv);
-       return ret_conv;
+static inline uint64_t Bolt12InvoiceFeatures_clone_ptr(LDKBolt12InvoiceFeatures *NONNULL_PTR arg) {
+       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-void  CS_LDK_Bolt12OfferContext_free(int64_t this_obj) {
-       LDKBolt12OfferContext this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12OfferContext_free(this_obj_conv);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_clone_ptr(int64_t arg) {
+       LDKBolt12InvoiceFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12InvoiceFeatures_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_get_offer_id(int64_t this_ptr) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOfferId ret_var = Bolt12OfferContext_get_offer_id(&this_ptr_conv);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_clone(int64_t orig) {
+       LDKBolt12InvoiceFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Bolt12OfferContext_set_offer_id(int64_t this_ptr, int64_t val) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOfferId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OfferId_clone(&val_conv);
-       Bolt12OfferContext_set_offer_id(&this_ptr_conv, val_conv);
-}
-
-int64_t  CS_LDK_Bolt12OfferContext_get_invoice_request(int64_t this_ptr) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKInvoiceRequestFields ret_var = Bolt12OfferContext_get_invoice_request(&this_ptr_conv);
+static inline uint64_t BlindedHopFeatures_clone_ptr(LDKBlindedHopFeatures *NONNULL_PTR arg) {
+       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-void  CS_LDK_Bolt12OfferContext_set_invoice_request(int64_t this_ptr, int64_t val) {
-       LDKBolt12OfferContext this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKInvoiceRequestFields val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = InvoiceRequestFields_clone(&val_conv);
-       Bolt12OfferContext_set_invoice_request(&this_ptr_conv, val_conv);
+int64_t  CS_LDK_BlindedHopFeatures_clone_ptr(int64_t arg) {
+       LDKBlindedHopFeatures arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedHopFeatures_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_new(int64_t offer_id_arg, int64_t invoice_request_arg) {
-       LDKOfferId offer_id_arg_conv;
-       offer_id_arg_conv.inner = untag_ptr(offer_id_arg);
-       offer_id_arg_conv.is_owned = ptr_is_owned(offer_id_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(offer_id_arg_conv);
-       offer_id_arg_conv = OfferId_clone(&offer_id_arg_conv);
-       LDKInvoiceRequestFields invoice_request_arg_conv;
-       invoice_request_arg_conv.inner = untag_ptr(invoice_request_arg);
-       invoice_request_arg_conv.is_owned = ptr_is_owned(invoice_request_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_arg_conv);
-       invoice_request_arg_conv = InvoiceRequestFields_clone(&invoice_request_arg_conv);
-       LDKBolt12OfferContext ret_var = Bolt12OfferContext_new(offer_id_arg_conv, invoice_request_arg_conv);
+int64_t  CS_LDK_BlindedHopFeatures_clone(int64_t orig) {
+       LDKBlindedHopFeatures orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt12OfferContext_clone_ptr(LDKBolt12OfferContext *NONNULL_PTR arg) {
-       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(arg);
+static inline uint64_t ChannelTypeFeatures_clone_ptr(LDKChannelTypeFeatures *NONNULL_PTR arg) {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12OfferContext_clone_ptr(int64_t arg) {
-       LDKBolt12OfferContext arg_conv;
+int64_t  CS_LDK_ChannelTypeFeatures_clone_ptr(int64_t arg) {
+       LDKChannelTypeFeatures arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12OfferContext_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelTypeFeatures_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_clone(int64_t orig) {
-       LDKBolt12OfferContext orig_conv;
+int64_t  CS_LDK_ChannelTypeFeatures_clone(int64_t orig) {
+       LDKChannelTypeFeatures orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12OfferContext ret_var = Bolt12OfferContext_clone(&orig_conv);
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12OfferContext_eq(int64_t a, int64_t b) {
-       LDKBolt12OfferContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt12OfferContext b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt12OfferContext_eq(&a_conv, &b_conv);
+int64_t  CS_LDK_InitFeatures_hash(int64_t o) {
+       LDKInitFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = InitFeatures_hash(&o_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Bolt12RefundContext_free(int64_t this_obj) {
-       LDKBolt12RefundContext this_obj_conv;
+int64_t  CS_LDK_NodeFeatures_hash(int64_t o) {
+       LDKNodeFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = NodeFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelFeatures_hash(int64_t o) {
+       LDKChannelFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Bolt11InvoiceFeatures_hash(int64_t o) {
+       LDKBolt11InvoiceFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Bolt11InvoiceFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_OfferFeatures_hash(int64_t o) {
+       LDKOfferFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = OfferFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_InvoiceRequestFeatures_hash(int64_t o) {
+       LDKInvoiceRequestFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = InvoiceRequestFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_Bolt12InvoiceFeatures_hash(int64_t o) {
+       LDKBolt12InvoiceFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Bolt12InvoiceFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_BlindedHopFeatures_hash(int64_t o) {
+       LDKBlindedHopFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedHopFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_hash(int64_t o) {
+       LDKChannelTypeFeatures o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelTypeFeatures_hash(&o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_free(int64_t this_obj) {
+       LDKInitFeatures this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12RefundContext_free(this_obj_conv);
+       InitFeatures_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Bolt12RefundContext_new() {
-       LDKBolt12RefundContext ret_var = Bolt12RefundContext_new();
+void  CS_LDK_NodeFeatures_free(int64_t this_obj) {
+       LDKNodeFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_ChannelFeatures_free(int64_t this_obj) {
+       LDKChannelFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_free(int64_t this_obj) {
+       LDKBolt11InvoiceFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt11InvoiceFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_OfferFeatures_free(int64_t this_obj) {
+       LDKOfferFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OfferFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_InvoiceRequestFeatures_free(int64_t this_obj) {
+       LDKInvoiceRequestFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequestFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_Bolt12InvoiceFeatures_free(int64_t this_obj) {
+       LDKBolt12InvoiceFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12InvoiceFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_BlindedHopFeatures_free(int64_t this_obj) {
+       LDKBlindedHopFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedHopFeatures_free(this_obj_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_free(int64_t this_obj) {
+       LDKChannelTypeFeatures this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelTypeFeatures_free(this_obj_conv);
+}
+
+int64_t  CS_LDK_Bolt11InvoiceFeatures_for_keysend(jboolean allow_mpp) {
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_for_keysend(allow_mpp);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Bolt12RefundContext_clone_ptr(LDKBolt12RefundContext *NONNULL_PTR arg) {
-       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(arg);
+int64_t  CS_LDK_ChannelTypeFeatures_only_static_remote_key() {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_only_static_remote_key();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Bolt12RefundContext_clone_ptr(int64_t arg) {
-       LDKBolt12RefundContext arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12RefundContext_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-int64_t  CS_LDK_Bolt12RefundContext_clone(int64_t orig) {
-       LDKBolt12RefundContext orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt12RefundContext ret_var = Bolt12RefundContext_clone(&orig_conv);
+int64_t  CS_LDK_ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies() {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_Bolt12RefundContext_eq(int64_t a, int64_t b) {
-       LDKBolt12RefundContext a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBolt12RefundContext b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Bolt12RefundContext_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_ForwardTlvs_write(int64_t obj) {
-       LDKForwardTlvs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ForwardTlvs_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InitFeatures_empty() {
+       LDKInitFeatures ret_var = InitFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_ReceiveTlvs_write(int64_t obj) {
-       LDKReceiveTlvs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ReceiveTlvs_write(&obj_conv);
+int8_tArray  CS_LDK_InitFeatures_le_flags(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = InitFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int8_tArray  CS_LDK_PaymentRelay_write(int64_t obj) {
-       LDKPaymentRelay obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentRelay_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_InitFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentRelay_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
-       *ret_conv = PaymentRelay_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_InitFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInitFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_PaymentConstraints_write(int64_t obj) {
-       LDKPaymentConstraints obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentConstraints_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int64_tArray  CS_LDK_InitFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInitFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = InitFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_PaymentConstraints_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
-       *ret_conv = PaymentConstraints_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_InitFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_PaymentContext_write(int64_t obj) {
-       LDKPaymentContext* obj_conv = (LDKPaymentContext*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PaymentContext_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+jboolean  CS_LDK_InitFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentContextDecodeErrorZ), "LDKCResult_PaymentContextDecodeErrorZ");
-       *ret_conv = PaymentContext_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_InitFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_required_feature_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_UnknownPaymentContext_write(int64_t obj) {
-       LDKUnknownPaymentContext obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = UnknownPaymentContext_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InitFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_UnknownPaymentContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_UnknownPaymentContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnknownPaymentContextDecodeErrorZ), "LDKCResult_UnknownPaymentContextDecodeErrorZ");
-       *ret_conv = UnknownPaymentContext_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_InitFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_required_custom_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_Bolt12OfferContext_write(int64_t obj) {
-       LDKBolt12OfferContext obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12OfferContext_write(&obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_InitFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Bolt12OfferContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_Bolt12OfferContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12OfferContextDecodeErrorZ), "LDKCResult_Bolt12OfferContextDecodeErrorZ");
-       *ret_conv = Bolt12OfferContext_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+int64_t  CS_LDK_NodeFeatures_empty() {
+       LDKNodeFeatures ret_var = NodeFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-int8_tArray  CS_LDK_Bolt12RefundContext_write(int64_t obj) {
-       LDKBolt12RefundContext obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12RefundContext_write(&obj_conv);
+int8_tArray  CS_LDK_NodeFeatures_le_flags(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = NodeFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_Bolt12RefundContext_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_Bolt12RefundContextDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt12RefundContextDecodeErrorZ), "LDKCResult_Bolt12RefundContextDecodeErrorZ");
-       *ret_conv = Bolt12RefundContext_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_NodeFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_PaymentPurpose_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPaymentPurpose this_ptr_conv = *(LDKPaymentPurpose*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PaymentPurpose_free(this_ptr_conv);
+jboolean  CS_LDK_NodeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_NodeFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = NodeFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
-int64_t  CS_LDK_PaymentPurpose_clone_ptr(int64_t arg) {
-       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)untag_ptr(arg);
-       int64_t ret_conv = PaymentPurpose_clone_ptr(arg_conv);
+
+jboolean  CS_LDK_NodeFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentPurpose_clone(int64_t orig) {
-       LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)untag_ptr(orig);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PaymentPurpose_bolt11_invoice_payment(int64_t payment_preimage, int8_tArray payment_secret) {
-       void* payment_preimage_ptr = untag_ptr(payment_preimage);
-       CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_bolt11_invoice_payment(payment_preimage_conv, payment_secret_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentPurpose_bolt12_offer_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
-       void* payment_preimage_ptr = untag_ptr(payment_preimage);
-       CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKBolt12OfferContext payment_context_conv;
-       payment_context_conv.inner = untag_ptr(payment_context);
-       payment_context_conv.is_owned = ptr_is_owned(payment_context);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
-       payment_context_conv = Bolt12OfferContext_clone(&payment_context_conv);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_bolt12_offer_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentPurpose_bolt12_refund_payment(int64_t payment_preimage, int8_tArray payment_secret, int64_t payment_context) {
-       void* payment_preimage_ptr = untag_ptr(payment_preimage);
-       CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
-       LDKThirtyTwoBytes payment_secret_ref;
-       CHECK(payment_secret->arr_len == 32);
-       memcpy(payment_secret_ref.data, payment_secret->elems, 32); FREE(payment_secret);
-       LDKBolt12RefundContext payment_context_conv;
-       payment_context_conv.inner = untag_ptr(payment_context);
-       payment_context_conv.is_owned = ptr_is_owned(payment_context);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_context_conv);
-       payment_context_conv = Bolt12RefundContext_clone(&payment_context_conv);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_bolt12_refund_payment(payment_preimage_conv, payment_secret_ref, payment_context_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-int64_t  CS_LDK_PaymentPurpose_spontaneous_payment(int8_tArray a) {
-       LDKThirtyTwoBytes a_ref;
-       CHECK(a->arr_len == 32);
-       memcpy(a_ref.data, a->elems, 32); FREE(a);
-       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
-       *ret_copy = PaymentPurpose_spontaneous_payment(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-jboolean  CS_LDK_PaymentPurpose_eq(int64_t a, int64_t b) {
-       LDKPaymentPurpose* a_conv = (LDKPaymentPurpose*)untag_ptr(a);
-       LDKPaymentPurpose* b_conv = (LDKPaymentPurpose*)untag_ptr(b);
-       jboolean ret_conv = PaymentPurpose_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int64_t  CS_LDK_PaymentPurpose_preimage(int64_t this_arg) {
-       LDKPaymentPurpose* this_arg_conv = (LDKPaymentPurpose*)untag_ptr(this_arg);
-       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
-       *ret_copy = PaymentPurpose_preimage(this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_NodeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_PaymentPurpose_write(int64_t obj) {
-       LDKPaymentPurpose* obj_conv = (LDKPaymentPurpose*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PaymentPurpose_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_NodeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_PaymentPurpose_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentPurposeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPurposeDecodeErrorZ), "LDKCResult_PaymentPurposeDecodeErrorZ");
-       *ret_conv = PaymentPurpose_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_NodeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_required_custom_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ClaimedHTLC_free(int64_t this_obj) {
-       LDKClaimedHTLC this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ClaimedHTLC_free(this_obj_conv);
+int64_t  CS_LDK_NodeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClaimedHTLC_get_channel_id(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelId ret_var = ClaimedHTLC_get_channel_id(&this_ptr_conv);
+int64_t  CS_LDK_ChannelFeatures_empty() {
+       LDKChannelFeatures ret_var = ChannelFeatures_empty();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_ClaimedHTLC_set_channel_id(int64_t this_ptr, int64_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelId_clone(&val_conv);
-       ClaimedHTLC_set_channel_id(&this_ptr_conv, val_conv);
-}
-
-int8_tArray  CS_LDK_ClaimedHTLC_get_user_channel_id(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = init_int8_tArray(16, __LINE__);
-       memcpy(ret_arr->elems, ClaimedHTLC_get_user_channel_id(&this_ptr_conv).le_bytes, 16);
+int8_tArray  CS_LDK_ChannelFeatures_le_flags(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = ChannelFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
        return ret_arr;
 }
 
-void  CS_LDK_ClaimedHTLC_set_user_channel_id(int64_t this_ptr, int8_tArray val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKU128 val_ref;
-       CHECK(val->arr_len == 16);
-       memcpy(val_ref.le_bytes, val->elems, 16); FREE(val);
-       ClaimedHTLC_set_user_channel_id(&this_ptr_conv, val_ref);
+jboolean  CS_LDK_ChannelFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int32_t  CS_LDK_ClaimedHTLC_get_cltv_expiry(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = ClaimedHTLC_get_cltv_expiry(&this_ptr_conv);
+jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ClaimedHTLC_set_cltv_expiry(int64_t this_ptr, int32_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ClaimedHTLC_set_cltv_expiry(&this_ptr_conv, val);
+int64_tArray  CS_LDK_ChannelFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = ChannelFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ClaimedHTLC_get_value_msat(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ClaimedHTLC_get_value_msat(&this_ptr_conv);
+jboolean  CS_LDK_ChannelFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ClaimedHTLC_set_value_msat(int64_t this_ptr, int64_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ClaimedHTLC_set_value_msat(&this_ptr_conv, val);
-}
-
-int64_t  CS_LDK_ClaimedHTLC_get_counterparty_skimmed_fee_msat(int64_t this_ptr) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ClaimedHTLC_get_counterparty_skimmed_fee_msat(&this_ptr_conv);
+jboolean  CS_LDK_ChannelFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelFeatures_supports_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_ClaimedHTLC_set_counterparty_skimmed_fee_msat(int64_t this_ptr, int64_t val) {
-       LDKClaimedHTLC this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ClaimedHTLC_set_counterparty_skimmed_fee_msat(&this_ptr_conv, val);
+int64_t  CS_LDK_ChannelFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClaimedHTLC_new(int64_t channel_id_arg, int8_tArray user_channel_id_arg, int32_t cltv_expiry_arg, int64_t value_msat_arg, int64_t counterparty_skimmed_fee_msat_arg) {
-       LDKChannelId channel_id_arg_conv;
-       channel_id_arg_conv.inner = untag_ptr(channel_id_arg);
-       channel_id_arg_conv.is_owned = ptr_is_owned(channel_id_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_arg_conv);
-       channel_id_arg_conv = ChannelId_clone(&channel_id_arg_conv);
-       LDKU128 user_channel_id_arg_ref;
-       CHECK(user_channel_id_arg->arr_len == 16);
-       memcpy(user_channel_id_arg_ref.le_bytes, user_channel_id_arg->elems, 16); FREE(user_channel_id_arg);
-       LDKClaimedHTLC ret_var = ClaimedHTLC_new(channel_id_arg_conv, user_channel_id_arg_ref, cltv_expiry_arg, value_msat_arg, counterparty_skimmed_fee_msat_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_ChannelFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg) {
-       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+int64_t  CS_LDK_ChannelFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
-int64_t  CS_LDK_ClaimedHTLC_clone_ptr(int64_t arg) {
-       LDKClaimedHTLC arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ClaimedHTLC_clone_ptr(&arg_conv);
-       return ret_conv;
+
+int64_t  CS_LDK_ChannelFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClaimedHTLC_clone(int64_t orig) {
-       LDKClaimedHTLC orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(&orig_conv);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_empty() {
+       LDKBolt11InvoiceFeatures ret_var = Bolt11InvoiceFeatures_empty();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_ClaimedHTLC_eq(int64_t a, int64_t b) {
-       LDKClaimedHTLC a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKClaimedHTLC b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ClaimedHTLC_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_ClaimedHTLC_write(int64_t obj) {
-       LDKClaimedHTLC obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ClaimedHTLC_write(&obj_conv);
+int8_tArray  CS_LDK_Bolt11InvoiceFeatures_le_flags(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Bolt11InvoiceFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ClaimedHTLC_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
-       *ret_conv = ClaimedHTLC_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_PathFailure_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPathFailure this_ptr_conv = *(LDKPathFailure*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       PathFailure_free(this_ptr_conv);
-}
-
-static inline uint64_t PathFailure_clone_ptr(LDKPathFailure *NONNULL_PTR arg) {
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_PathFailure_clone_ptr(int64_t arg) {
-       LDKPathFailure* arg_conv = (LDKPathFailure*)untag_ptr(arg);
-       int64_t ret_conv = PathFailure_clone_ptr(arg_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_any_optional_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_PathFailure_clone(int64_t orig) {
-       LDKPathFailure* orig_conv = (LDKPathFailure*)untag_ptr(orig);
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_PathFailure_initial_send(int64_t err) {
-       void* err_ptr = untag_ptr(err);
-       CHECK_ACCESS(err_ptr);
-       LDKAPIError err_conv = *(LDKAPIError*)(err_ptr);
-       err_conv = APIError_clone((LDKAPIError*)untag_ptr(err));
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_initial_send(err_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_Bolt11InvoiceFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt11InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = Bolt11InvoiceFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_PathFailure_on_path(int64_t network_update) {
-       void* network_update_ptr = untag_ptr(network_update);
-       CHECK_ACCESS(network_update_ptr);
-       LDKCOption_NetworkUpdateZ network_update_conv = *(LDKCOption_NetworkUpdateZ*)(network_update_ptr);
-       network_update_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)untag_ptr(network_update));
-       LDKPathFailure *ret_copy = MALLOC(sizeof(LDKPathFailure), "LDKPathFailure");
-       *ret_copy = PathFailure_on_path(network_update_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_PathFailure_eq(int64_t a, int64_t b) {
-       LDKPathFailure* a_conv = (LDKPathFailure*)untag_ptr(a);
-       LDKPathFailure* b_conv = (LDKPathFailure*)untag_ptr(b);
-       jboolean ret_conv = PathFailure_eq(a_conv, b_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_PathFailure_write(int64_t obj) {
-       LDKPathFailure* obj_conv = (LDKPathFailure*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PathFailure_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_PathFailure_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_PathFailureZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_PathFailureZDecodeErrorZ), "LDKCResult_COption_PathFailureZDecodeErrorZ");
-       *ret_conv = PathFailure_read(ser_ref);
-       FREE(ser);
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
        return tag_ptr(ret_conv, true);
 }
 
-void  CS_LDK_ClosureReason_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKClosureReason this_ptr_conv = *(LDKClosureReason*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ClosureReason_free(this_ptr_conv);
-}
-
-static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_ClosureReason_clone_ptr(int64_t arg) {
-       LDKClosureReason* arg_conv = (LDKClosureReason*)untag_ptr(arg);
-       int64_t ret_conv = ClosureReason_clone_ptr(arg_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_clone(int64_t orig) {
-       LDKClosureReason* orig_conv = (LDKClosureReason*)untag_ptr(orig);
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_Bolt11InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_counterparty_force_closed(int64_t peer_msg) {
-       LDKUntrustedString peer_msg_conv;
-       peer_msg_conv.inner = untag_ptr(peer_msg);
-       peer_msg_conv.is_owned = ptr_is_owned(peer_msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_msg_conv);
-       peer_msg_conv = UntrustedString_clone(&peer_msg_conv);
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_counterparty_force_closed(peer_msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_OfferFeatures_empty() {
+       LDKOfferFeatures ret_var = OfferFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ClosureReason_holder_force_closed() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_holder_force_closed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_OfferFeatures_le_flags(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = OfferFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ClosureReason_legacy_cooperative_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_legacy_cooperative_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_counterparty_initiated_cooperative_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_counterparty_initiated_cooperative_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_locally_initiated_cooperative_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_locally_initiated_cooperative_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_OfferFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = OfferFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_ClosureReason_commitment_tx_confirmed() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_commitment_tx_confirmed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_funding_timed_out() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_funding_timed_out();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_OfferFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = OfferFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_ClosureReason_processing_error(jstring err) {
-       LDKStr err_conv = str_ref_to_owned_c(err);
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_processing_error(err_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_disconnected_peer() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_disconnected_peer();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_outdated_channel_manager() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_outdated_channel_manager();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_counterparty_coop_closed_unfunded_channel() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_counterparty_coop_closed_unfunded_channel();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_OfferFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_ClosureReason_funding_batch_closure() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_funding_batch_closure();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_InvoiceRequestFeatures_empty() {
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequestFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_ClosureReason_htlcs_timed_out() {
-       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
-       *ret_copy = ClosureReason_htlcs_timed_out();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_InvoiceRequestFeatures_le_flags(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = InvoiceRequestFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-jboolean  CS_LDK_ClosureReason_eq(int64_t a, int64_t b) {
-       LDKClosureReason* a_conv = (LDKClosureReason*)untag_ptr(a);
-       LDKClosureReason* b_conv = (LDKClosureReason*)untag_ptr(b);
-       jboolean ret_conv = ClosureReason_eq(a_conv, b_conv);
+jboolean  CS_LDK_InvoiceRequestFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_supports_any_optional_bits(&this_arg_conv);
        return ret_conv;
 }
 
-jstring  CS_LDK_ClosureReason_to_str(int64_t o) {
-       LDKClosureReason* o_conv = (LDKClosureReason*)untag_ptr(o);
-       LDKStr ret_str = ClosureReason_to_str(o_conv);
-       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
-       Str_free(ret_str);
+jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_ClosureReason_write(int64_t obj) {
-       LDKClosureReason* obj_conv = (LDKClosureReason*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = ClosureReason_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
+int64_tArray  CS_LDK_InvoiceRequestFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = InvoiceRequestFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-int64_t  CS_LDK_ClosureReason_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
-       *ret_conv = ClosureReason_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-void  CS_LDK_HTLCDestination_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKHTLCDestination this_ptr_conv = *(LDKHTLCDestination*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       HTLCDestination_free(this_ptr_conv);
-}
-
-static inline uint64_t HTLCDestination_clone_ptr(LDKHTLCDestination *NONNULL_PTR arg) {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-int64_t  CS_LDK_HTLCDestination_clone_ptr(int64_t arg) {
-       LDKHTLCDestination* arg_conv = (LDKHTLCDestination*)untag_ptr(arg);
-       int64_t ret_conv = HTLCDestination_clone_ptr(arg_conv);
+jboolean  CS_LDK_InvoiceRequestFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_HTLCDestination_clone(int64_t orig) {
-       LDKHTLCDestination* orig_conv = (LDKHTLCDestination*)untag_ptr(orig);
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InvoiceRequestFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InvoiceRequestFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_HTLCDestination_next_hop_channel(int8_tArray node_id, int64_t channel_id) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_next_hop_channel(node_id_ref, channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_unknown_next_hop(int64_t requested_forward_scid) {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_unknown_next_hop(requested_forward_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_invalid_forward(int64_t requested_forward_scid) {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_invalid_forward(requested_forward_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_invalid_onion() {
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_invalid_onion();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_InvoiceRequestFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_HTLCDestination_failed_payment(int8_tArray payment_hash) {
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKHTLCDestination *ret_copy = MALLOC(sizeof(LDKHTLCDestination), "LDKHTLCDestination");
-       *ret_copy = HTLCDestination_failed_payment(payment_hash_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_empty() {
+       LDKBolt12InvoiceFeatures ret_var = Bolt12InvoiceFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-jboolean  CS_LDK_HTLCDestination_eq(int64_t a, int64_t b) {
-       LDKHTLCDestination* a_conv = (LDKHTLCDestination*)untag_ptr(a);
-       LDKHTLCDestination* b_conv = (LDKHTLCDestination*)untag_ptr(b);
-       jboolean ret_conv = HTLCDestination_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-int8_tArray  CS_LDK_HTLCDestination_write(int64_t obj) {
-       LDKHTLCDestination* obj_conv = (LDKHTLCDestination*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = HTLCDestination_write(obj_conv);
+int8_tArray  CS_LDK_Bolt12InvoiceFeatures_le_flags(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Bolt12InvoiceFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_HTLCDestination_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_HTLCDestinationZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_HTLCDestinationZDecodeErrorZ), "LDKCResult_COption_HTLCDestinationZDecodeErrorZ");
-       *ret_conv = HTLCDestination_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
-}
-
-int32_t  CS_LDK_PaymentFailureReason_clone(int64_t orig) {
-       LDKPaymentFailureReason* orig_conv = (LDKPaymentFailureReason*)untag_ptr(orig);
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_clone(orig_conv));
+jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_supports_any_optional_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_recipient_rejected() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_recipient_rejected());
+jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_user_abandoned() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_user_abandoned());
-       return ret_conv;
+int64_tArray  CS_LDK_Bolt12InvoiceFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = Bolt12InvoiceFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_retries_exhausted() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_retries_exhausted());
+jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_payment_expired() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_payment_expired());
+jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_supports_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int32_t  CS_LDK_PaymentFailureReason_route_not_found() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_route_not_found());
-       return ret_conv;
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int32_t  CS_LDK_PaymentFailureReason_unexpected_error() {
-       int32_t ret_conv = LDKPaymentFailureReason_to_cs(PaymentFailureReason_unexpected_error());
-       return ret_conv;
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-jboolean  CS_LDK_PaymentFailureReason_eq(int64_t a, int64_t b) {
-       LDKPaymentFailureReason* a_conv = (LDKPaymentFailureReason*)untag_ptr(a);
-       LDKPaymentFailureReason* b_conv = (LDKPaymentFailureReason*)untag_ptr(b);
-       jboolean ret_conv = PaymentFailureReason_eq(a_conv, b_conv);
-       return ret_conv;
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int8_tArray  CS_LDK_PaymentFailureReason_write(int64_t obj) {
-       LDKPaymentFailureReason* obj_conv = (LDKPaymentFailureReason*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = PaymentFailureReason_write(obj_conv);
+int64_t  CS_LDK_Bolt12InvoiceFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_BlindedHopFeatures_empty() {
+       LDKBlindedHopFeatures ret_var = BlindedHopFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int8_tArray  CS_LDK_BlindedHopFeatures_le_flags(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = BlindedHopFeatures_le_flags(&this_arg_conv);
        int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
        memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
        return ret_arr;
 }
 
-int64_t  CS_LDK_PaymentFailureReason_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_PaymentFailureReasonDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentFailureReasonDecodeErrorZ), "LDKCResult_PaymentFailureReasonDecodeErrorZ");
-       *ret_conv = PaymentFailureReason_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+jboolean  CS_LDK_BlindedHopFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Event_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEvent this_ptr_conv = *(LDKEvent*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Event_free(this_ptr_conv);
+jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBlindedHopFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_BlindedHopFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBlindedHopFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = BlindedHopFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
-int64_t  CS_LDK_Event_clone_ptr(int64_t arg) {
-       LDKEvent* arg_conv = (LDKEvent*)untag_ptr(arg);
-       int64_t ret_conv = Event_clone_ptr(arg_conv);
+
+jboolean  CS_LDK_BlindedHopFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Event_clone(int64_t orig) {
-       LDKEvent* orig_conv = (LDKEvent*)untag_ptr(orig);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_BlindedHopFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = BlindedHopFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_funding_generation_ready(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t channel_value_satoshis, int8_tArray output_script, int8_tArray user_channel_id) {
-       LDKChannelId temporary_channel_id_conv;
-       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
-       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
-       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKCVec_u8Z output_script_ref;
-       output_script_ref.datalen = output_script->arr_len;
-       output_script_ref.data = MALLOC(output_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       memcpy(output_script_ref.data, output_script->elems, output_script_ref.datalen); FREE(output_script);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_funding_generation_ready(temporary_channel_id_conv, counterparty_node_id_ref, channel_value_satoshis, output_script_ref, user_channel_id_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_payment_claimable(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int64_t via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
-       LDKPublicKey receiver_node_id_ref;
-       CHECK(receiver_node_id->arr_len == 33);
-       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKRecipientOnionFields onion_fields_conv;
-       onion_fields_conv.inner = untag_ptr(onion_fields);
-       onion_fields_conv.is_owned = ptr_is_owned(onion_fields);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_fields_conv);
-       onion_fields_conv = RecipientOnionFields_clone(&onion_fields_conv);
-       void* purpose_ptr = untag_ptr(purpose);
-       CHECK_ACCESS(purpose_ptr);
-       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
-       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
-       LDKChannelId via_channel_id_conv;
-       via_channel_id_conv.inner = untag_ptr(via_channel_id);
-       via_channel_id_conv.is_owned = ptr_is_owned(via_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(via_channel_id_conv);
-       via_channel_id_conv = ChannelId_clone(&via_channel_id_conv);
-       void* via_user_channel_id_ptr = untag_ptr(via_user_channel_id);
-       CHECK_ACCESS(via_user_channel_id_ptr);
-       LDKCOption_U128Z via_user_channel_id_conv = *(LDKCOption_U128Z*)(via_user_channel_id_ptr);
-       via_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(via_user_channel_id));
-       void* claim_deadline_ptr = untag_ptr(claim_deadline);
-       CHECK_ACCESS(claim_deadline_ptr);
-       LDKCOption_u32Z claim_deadline_conv = *(LDKCOption_u32Z*)(claim_deadline_ptr);
-       claim_deadline_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(claim_deadline));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_conv, via_user_channel_id_conv, claim_deadline_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_payment_claimed(int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose, int64_tArray htlcs, int64_t sender_intended_total_msat) {
-       LDKPublicKey receiver_node_id_ref;
-       CHECK(receiver_node_id->arr_len == 33);
-       memcpy(receiver_node_id_ref.compressed_form, receiver_node_id->elems, 33); FREE(receiver_node_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* purpose_ptr = untag_ptr(purpose);
-       CHECK_ACCESS(purpose_ptr);
-       LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
-       purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
-       LDKCVec_ClaimedHTLCZ htlcs_constr;
-       htlcs_constr.datalen = htlcs->arr_len;
-       if (htlcs_constr.datalen > 0)
-               htlcs_constr.data = MALLOC(htlcs_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
-       else
-               htlcs_constr.data = NULL;
-       int64_t* htlcs_vals = htlcs->elems;
-       for (size_t n = 0; n < htlcs_constr.datalen; n++) {
-               int64_t htlcs_conv_13 = htlcs_vals[n];
-               LDKClaimedHTLC htlcs_conv_13_conv;
-               htlcs_conv_13_conv.inner = untag_ptr(htlcs_conv_13);
-               htlcs_conv_13_conv.is_owned = ptr_is_owned(htlcs_conv_13);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_conv);
-               htlcs_conv_13_conv = ClaimedHTLC_clone(&htlcs_conv_13_conv);
-               htlcs_constr.data[n] = htlcs_conv_13_conv;
-       }
-       FREE(htlcs);
-       void* sender_intended_total_msat_ptr = untag_ptr(sender_intended_total_msat);
-       CHECK_ACCESS(sender_intended_total_msat_ptr);
-       LDKCOption_u64Z sender_intended_total_msat_conv = *(LDKCOption_u64Z*)(sender_intended_total_msat_ptr);
-       sender_intended_total_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(sender_intended_total_msat));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv, htlcs_constr, sender_intended_total_msat_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_connection_needed(int8_tArray node_id, int64_tArray addresses) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKCVec_SocketAddressZ addresses_constr;
-       addresses_constr.datalen = addresses->arr_len;
-       if (addresses_constr.datalen > 0)
-               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
-       else
-               addresses_constr.data = NULL;
-       int64_t* addresses_vals = addresses->elems;
-       for (size_t p = 0; p < addresses_constr.datalen; p++) {
-               int64_t addresses_conv_15 = addresses_vals[p];
-               void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
-               CHECK_ACCESS(addresses_conv_15_ptr);
-               LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
-               addresses_constr.data[p] = addresses_conv_15_conv;
-       }
-       FREE(addresses);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_connection_needed(node_id_ref, addresses_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_BlindedHopFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_invoice_request_failed(int8_tArray payment_id) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_invoice_request_failed(payment_id_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_ChannelTypeFeatures_empty() {
+       LDKChannelTypeFeatures ret_var = ChannelTypeFeatures_empty();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_payment_sent(int64_t payment_id, int8_tArray payment_preimage, int8_tArray payment_hash, int64_t fee_paid_msat) {
-       void* payment_id_ptr = untag_ptr(payment_id);
-       CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
-       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
-       LDKThirtyTwoBytes payment_preimage_ref;
-       CHECK(payment_preimage->arr_len == 32);
-       memcpy(payment_preimage_ref.data, payment_preimage->elems, 32); FREE(payment_preimage);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* fee_paid_msat_ptr = untag_ptr(fee_paid_msat);
-       CHECK_ACCESS(fee_paid_msat_ptr);
-       LDKCOption_u64Z fee_paid_msat_conv = *(LDKCOption_u64Z*)(fee_paid_msat_ptr);
-       fee_paid_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(fee_paid_msat));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_sent(payment_id_conv, payment_preimage_ref, payment_hash_ref, fee_paid_msat_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int8_tArray  CS_LDK_ChannelTypeFeatures_le_flags(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = ChannelTypeFeatures_le_flags(&this_arg_conv);
+       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
+       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Event_payment_failed(int8_tArray payment_id, int8_tArray payment_hash, int64_t reason) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* reason_ptr = untag_ptr(reason);
-       CHECK_ACCESS(reason_ptr);
-       LDKCOption_PaymentFailureReasonZ reason_conv = *(LDKCOption_PaymentFailureReasonZ*)(reason_ptr);
-       reason_conv = COption_PaymentFailureReasonZ_clone((LDKCOption_PaymentFailureReasonZ*)untag_ptr(reason));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_failed(payment_id_ref, payment_hash_ref, reason_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_any_optional_bits(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_any_optional_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_payment_path_successful(int8_tArray payment_id, int64_t payment_hash, int64_t path) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       void* payment_hash_ptr = untag_ptr(payment_hash);
-       CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_path_successful(payment_id_ref, payment_hash_conv, path_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits_from(&this_arg_conv, &other_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_payment_path_failed(int64_t payment_id, int8_tArray payment_hash, jboolean payment_failed_permanently, int64_t failure, int64_t path, int64_t short_channel_id) {
-       void* payment_id_ptr = untag_ptr(payment_id);
-       CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
-       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* failure_ptr = untag_ptr(failure);
-       CHECK_ACCESS(failure_ptr);
-       LDKPathFailure failure_conv = *(LDKPathFailure*)(failure_ptr);
-       failure_conv = PathFailure_clone((LDKPathFailure*)untag_ptr(failure));
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       void* short_channel_id_ptr = untag_ptr(short_channel_id);
-       CHECK_ACCESS(short_channel_id_ptr);
-       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
-       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_path_failed(payment_id_conv, payment_hash_ref, payment_failed_permanently, failure_conv, path_conv, short_channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_tArray  CS_LDK_ChannelTypeFeatures_required_unknown_bits_from(int64_t this_arg, int64_t other) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures other_conv;
+       other_conv.inner = untag_ptr(other);
+       other_conv.is_owned = ptr_is_owned(other);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(other_conv);
+       other_conv.is_owned = false;
+       LDKCVec_u64Z ret_var = ChannelTypeFeatures_required_unknown_bits_from(&this_arg_conv, &other_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t g = 0; g < ret_var.datalen; g++) {
+               int64_t ret_conv_6_conv = ret_var.data[g];
+               ret_arr_ptr[g] = ret_conv_6_conv;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-int64_t  CS_LDK_Event_probe_successful(int8_tArray payment_id, int8_tArray payment_hash, int64_t path) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_probe_successful(payment_id_ref, payment_hash_ref, path_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_unknown_bits(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_probe_failed(int8_tArray payment_id, int8_tArray payment_hash, int64_t path, int64_t short_channel_id) {
-       LDKThirtyTwoBytes payment_id_ref;
-       CHECK(payment_id->arr_len == 32);
-       memcpy(payment_id_ref.data, payment_id->elems, 32); FREE(payment_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = Path_clone(&path_conv);
-       void* short_channel_id_ptr = untag_ptr(short_channel_id);
-       CHECK_ACCESS(short_channel_id_ptr);
-       LDKCOption_u64Z short_channel_id_conv = *(LDKCOption_u64Z*)(short_channel_id_ptr);
-       short_channel_id_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(short_channel_id));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_probe_failed(payment_id_ref, payment_hash_ref, path_conv, short_channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_unknown_bits(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_unknown_bits(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_pending_htlcs_forwardable(int64_t time_forwardable) {
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_pending_htlcs_forwardable(time_forwardable);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+int64_t  CS_LDK_ChannelTypeFeatures_set_required_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
 }
 
-int64_t  CS_LDK_Event_htlcintercepted(int8_tArray intercept_id, int64_t requested_next_hop_scid, int8_tArray payment_hash, int64_t inbound_amount_msat, int64_t expected_outbound_amount_msat) {
-       LDKThirtyTwoBytes intercept_id_ref;
-       CHECK(intercept_id->arr_len == 32);
-       memcpy(intercept_id_ref.data, intercept_id->elems, 32); FREE(intercept_id);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_htlcintercepted(intercept_id_ref, requested_next_hop_scid, payment_hash_ref, inbound_amount_msat, expected_outbound_amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_ChannelTypeFeatures_set_optional_feature_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_set_required_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_required_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_ChannelTypeFeatures_set_optional_custom_bit(int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_optional_custom_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+int64_t  CS_LDK_InitFeatures_clear_upfront_shutdown_script(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InitFeatures_clone(&this_arg_conv);
+       LDKInitFeatures ret_var = InitFeatures_clear_upfront_shutdown_script(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_spendable_outputs(int64_tArray outputs, int64_t channel_id) {
-       LDKCVec_SpendableOutputDescriptorZ outputs_constr;
-       outputs_constr.datalen = outputs->arr_len;
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = outputs->elems;
-       for (size_t b = 0; b < outputs_constr.datalen; b++) {
-               int64_t outputs_conv_27 = outputs_vals[b];
-               void* outputs_conv_27_ptr = untag_ptr(outputs_conv_27);
-               CHECK_ACCESS(outputs_conv_27_ptr);
-               LDKSpendableOutputDescriptor outputs_conv_27_conv = *(LDKSpendableOutputDescriptor*)(outputs_conv_27_ptr);
-               outputs_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(outputs_conv_27));
-               outputs_constr.data[b] = outputs_conv_27_conv;
-       }
-       FREE(outputs);
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_spendable_outputs(outputs_constr, channel_id_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_NodeFeatures_clear_upfront_shutdown_script(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = NodeFeatures_clone(&this_arg_conv);
+       LDKNodeFeatures ret_var = NodeFeatures_clear_upfront_shutdown_script(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_payment_forwarded(int64_t prev_channel_id, int64_t next_channel_id, int64_t prev_user_channel_id, int64_t next_user_channel_id, int64_t total_fee_earned_msat, int64_t skimmed_fee_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
-       LDKChannelId prev_channel_id_conv;
-       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
-       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
-       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
-       LDKChannelId next_channel_id_conv;
-       next_channel_id_conv.inner = untag_ptr(next_channel_id);
-       next_channel_id_conv.is_owned = ptr_is_owned(next_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(next_channel_id_conv);
-       next_channel_id_conv = ChannelId_clone(&next_channel_id_conv);
-       void* prev_user_channel_id_ptr = untag_ptr(prev_user_channel_id);
-       CHECK_ACCESS(prev_user_channel_id_ptr);
-       LDKCOption_U128Z prev_user_channel_id_conv = *(LDKCOption_U128Z*)(prev_user_channel_id_ptr);
-       prev_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(prev_user_channel_id));
-       void* next_user_channel_id_ptr = untag_ptr(next_user_channel_id);
-       CHECK_ACCESS(next_user_channel_id_ptr);
-       LDKCOption_U128Z next_user_channel_id_conv = *(LDKCOption_U128Z*)(next_user_channel_id_ptr);
-       next_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(next_user_channel_id));
-       void* total_fee_earned_msat_ptr = untag_ptr(total_fee_earned_msat);
-       CHECK_ACCESS(total_fee_earned_msat_ptr);
-       LDKCOption_u64Z total_fee_earned_msat_conv = *(LDKCOption_u64Z*)(total_fee_earned_msat_ptr);
-       total_fee_earned_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(total_fee_earned_msat));
-       void* skimmed_fee_msat_ptr = untag_ptr(skimmed_fee_msat);
-       CHECK_ACCESS(skimmed_fee_msat_ptr);
-       LDKCOption_u64Z skimmed_fee_msat_conv = *(LDKCOption_u64Z*)(skimmed_fee_msat_ptr);
-       skimmed_fee_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(skimmed_fee_msat));
-       void* outbound_amount_forwarded_msat_ptr = untag_ptr(outbound_amount_forwarded_msat);
-       CHECK_ACCESS(outbound_amount_forwarded_msat_ptr);
-       LDKCOption_u64Z outbound_amount_forwarded_msat_conv = *(LDKCOption_u64Z*)(outbound_amount_forwarded_msat_ptr);
-       outbound_amount_forwarded_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(outbound_amount_forwarded_msat));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_forwarded(prev_channel_id_conv, next_channel_id_conv, prev_user_channel_id_conv, next_user_channel_id_conv, total_fee_earned_msat_conv, skimmed_fee_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_InitFeatures_clear_shutdown_anysegwit(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InitFeatures_clone(&this_arg_conv);
+       LDKInitFeatures ret_var = InitFeatures_clear_shutdown_anysegwit(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_channel_pending(int64_t channel_id, int8_tArray user_channel_id, int64_t former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo, int64_t channel_type) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       LDKChannelId former_temporary_channel_id_conv;
-       former_temporary_channel_id_conv.inner = untag_ptr(former_temporary_channel_id);
-       former_temporary_channel_id_conv.is_owned = ptr_is_owned(former_temporary_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(former_temporary_channel_id_conv);
-       former_temporary_channel_id_conv = ChannelId_clone(&former_temporary_channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKOutPoint funding_txo_conv;
-       funding_txo_conv.inner = untag_ptr(funding_txo);
-       funding_txo_conv.is_owned = ptr_is_owned(funding_txo);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
-       funding_txo_conv = OutPoint_clone(&funding_txo_conv);
-       LDKChannelTypeFeatures channel_type_conv;
-       channel_type_conv.inner = untag_ptr(channel_type);
-       channel_type_conv.is_owned = ptr_is_owned(channel_type);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
-       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_pending(channel_id_conv, user_channel_id_ref, former_temporary_channel_id_conv, counterparty_node_id_ref, funding_txo_conv, channel_type_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_NodeFeatures_clear_shutdown_anysegwit(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = NodeFeatures_clone(&this_arg_conv);
+       LDKNodeFeatures ret_var = NodeFeatures_clear_shutdown_anysegwit(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_channel_ready(int64_t channel_id, int8_tArray user_channel_id, int8_tArray counterparty_node_id, int64_t channel_type) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKChannelTypeFeatures channel_type_conv;
-       channel_type_conv.inner = untag_ptr(channel_type);
-       channel_type_conv.is_owned = ptr_is_owned(channel_type);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
-       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_ready(channel_id_conv, user_channel_id_ref, counterparty_node_id_ref, channel_type_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_InitFeatures_clear_wumbo(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InitFeatures_clone(&this_arg_conv);
+       LDKInitFeatures ret_var = InitFeatures_clear_wumbo(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_channel_closed(int64_t channel_id, int8_tArray user_channel_id, int64_t reason, int8_tArray counterparty_node_id, int64_t channel_capacity_sats, int64_t channel_funding_txo) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKU128 user_channel_id_ref;
-       CHECK(user_channel_id->arr_len == 16);
-       memcpy(user_channel_id_ref.le_bytes, user_channel_id->elems, 16); FREE(user_channel_id);
-       void* reason_ptr = untag_ptr(reason);
-       CHECK_ACCESS(reason_ptr);
-       LDKClosureReason reason_conv = *(LDKClosureReason*)(reason_ptr);
-       reason_conv = ClosureReason_clone((LDKClosureReason*)untag_ptr(reason));
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       void* channel_capacity_sats_ptr = untag_ptr(channel_capacity_sats);
-       CHECK_ACCESS(channel_capacity_sats_ptr);
-       LDKCOption_u64Z channel_capacity_sats_conv = *(LDKCOption_u64Z*)(channel_capacity_sats_ptr);
-       channel_capacity_sats_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(channel_capacity_sats));
-       LDKOutPoint channel_funding_txo_conv;
-       channel_funding_txo_conv.inner = untag_ptr(channel_funding_txo);
-       channel_funding_txo_conv.is_owned = ptr_is_owned(channel_funding_txo);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_funding_txo_conv);
-       channel_funding_txo_conv = OutPoint_clone(&channel_funding_txo_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_closed(channel_id_conv, user_channel_id_ref, reason_conv, counterparty_node_id_ref, channel_capacity_sats_conv, channel_funding_txo_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+int64_t  CS_LDK_NodeFeatures_clear_wumbo(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = NodeFeatures_clone(&this_arg_conv);
+       LDKNodeFeatures ret_var = NodeFeatures_clear_wumbo(this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Event_discard_funding(int64_t channel_id, int8_tArray transaction) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKTransaction transaction_ref;
-       transaction_ref.datalen = transaction->arr_len;
-       transaction_ref.data = MALLOC(transaction_ref.datalen, "LDKTransaction Bytes");
-       memcpy(transaction_ref.data, transaction->elems, transaction_ref.datalen); FREE(transaction);
-       transaction_ref.data_is_owned = true;
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_discard_funding(channel_id_conv, transaction_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_clear_scid_privacy(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_clear_scid_privacy(&this_arg_conv);
 }
 
-int64_t  CS_LDK_Event_open_channel_request(int64_t temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_satoshis, int64_t push_msat, int64_t channel_type) {
-       LDKChannelId temporary_channel_id_conv;
-       temporary_channel_id_conv.inner = untag_ptr(temporary_channel_id);
-       temporary_channel_id_conv.is_owned = ptr_is_owned(temporary_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(temporary_channel_id_conv);
-       temporary_channel_id_conv = ChannelId_clone(&temporary_channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKChannelTypeFeatures channel_type_conv;
-       channel_type_conv.inner = untag_ptr(channel_type);
-       channel_type_conv.is_owned = ptr_is_owned(channel_type);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_conv);
-       channel_type_conv = ChannelTypeFeatures_clone(&channel_type_conv);
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_open_channel_request(temporary_channel_id_conv, counterparty_node_id_ref, funding_satoshis, push_msat, channel_type_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_clear_scid_privacy(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_clear_scid_privacy(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_clear_scid_privacy(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_clear_scid_privacy(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_clear_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_clear_anchors_zero_fee_htlc_tx(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_clear_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_clear_anchors_zero_fee_htlc_tx(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_clear_route_blinding(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_clear_route_blinding(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_clear_route_blinding(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_clear_route_blinding(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_data_loss_protect_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_data_loss_protect_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_data_loss_protect_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_data_loss_protect_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_data_loss_protect(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_data_loss_protect_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_data_loss_protect_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_data_loss_protect_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_data_loss_protect_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_data_loss_protect(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_data_loss_protect(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_data_loss_protect(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_data_loss_protect(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_initial_routing_sync_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_initial_routing_sync_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_initial_routing_sync_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_initial_routing_sync_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_initial_routing_sync(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_initial_routing_sync(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_upfront_shutdown_script_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_upfront_shutdown_script_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_upfront_shutdown_script_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_upfront_shutdown_script(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_upfront_shutdown_script(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_upfront_shutdown_script(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_gossip_queries_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_gossip_queries_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_gossip_queries_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_gossip_queries_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_gossip_queries(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_gossip_queries_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_gossip_queries_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_gossip_queries_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_gossip_queries_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_gossip_queries(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_gossip_queries(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_gossip_queries(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_gossip_queries(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_variable_length_onion_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_variable_length_onion_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_variable_length_onion_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_variable_length_onion_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_variable_length_onion(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_variable_length_onion_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_variable_length_onion_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_variable_length_onion_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_variable_length_onion_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_variable_length_onion(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_variable_length_onion_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_variable_length_onion_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_variable_length_onion(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_variable_length_onion(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_variable_length_onion(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_variable_length_onion(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_variable_length_onion(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_static_remote_key_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_static_remote_key_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_static_remote_key_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_static_remote_key_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_static_remote_key(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_static_remote_key_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_static_remote_key_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_static_remote_key_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_static_remote_key_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_static_remote_key(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_static_remote_key_optional(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_static_remote_key_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_static_remote_key_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_supports_static_remote_key(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_static_remote_key(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_static_remote_key(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_requires_static_remote_key(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_static_remote_key(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_payment_secret_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_payment_secret_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_payment_secret_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_payment_secret_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_payment_secret(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_payment_secret_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_payment_secret_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_payment_secret_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_payment_secret_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_payment_secret(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_secret_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_secret_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_secret(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_payment_secret(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_payment_secret(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_secret(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_secret(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_optional(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt12InvoiceFeatures_set_basic_mpp_optional(&this_arg_conv);
+}
+
+void  CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_required(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt12InvoiceFeatures_set_basic_mpp_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_Bolt12InvoiceFeatures_supports_basic_mpp(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_supports_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_Bolt12InvoiceFeatures_requires_basic_mpp(int64_t this_arg) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12InvoiceFeatures_requires_basic_mpp(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_wumbo_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_wumbo_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_wumbo_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_wumbo_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_wumbo(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_wumbo_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_wumbo_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_wumbo_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_wumbo_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_wumbo(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_wumbo(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_wumbo(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_wumbo(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(&this_arg_conv);
+}
+
+void  CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_route_blinding_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_route_blinding_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_route_blinding_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_route_blinding_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_route_blinding(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_route_blinding_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_route_blinding_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_route_blinding_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_route_blinding_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_route_blinding(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_route_blinding(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_route_blinding(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_route_blinding(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_InitFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+}
+
+void  CS_LDK_InitFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_shutdown_any_segwit_optional(&this_arg_conv);
+}
+
+void  CS_LDK_NodeFeatures_set_shutdown_any_segwit_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_shutdown_any_segwit_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_NodeFeatures_supports_shutdown_anysegwit(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_InitFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_htlchandling_failed(int64_t prev_channel_id, int64_t failed_next_destination) {
-       LDKChannelId prev_channel_id_conv;
-       prev_channel_id_conv.inner = untag_ptr(prev_channel_id);
-       prev_channel_id_conv.is_owned = ptr_is_owned(prev_channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(prev_channel_id_conv);
-       prev_channel_id_conv = ChannelId_clone(&prev_channel_id_conv);
-       void* failed_next_destination_ptr = untag_ptr(failed_next_destination);
-       CHECK_ACCESS(failed_next_destination_ptr);
-       LDKHTLCDestination failed_next_destination_conv = *(LDKHTLCDestination*)(failed_next_destination_ptr);
-       failed_next_destination_conv = HTLCDestination_clone((LDKHTLCDestination*)untag_ptr(failed_next_destination));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_htlchandling_failed(prev_channel_id_conv, failed_next_destination_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_shutdown_anysegwit(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_shutdown_anysegwit(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_Event_bump_transaction(int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKBumpTransactionEvent a_conv = *(LDKBumpTransactionEvent*)(a_ptr);
-       a_conv = BumpTransactionEvent_clone((LDKBumpTransactionEvent*)untag_ptr(a));
-       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_bump_transaction(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_taproot_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_optional(&this_arg_conv);
 }
 
-jboolean  CS_LDK_Event_eq(int64_t a, int64_t b) {
-       LDKEvent* a_conv = (LDKEvent*)untag_ptr(a);
-       LDKEvent* b_conv = (LDKEvent*)untag_ptr(b);
-       jboolean ret_conv = Event_eq(a_conv, b_conv);
+void  CS_LDK_InitFeatures_set_taproot_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_required(&this_arg_conv);
+}
+
+jboolean  CS_LDK_InitFeatures_supports_taproot(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_taproot(&this_arg_conv);
        return ret_conv;
 }
 
-int8_tArray  CS_LDK_Event_write(int64_t obj) {
-       LDKEvent* obj_conv = (LDKEvent*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = Event_write(obj_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+void  CS_LDK_NodeFeatures_set_taproot_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_Event_read(int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = ser->arr_len;
-       ser_ref.data = ser->elems;
-       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
-       *ret_conv = Event_read(ser_ref);
-       FREE(ser);
-       return tag_ptr(ret_conv, true);
+void  CS_LDK_NodeFeatures_set_taproot_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_required(&this_arg_conv);
 }
 
-void  CS_LDK_MessageSendEvent_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageSendEvent this_ptr_conv = *(LDKMessageSendEvent*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageSendEvent_free(this_ptr_conv);
+jboolean  CS_LDK_NodeFeatures_supports_taproot(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_taproot_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_optional(&this_arg_conv);
 }
-int64_t  CS_LDK_MessageSendEvent_clone_ptr(int64_t arg) {
-       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)untag_ptr(arg);
-       int64_t ret_conv = MessageSendEvent_clone_ptr(arg_conv);
-       return ret_conv;
+
+void  CS_LDK_ChannelTypeFeatures_set_taproot_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_clone(int64_t orig) {
-       LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)untag_ptr(orig);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_taproot(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_accept_channel(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKAcceptChannel msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = AcceptChannel_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_taproot(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_accept_channel_v2(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKAcceptChannelV2 msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = AcceptChannelV2_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_accept_channel_v2(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_taproot(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_open_channel(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKOpenChannel msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = OpenChannel_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_taproot(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_open_channel_v2(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKOpenChannelV2 msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = OpenChannelV2_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_open_channel_v2(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_onion_messages_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_onion_messages_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_funding_created(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKFundingCreated msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = FundingCreated_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_onion_messages_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_onion_messages_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_funding_signed(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKFundingSigned msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = FundingSigned_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_supports_onion_messages(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_stfu(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKStfu msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = Stfu_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_stfu(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_onion_messages_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_onion_messages_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_splice(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKSplice msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = Splice_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_splice(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_onion_messages_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_onion_messages_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_splice_ack(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKSpliceAck msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = SpliceAck_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_splice_ack(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_onion_messages(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_splice_locked(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKSpliceLocked msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = SpliceLocked_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_splice_locked(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_onion_messages(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_add_input(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAddInput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAddInput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_add_input(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_onion_messages(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_onion_messages(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_add_output(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAddOutput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAddOutput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_add_output(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_channel_type_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_channel_type_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_remove_input(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxRemoveInput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxRemoveInput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_remove_input(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_channel_type_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_channel_type_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_remove_output(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxRemoveOutput msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxRemoveOutput_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_remove_output(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_supports_channel_type(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_channel_type(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_complete(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxComplete msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxComplete_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_complete(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_channel_type_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_channel_type_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_signatures(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxSignatures msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxSignatures_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_signatures(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_channel_type_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_channel_type_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_init_rbf(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxInitRbf msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxInitRbf_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_init_rbf(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_channel_type(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_channel_type(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_ack_rbf(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAckRbf msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAckRbf_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_ack_rbf(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_channel_type(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_channel_type(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_channel_type(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_channel_type(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_tx_abort(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKTxAbort msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAbort_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_tx_abort(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_scid_privacy_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_scid_privacy_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_ready(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelReady msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelReady_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_ready(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_scid_privacy_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_scid_privacy_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_announcement_signatures(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKAnnouncementSignatures msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = AnnouncementSignatures_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_supports_scid_privacy(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_update_htlcs(int8_tArray node_id, int64_t updates) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKCommitmentUpdate updates_conv;
-       updates_conv.inner = untag_ptr(updates);
-       updates_conv.is_owned = ptr_is_owned(updates);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
-       updates_conv = CommitmentUpdate_clone(&updates_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_scid_privacy_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_scid_privacy_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_revoke_and_ack(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKRevokeAndACK msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = RevokeAndACK_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_scid_privacy_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_scid_privacy_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_closing_signed(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKClosingSigned msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ClosingSigned_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_scid_privacy(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_shutdown(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKShutdown msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = Shutdown_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_scid_privacy_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_reestablish(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelReestablish msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelReestablish_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_scid_privacy_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_scid_privacy_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_announcement(int8_tArray node_id, int64_t msg, int64_t update_msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelAnnouncement_clone(&msg_conv);
-       LDKChannelUpdate update_msg_conv;
-       update_msg_conv.inner = untag_ptr(update_msg);
-       update_msg_conv.is_owned = ptr_is_owned(update_msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
-       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_announcement(node_id_ref, msg_conv, update_msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_scid_privacy(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_broadcast_channel_announcement(int64_t msg, int64_t update_msg) {
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelAnnouncement_clone(&msg_conv);
-       LDKChannelUpdate update_msg_conv;
-       update_msg_conv.inner = untag_ptr(update_msg);
-       update_msg_conv.is_owned = ptr_is_owned(update_msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
-       update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_scid_privacy(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_broadcast_channel_update(int64_t msg) {
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_scid_privacy(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_broadcast_node_announcement(int64_t msg) {
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = NodeAnnouncement_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_scid_privacy(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_scid_privacy(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_update(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_metadata_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_handle_error(int8_tArray node_id, int64_t action) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       void* action_ptr = untag_ptr(action);
-       CHECK_ACCESS(action_ptr);
-       LDKErrorAction action_conv = *(LDKErrorAction*)(action_ptr);
-       action_conv = ErrorAction_clone((LDKErrorAction*)untag_ptr(action));
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_handle_error(node_id_ref, action_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_payment_metadata_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_channel_range_query(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKQueryChannelRange msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = QueryChannelRange_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_payment_metadata(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_payment_metadata(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_short_ids_query(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKQueryShortChannelIds msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = QueryShortChannelIds_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_payment_metadata(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_payment_metadata(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_reply_channel_range(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKReplyChannelRange msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ReplyChannelRange_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_zero_conf_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_zero_conf_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_MessageSendEvent_send_gossip_timestamp_filter(int8_tArray node_id, int64_t msg) {
-       LDKPublicKey node_id_ref;
-       CHECK(node_id->arr_len == 33);
-       memcpy(node_id_ref.compressed_form, node_id->elems, 33); FREE(node_id);
-       LDKGossipTimestampFilter msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = GossipTimestampFilter_clone(&msg_conv);
-       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
-       *ret_copy = MessageSendEvent_send_gossip_timestamp_filter(node_id_ref, msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_InitFeatures_set_zero_conf_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_zero_conf_required(&this_arg_conv);
 }
 
-void  CS_LDK_MessageSendEventsProvider_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageSendEventsProvider this_ptr_conv = *(LDKMessageSendEventsProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageSendEventsProvider_free(this_ptr_conv);
+jboolean  CS_LDK_InitFeatures_supports_zero_conf(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_EventsProvider_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEventsProvider this_ptr_conv = *(LDKEventsProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EventsProvider_free(this_ptr_conv);
+void  CS_LDK_NodeFeatures_set_zero_conf_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_zero_conf_optional(&this_arg_conv);
 }
 
-void  CS_LDK_EventHandler_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEventHandler this_ptr_conv = *(LDKEventHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EventHandler_free(this_ptr_conv);
+void  CS_LDK_NodeFeatures_set_zero_conf_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_zero_conf_required(&this_arg_conv);
 }
 
-void  CS_LDK_AnchorDescriptor_free(int64_t this_obj) {
-       LDKAnchorDescriptor this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       AnchorDescriptor_free(this_obj_conv);
+jboolean  CS_LDK_NodeFeatures_supports_zero_conf(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_AnchorDescriptor_get_channel_derivation_parameters(int64_t this_ptr) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters ret_var = AnchorDescriptor_get_channel_derivation_parameters(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_ChannelTypeFeatures_set_zero_conf_optional(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_zero_conf_optional(&this_arg_conv);
 }
 
-void  CS_LDK_AnchorDescriptor_set_channel_derivation_parameters(int64_t this_ptr, int64_t val) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelDerivationParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelDerivationParameters_clone(&val_conv);
-       AnchorDescriptor_set_channel_derivation_parameters(&this_ptr_conv, val_conv);
+void  CS_LDK_ChannelTypeFeatures_set_zero_conf_required(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_zero_conf_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_get_outpoint(int64_t this_ptr) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = AnchorDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_supports_zero_conf(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_AnchorDescriptor_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKAnchorDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       AnchorDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+jboolean  CS_LDK_InitFeatures_requires_zero_conf(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_zero_conf(&this_arg_conv);
+       return ret_conv;
+}
+
+jboolean  CS_LDK_NodeFeatures_requires_zero_conf(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_AnchorDescriptor_new(int64_t channel_derivation_parameters_arg, int64_t outpoint_arg) {
-       LDKChannelDerivationParameters channel_derivation_parameters_arg_conv;
-       channel_derivation_parameters_arg_conv.inner = untag_ptr(channel_derivation_parameters_arg);
-       channel_derivation_parameters_arg_conv.is_owned = ptr_is_owned(channel_derivation_parameters_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_derivation_parameters_arg_conv);
-       channel_derivation_parameters_arg_conv = ChannelDerivationParameters_clone(&channel_derivation_parameters_arg_conv);
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       LDKAnchorDescriptor ret_var = AnchorDescriptor_new(channel_derivation_parameters_arg_conv, outpoint_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_ChannelTypeFeatures_requires_zero_conf(int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_zero_conf(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t AnchorDescriptor_clone_ptr(LDKAnchorDescriptor *NONNULL_PTR arg) {
-       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+void  CS_LDK_NodeFeatures_set_keysend_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_keysend_optional(&this_arg_conv);
 }
-int64_t  CS_LDK_AnchorDescriptor_clone_ptr(int64_t arg) {
-       LDKAnchorDescriptor arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = AnchorDescriptor_clone_ptr(&arg_conv);
-       return ret_conv;
+
+void  CS_LDK_NodeFeatures_set_keysend_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_keysend_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_clone(int64_t orig) {
-       LDKAnchorDescriptor orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKAnchorDescriptor ret_var = AnchorDescriptor_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_supports_keysend(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_keysend(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_AnchorDescriptor_eq(int64_t a, int64_t b) {
-       LDKAnchorDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKAnchorDescriptor b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = AnchorDescriptor_eq(&a_conv, &b_conv);
+jboolean  CS_LDK_NodeFeatures_requires_keysend(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_keysend(&this_arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_AnchorDescriptor_previous_utxo(int64_t this_arg) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_InitFeatures_set_trampoline_routing_optional(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = AnchorDescriptor_previous_utxo(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+       InitFeatures_set_trampoline_routing_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_unsigned_tx_input(int64_t this_arg) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_InitFeatures_set_trampoline_routing_required(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTxIn* ret_ref = MALLOC(sizeof(LDKTxIn), "LDKTxIn");
-       *ret_ref = AnchorDescriptor_unsigned_tx_input(&this_arg_conv);
-       return tag_ptr(ret_ref, true);
+       InitFeatures_set_trampoline_routing_required(&this_arg_conv);
 }
 
-int8_tArray  CS_LDK_AnchorDescriptor_witness_script(int64_t this_arg) {
-       LDKAnchorDescriptor this_arg_conv;
+jboolean  CS_LDK_InitFeatures_supports_trampoline_routing(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = AnchorDescriptor_witness_script(&this_arg_conv);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       CVec_u8Z_free(ret_var);
-       return ret_arr;
+       jboolean ret_conv = InitFeatures_supports_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-int8_tArray  CS_LDK_AnchorDescriptor_tx_input_witness(int64_t this_arg, int8_tArray signature) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_NodeFeatures_set_trampoline_routing_optional(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKECDSASignature signature_ref;
-       CHECK(signature->arr_len == 64);
-       memcpy(signature_ref.compact_form, signature->elems, 64); FREE(signature);
-       LDKWitness ret_var = AnchorDescriptor_tx_input_witness(&this_arg_conv, signature_ref);
-       int8_tArray ret_arr = init_int8_tArray(ret_var.datalen, __LINE__);
-       memcpy(ret_arr->elems, ret_var.data, ret_var.datalen);
-       Witness_free(ret_var);
-       return ret_arr;
+       NodeFeatures_set_trampoline_routing_optional(&this_arg_conv);
 }
 
-int64_t  CS_LDK_AnchorDescriptor_derive_channel_signer(int64_t this_arg, int64_t signer_provider) {
-       LDKAnchorDescriptor this_arg_conv;
+void  CS_LDK_NodeFeatures_set_trampoline_routing_required(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
-       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = AnchorDescriptor_derive_channel_signer(&this_arg_conv, signer_provider_conv);
-       return tag_ptr(ret_ret, true);
+       NodeFeatures_set_trampoline_routing_required(&this_arg_conv);
 }
 
-void  CS_LDK_BumpTransactionEvent_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKBumpTransactionEvent this_ptr_conv = *(LDKBumpTransactionEvent*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       BumpTransactionEvent_free(this_ptr_conv);
+jboolean  CS_LDK_NodeFeatures_supports_trampoline_routing(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t BumpTransactionEvent_clone_ptr(LDKBumpTransactionEvent *NONNULL_PTR arg) {
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_optional(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_trampoline_routing_optional(&this_arg_conv);
 }
-int64_t  CS_LDK_BumpTransactionEvent_clone_ptr(int64_t arg) {
-       LDKBumpTransactionEvent* arg_conv = (LDKBumpTransactionEvent*)untag_ptr(arg);
-       int64_t ret_conv = BumpTransactionEvent_clone_ptr(arg_conv);
-       return ret_conv;
+
+void  CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_required(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       Bolt11InvoiceFeatures_set_trampoline_routing_required(&this_arg_conv);
 }
 
-int64_t  CS_LDK_BumpTransactionEvent_clone(int64_t orig) {
-       LDKBumpTransactionEvent* orig_conv = (LDKBumpTransactionEvent*)untag_ptr(orig);
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_Bolt11InvoiceFeatures_supports_trampoline_routing(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_supports_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_BumpTransactionEvent_channel_close(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t package_target_feerate_sat_per_1000_weight, int8_tArray commitment_tx, int64_t commitment_tx_fee_satoshis, int64_t anchor_descriptor, int64_tArray pending_htlcs) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKThirtyTwoBytes claim_id_ref;
-       CHECK(claim_id->arr_len == 32);
-       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
-       LDKTransaction commitment_tx_ref;
-       commitment_tx_ref.datalen = commitment_tx->arr_len;
-       commitment_tx_ref.data = MALLOC(commitment_tx_ref.datalen, "LDKTransaction Bytes");
-       memcpy(commitment_tx_ref.data, commitment_tx->elems, commitment_tx_ref.datalen); FREE(commitment_tx);
-       commitment_tx_ref.data_is_owned = true;
-       LDKAnchorDescriptor anchor_descriptor_conv;
-       anchor_descriptor_conv.inner = untag_ptr(anchor_descriptor);
-       anchor_descriptor_conv.is_owned = ptr_is_owned(anchor_descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(anchor_descriptor_conv);
-       anchor_descriptor_conv = AnchorDescriptor_clone(&anchor_descriptor_conv);
-       LDKCVec_HTLCOutputInCommitmentZ pending_htlcs_constr;
-       pending_htlcs_constr.datalen = pending_htlcs->arr_len;
-       if (pending_htlcs_constr.datalen > 0)
-               pending_htlcs_constr.data = MALLOC(pending_htlcs_constr.datalen * sizeof(LDKHTLCOutputInCommitment), "LDKCVec_HTLCOutputInCommitmentZ Elements");
-       else
-               pending_htlcs_constr.data = NULL;
-       int64_t* pending_htlcs_vals = pending_htlcs->elems;
-       for (size_t y = 0; y < pending_htlcs_constr.datalen; y++) {
-               int64_t pending_htlcs_conv_24 = pending_htlcs_vals[y];
-               LDKHTLCOutputInCommitment pending_htlcs_conv_24_conv;
-               pending_htlcs_conv_24_conv.inner = untag_ptr(pending_htlcs_conv_24);
-               pending_htlcs_conv_24_conv.is_owned = ptr_is_owned(pending_htlcs_conv_24);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(pending_htlcs_conv_24_conv);
-               pending_htlcs_conv_24_conv = HTLCOutputInCommitment_clone(&pending_htlcs_conv_24_conv);
-               pending_htlcs_constr.data[y] = pending_htlcs_conv_24_conv;
-       }
-       FREE(pending_htlcs);
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_channel_close(channel_id_conv, counterparty_node_id_ref, claim_id_ref, package_target_feerate_sat_per_1000_weight, commitment_tx_ref, commitment_tx_fee_satoshis, anchor_descriptor_conv, pending_htlcs_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_InitFeatures_requires_trampoline_routing(int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-int64_t  CS_LDK_BumpTransactionEvent_htlcresolution(int64_t channel_id, int8_tArray counterparty_node_id, int8_tArray claim_id, int32_t target_feerate_sat_per_1000_weight, int64_tArray htlc_descriptors, int32_t tx_lock_time) {
-       LDKChannelId channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = ChannelId_clone(&channel_id_conv);
-       LDKPublicKey counterparty_node_id_ref;
-       CHECK(counterparty_node_id->arr_len == 33);
-       memcpy(counterparty_node_id_ref.compressed_form, counterparty_node_id->elems, 33); FREE(counterparty_node_id);
-       LDKThirtyTwoBytes claim_id_ref;
-       CHECK(claim_id->arr_len == 32);
-       memcpy(claim_id_ref.data, claim_id->elems, 32); FREE(claim_id);
-       LDKCVec_HTLCDescriptorZ htlc_descriptors_constr;
-       htlc_descriptors_constr.datalen = htlc_descriptors->arr_len;
-       if (htlc_descriptors_constr.datalen > 0)
-               htlc_descriptors_constr.data = MALLOC(htlc_descriptors_constr.datalen * sizeof(LDKHTLCDescriptor), "LDKCVec_HTLCDescriptorZ Elements");
-       else
-               htlc_descriptors_constr.data = NULL;
-       int64_t* htlc_descriptors_vals = htlc_descriptors->elems;
-       for (size_t q = 0; q < htlc_descriptors_constr.datalen; q++) {
-               int64_t htlc_descriptors_conv_16 = htlc_descriptors_vals[q];
-               LDKHTLCDescriptor htlc_descriptors_conv_16_conv;
-               htlc_descriptors_conv_16_conv.inner = untag_ptr(htlc_descriptors_conv_16);
-               htlc_descriptors_conv_16_conv.is_owned = ptr_is_owned(htlc_descriptors_conv_16);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_descriptors_conv_16_conv);
-               htlc_descriptors_conv_16_conv = HTLCDescriptor_clone(&htlc_descriptors_conv_16_conv);
-               htlc_descriptors_constr.data[q] = htlc_descriptors_conv_16_conv;
-       }
-       FREE(htlc_descriptors);
-       LDKBumpTransactionEvent *ret_copy = MALLOC(sizeof(LDKBumpTransactionEvent), "LDKBumpTransactionEvent");
-       *ret_copy = BumpTransactionEvent_htlcresolution(channel_id_conv, counterparty_node_id_ref, claim_id_ref, target_feerate_sat_per_1000_weight, htlc_descriptors_constr, tx_lock_time);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+jboolean  CS_LDK_NodeFeatures_requires_trampoline_routing(int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_trampoline_routing(&this_arg_conv);
+       return ret_conv;
 }
 
-jboolean  CS_LDK_BumpTransactionEvent_eq(int64_t a, int64_t b) {
-       LDKBumpTransactionEvent* a_conv = (LDKBumpTransactionEvent*)untag_ptr(a);
-       LDKBumpTransactionEvent* b_conv = (LDKBumpTransactionEvent*)untag_ptr(b);
-       jboolean ret_conv = BumpTransactionEvent_eq(a_conv, b_conv);
+jboolean  CS_LDK_Bolt11InvoiceFeatures_requires_trampoline_routing(int64_t this_arg) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt11InvoiceFeatures_requires_trampoline_routing(&this_arg_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Input_free(int64_t this_obj) {
-       LDKInput this_obj_conv;
+void  CS_LDK_RoutingFees_free(int64_t this_obj) {
+       LDKRoutingFees this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Input_free(this_obj_conv);
+       RoutingFees_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Input_get_outpoint(int64_t this_ptr) {
-       LDKInput this_ptr_conv;
+int32_t  CS_LDK_RoutingFees_get_base_msat(int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = Input_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Input_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKInput this_ptr_conv;
+void  CS_LDK_RoutingFees_set_base_msat(int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       Input_set_outpoint(&this_ptr_conv, val_conv);
+       RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Input_get_previous_utxo(int64_t this_ptr) {
-       LDKInput this_ptr_conv;
+int32_t  CS_LDK_RoutingFees_get_proportional_millionths(int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = Input_get_previous_utxo(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Input_set_previous_utxo(int64_t this_ptr, int64_t val) {
-       LDKInput this_ptr_conv;
+void  CS_LDK_RoutingFees_set_proportional_millionths(int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       Input_set_previous_utxo(&this_ptr_conv, val_conv);
+       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
-int64_t  CS_LDK_Input_get_satisfaction_weight(int64_t this_ptr) {
-       LDKInput this_ptr_conv;
+int64_t  CS_LDK_RoutingFees_new(int32_t base_msat_arg, int32_t proportional_millionths_arg) {
+       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+jboolean  CS_LDK_RoutingFees_eq(int64_t a, int64_t b) {
+       LDKRoutingFees a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRoutingFees b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+int64_t  CS_LDK_RoutingFees_clone_ptr(int64_t arg) {
+       LDKRoutingFees arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+int64_t  CS_LDK_RoutingFees_clone(int64_t orig) {
+       LDKRoutingFees orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+int64_t  CS_LDK_RoutingFees_hash(int64_t o) {
+       LDKRoutingFees o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RoutingFees_hash(&o_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHint_free(int64_t this_obj) {
+       LDKRouteHint this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RouteHint_free(this_obj_conv);
+}
+
+int64_tArray  CS_LDK_RouteHint_get_a(int64_t this_ptr) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = Input_get_satisfaction_weight(&this_ptr_conv);
-       return ret_conv;
+       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
+       int64_tArray ret_arr = NULL;
+       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
+       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
+       for (size_t o = 0; o < ret_var.datalen; o++) {
+               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
+               int64_t ret_conv_14_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
+               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
+               ret_arr_ptr[o] = ret_conv_14_ref;
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-void  CS_LDK_Input_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
-       LDKInput this_ptr_conv;
+void  CS_LDK_RouteHint_set_a(int64_t this_ptr, int64_tArray val) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Input_set_satisfaction_weight(&this_ptr_conv, val);
+       LDKCVec_RouteHintHopZ val_constr;
+       val_constr.datalen = val->arr_len;
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = val->elems;
+       for (size_t o = 0; o < val_constr.datalen; o++) {
+               int64_t val_conv_14 = val_vals[o];
+               LDKRouteHintHop val_conv_14_conv;
+               val_conv_14_conv.inner = untag_ptr(val_conv_14);
+               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
+               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
+               val_constr.data[o] = val_conv_14_conv;
+       }
+       FREE(val);
+       RouteHint_set_a(&this_ptr_conv, val_constr);
 }
 
-int64_t  CS_LDK_Input_new(int64_t outpoint_arg, int64_t previous_utxo_arg, int64_t satisfaction_weight_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* previous_utxo_arg_ptr = untag_ptr(previous_utxo_arg);
-       CHECK_ACCESS(previous_utxo_arg_ptr);
-       LDKTxOut previous_utxo_arg_conv = *(LDKTxOut*)(previous_utxo_arg_ptr);
-       previous_utxo_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(previous_utxo_arg));
-       LDKInput ret_var = Input_new(outpoint_arg_conv, previous_utxo_arg_conv, satisfaction_weight_arg);
+int64_t  CS_LDK_RouteHint_new(int64_tArray a_arg) {
+       LDKCVec_RouteHintHopZ a_arg_constr;
+       a_arg_constr.datalen = a_arg->arr_len;
+       if (a_arg_constr.datalen > 0)
+               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               a_arg_constr.data = NULL;
+       int64_t* a_arg_vals = a_arg->elems;
+       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
+               int64_t a_arg_conv_14 = a_arg_vals[o];
+               LDKRouteHintHop a_arg_conv_14_conv;
+               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
+               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
+               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
+               a_arg_constr.data[o] = a_arg_conv_14_conv;
+       }
+       FREE(a_arg);
+       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Input_clone_ptr(LDKInput *NONNULL_PTR arg) {
-       LDKInput ret_var = Input_clone(arg);
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Input_clone_ptr(int64_t arg) {
-       LDKInput arg_conv;
+int64_t  CS_LDK_RouteHint_clone_ptr(int64_t arg) {
+       LDKRouteHint arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Input_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Input_clone(int64_t orig) {
-       LDKInput orig_conv;
+int64_t  CS_LDK_RouteHint_clone(int64_t orig) {
+       LDKRouteHint orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInput ret_var = Input_clone(&orig_conv);
+       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Input_hash(int64_t o) {
-       LDKInput o_conv;
+int64_t  CS_LDK_RouteHint_hash(int64_t o) {
+       LDKRouteHint o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Input_hash(&o_conv);
+       int64_t ret_conv = RouteHint_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Input_eq(int64_t a, int64_t b) {
-       LDKInput a_conv;
+jboolean  CS_LDK_RouteHint_eq(int64_t a, int64_t b) {
+       LDKRouteHint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKInput b_conv;
+       LDKRouteHint b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Input_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-void  CS_LDK_Utxo_free(int64_t this_obj) {
-       LDKUtxo this_obj_conv;
+void  CS_LDK_RouteHintHop_free(int64_t this_obj) {
+       LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Utxo_free(this_obj_conv);
+       RouteHintHop_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Utxo_get_outpoint(int64_t this_ptr) {
-       LDKUtxo this_ptr_conv;
+int8_tArray  CS_LDK_RouteHintHop_get_src_node_id(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = Utxo_get_outpoint(&this_ptr_conv);
+       int8_tArray ret_arr = init_int8_tArray(33, __LINE__);
+       memcpy(ret_arr->elems, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form, 33);
+       return ret_arr;
+}
+
+void  CS_LDK_RouteHintHop_set_src_node_id(int64_t this_ptr, int8_tArray val) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK(val->arr_len == 33);
+       memcpy(val_ref.compressed_form, val->elems, 33); FREE(val);
+       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_RouteHintHop_get_short_channel_id(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
+       return ret_conv;
+}
+
+void  CS_LDK_RouteHintHop_set_short_channel_id(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHintHop_get_fees(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_Utxo_set_outpoint(int64_t this_ptr, int64_t val) {
-       LDKUtxo this_ptr_conv;
+void  CS_LDK_RouteHintHop_set_fees(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
+       LDKRoutingFees val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       Utxo_set_outpoint(&this_ptr_conv, val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Utxo_get_output(int64_t this_ptr) {
-       LDKUtxo this_ptr_conv;
+int16_t  CS_LDK_RouteHintHop_get_cltv_expiry_delta(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = Utxo_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Utxo_set_output(int64_t this_ptr, int64_t val) {
-       LDKUtxo this_ptr_conv;
+void  CS_LDK_RouteHintHop_set_cltv_expiry_delta(int64_t this_ptr, int16_t val) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+int64_t  CS_LDK_RouteHintHop_get_htlc_minimum_msat(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+void  CS_LDK_RouteHintHop_set_htlc_minimum_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       Utxo_set_output(&this_ptr_conv, val_conv);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Utxo_get_satisfaction_weight(int64_t this_ptr) {
-       LDKUtxo this_ptr_conv;
+int64_t  CS_LDK_RouteHintHop_get_htlc_maximum_msat(int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = Utxo_get_satisfaction_weight(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-void  CS_LDK_Utxo_set_satisfaction_weight(int64_t this_ptr, int64_t val) {
-       LDKUtxo this_ptr_conv;
+void  CS_LDK_RouteHintHop_set_htlc_maximum_msat(int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       Utxo_set_satisfaction_weight(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_Utxo_new(int64_t outpoint_arg, int64_t output_arg, int64_t satisfaction_weight_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKUtxo ret_var = Utxo_new(outpoint_arg_conv, output_arg_conv, satisfaction_weight_arg);
+int64_t  CS_LDK_RouteHintHop_new(int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
+       LDKPublicKey src_node_id_arg_ref;
+       CHECK(src_node_id_arg->arr_len == 33);
+       memcpy(src_node_id_arg_ref.compressed_form, src_node_id_arg->elems, 33); FREE(src_node_id_arg);
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
+       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
+       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
+       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
+       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
+       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
+       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Utxo_clone_ptr(LDKUtxo *NONNULL_PTR arg) {
-       LDKUtxo ret_var = Utxo_clone(arg);
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_Utxo_clone_ptr(int64_t arg) {
-       LDKUtxo arg_conv;
+int64_t  CS_LDK_RouteHintHop_clone_ptr(int64_t arg) {
+       LDKRouteHintHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Utxo_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Utxo_clone(int64_t orig) {
-       LDKUtxo orig_conv;
+int64_t  CS_LDK_RouteHintHop_clone(int64_t orig) {
+       LDKRouteHintHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUtxo ret_var = Utxo_clone(&orig_conv);
+       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-int64_t  CS_LDK_Utxo_hash(int64_t o) {
-       LDKUtxo o_conv;
+int64_t  CS_LDK_RouteHintHop_hash(int64_t o) {
+       LDKRouteHintHop o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = Utxo_hash(&o_conv);
+       int64_t ret_conv = RouteHintHop_hash(&o_conv);
        return ret_conv;
 }
 
-jboolean  CS_LDK_Utxo_eq(int64_t a, int64_t b) {
-       LDKUtxo a_conv;
+jboolean  CS_LDK_RouteHintHop_eq(int64_t a, int64_t b) {
+       LDKRouteHintHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKUtxo b_conv;
+       LDKRouteHintHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Utxo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_Utxo_new_p2pkh(int64_t outpoint, int64_t value, int8_tArray pubkey_hash) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       uint8_t pubkey_hash_arr[20];
-       CHECK(pubkey_hash->arr_len == 20);
-       memcpy(pubkey_hash_arr, pubkey_hash->elems, 20); FREE(pubkey_hash);
-       uint8_t (*pubkey_hash_ref)[20] = &pubkey_hash_arr;
-       LDKUtxo ret_var = Utxo_new_p2pkh(outpoint_conv, value, pubkey_hash_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-void  CS_LDK_CoinSelection_free(int64_t this_obj) {
-       LDKCoinSelection this_obj_conv;
+void  CS_LDK_UntrustedString_free(int64_t this_obj) {
+       LDKUntrustedString this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       CoinSelection_free(this_obj_conv);
-}
-
-int64_tArray  CS_LDK_CoinSelection_get_confirmed_utxos(int64_t this_ptr) {
-       LDKCoinSelection this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_UtxoZ ret_var = CoinSelection_get_confirmed_utxos(&this_ptr_conv);
-       int64_tArray ret_arr = NULL;
-       ret_arr = init_int64_tArray(ret_var.datalen, __LINE__);
-       int64_t *ret_arr_ptr = (int64_t*)(((uint8_t*)ret_arr) + 8);
-       for (size_t g = 0; g < ret_var.datalen; g++) {
-               LDKUtxo ret_conv_6_var = ret_var.data[g];
-               int64_t ret_conv_6_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
-               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
-               ret_arr_ptr[g] = ret_conv_6_ref;
-       }
-       
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-void  CS_LDK_CoinSelection_set_confirmed_utxos(int64_t this_ptr, int64_tArray val) {
-       LDKCoinSelection this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_UtxoZ val_constr;
-       val_constr.datalen = val->arr_len;
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = val->elems;
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               LDKUtxo val_conv_6_conv;
-               val_conv_6_conv.inner = untag_ptr(val_conv_6);
-               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
-               val_conv_6_conv = Utxo_clone(&val_conv_6_conv);
-               val_constr.data[g] = val_conv_6_conv;
-       }
-       FREE(val);
-       CoinSelection_set_confirmed_utxos(&this_ptr_conv, val_constr);
+       UntrustedString_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_CoinSelection_get_change_output(int64_t this_ptr) {
-       LDKCoinSelection this_ptr_conv;
+jstring  CS_LDK_UntrustedString_get_a(int64_t this_ptr) {
+       LDKUntrustedString this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_TxOutZ *ret_copy = MALLOC(sizeof(LDKCOption_TxOutZ), "LDKCOption_TxOutZ");
-       *ret_copy = CoinSelection_get_change_output(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKStr ret_str = UntrustedString_get_a(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-void  CS_LDK_CoinSelection_set_change_output(int64_t this_ptr, int64_t val) {
-       LDKCoinSelection this_ptr_conv;
+void  CS_LDK_UntrustedString_set_a(int64_t this_ptr, jstring val) {
+       LDKUntrustedString this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_TxOutZ val_conv = *(LDKCOption_TxOutZ*)(val_ptr);
-       val_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(val));
-       CoinSelection_set_change_output(&this_ptr_conv, val_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       UntrustedString_set_a(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_CoinSelection_new(int64_tArray confirmed_utxos_arg, int64_t change_output_arg) {
-       LDKCVec_UtxoZ confirmed_utxos_arg_constr;
-       confirmed_utxos_arg_constr.datalen = confirmed_utxos_arg->arr_len;
-       if (confirmed_utxos_arg_constr.datalen > 0)
-               confirmed_utxos_arg_constr.data = MALLOC(confirmed_utxos_arg_constr.datalen * sizeof(LDKUtxo), "LDKCVec_UtxoZ Elements");
-       else
-               confirmed_utxos_arg_constr.data = NULL;
-       int64_t* confirmed_utxos_arg_vals = confirmed_utxos_arg->elems;
-       for (size_t g = 0; g < confirmed_utxos_arg_constr.datalen; g++) {
-               int64_t confirmed_utxos_arg_conv_6 = confirmed_utxos_arg_vals[g];
-               LDKUtxo confirmed_utxos_arg_conv_6_conv;
-               confirmed_utxos_arg_conv_6_conv.inner = untag_ptr(confirmed_utxos_arg_conv_6);
-               confirmed_utxos_arg_conv_6_conv.is_owned = ptr_is_owned(confirmed_utxos_arg_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(confirmed_utxos_arg_conv_6_conv);
-               confirmed_utxos_arg_conv_6_conv = Utxo_clone(&confirmed_utxos_arg_conv_6_conv);
-               confirmed_utxos_arg_constr.data[g] = confirmed_utxos_arg_conv_6_conv;
-       }
-       FREE(confirmed_utxos_arg);
-       void* change_output_arg_ptr = untag_ptr(change_output_arg);
-       CHECK_ACCESS(change_output_arg_ptr);
-       LDKCOption_TxOutZ change_output_arg_conv = *(LDKCOption_TxOutZ*)(change_output_arg_ptr);
-       change_output_arg_conv = COption_TxOutZ_clone((LDKCOption_TxOutZ*)untag_ptr(change_output_arg));
-       LDKCoinSelection ret_var = CoinSelection_new(confirmed_utxos_arg_constr, change_output_arg_conv);
+int64_t  CS_LDK_UntrustedString_new(jstring a_arg) {
+       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
+       LDKUntrustedString ret_var = UntrustedString_new(a_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t CoinSelection_clone_ptr(LDKCoinSelection *NONNULL_PTR arg) {
-       LDKCoinSelection ret_var = CoinSelection_clone(arg);
+static inline uint64_t UntrustedString_clone_ptr(LDKUntrustedString *NONNULL_PTR arg) {
+       LDKUntrustedString ret_var = UntrustedString_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-int64_t  CS_LDK_CoinSelection_clone_ptr(int64_t arg) {
-       LDKCoinSelection arg_conv;
+int64_t  CS_LDK_UntrustedString_clone_ptr(int64_t arg) {
+       LDKUntrustedString arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = CoinSelection_clone_ptr(&arg_conv);
+       int64_t ret_conv = UntrustedString_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-int64_t  CS_LDK_CoinSelection_clone(int64_t orig) {
-       LDKCoinSelection orig_conv;
+int64_t  CS_LDK_UntrustedString_clone(int64_t orig) {
+       LDKUntrustedString orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKCoinSelection ret_var = CoinSelection_clone(&orig_conv);
+       LDKUntrustedString ret_var = UntrustedString_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_CoinSelectionSource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCoinSelectionSource this_ptr_conv = *(LDKCoinSelectionSource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CoinSelectionSource_free(this_ptr_conv);
+jboolean  CS_LDK_UntrustedString_eq(int64_t a, int64_t b) {
+       LDKUntrustedString a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKUntrustedString b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = UntrustedString_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_WalletSource_free(int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWalletSource this_ptr_conv = *(LDKWalletSource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WalletSource_free(this_ptr_conv);
+int64_t  CS_LDK_UntrustedString_hash(int64_t o) {
+       LDKUntrustedString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = UntrustedString_hash(&o_conv);
+       return ret_conv;
 }
 
-void  CS_LDK_Wallet_free(int64_t this_obj) {
-       LDKWallet this_obj_conv;
+jstring  CS_LDK_UntrustedString_to_str(int64_t o) {
+       LDKUntrustedString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = UntrustedString_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  CS_LDK_PrintableString_free(int64_t this_obj) {
+       LDKPrintableString this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Wallet_free(this_obj_conv);
-}
-
-int64_t  CS_LDK_Wallet_new(int64_t source, int64_t logger) {
-       void* source_ptr = untag_ptr(source);
-       CHECK_ACCESS(source_ptr);
-       LDKWalletSource source_conv = *(LDKWalletSource*)(source_ptr);
-       if (source_conv.free == LDKWalletSource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKWalletSource_JCalls_cloned(&source_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKWallet ret_var = Wallet_new(source_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       PrintableString_free(this_obj_conv);
 }
 
-int64_t  CS_LDK_Wallet_as_CoinSelectionSource(int64_t this_arg) {
-       LDKWallet this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCoinSelectionSource* ret_ret = MALLOC(sizeof(LDKCoinSelectionSource), "LDKCoinSelectionSource");
-       *ret_ret = Wallet_as_CoinSelectionSource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+jstring  CS_LDK_PrintableString_get_a(int64_t this_ptr) {
+       LDKPrintableString this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKStr ret_str = PrintableString_get_a(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
-void  CS_LDK_BumpTransactionEventHandler_free(int64_t this_obj) {
-       LDKBumpTransactionEventHandler this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BumpTransactionEventHandler_free(this_obj_conv);
+void  CS_LDK_PrintableString_set_a(int64_t this_ptr, jstring val) {
+       LDKPrintableString this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       PrintableString_set_a(&this_ptr_conv, val_conv);
 }
 
-int64_t  CS_LDK_BumpTransactionEventHandler_new(int64_t broadcaster, int64_t utxo_source, int64_t signer_provider, int64_t logger) {
-       void* broadcaster_ptr = untag_ptr(broadcaster);
-       CHECK_ACCESS(broadcaster_ptr);
-       LDKBroadcasterInterface broadcaster_conv = *(LDKBroadcasterInterface*)(broadcaster_ptr);
-       if (broadcaster_conv.free == LDKBroadcasterInterface_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKBroadcasterInterface_JCalls_cloned(&broadcaster_conv);
-       }
-       void* utxo_source_ptr = untag_ptr(utxo_source);
-       CHECK_ACCESS(utxo_source_ptr);
-       LDKCoinSelectionSource utxo_source_conv = *(LDKCoinSelectionSource*)(utxo_source_ptr);
-       if (utxo_source_conv.free == LDKCoinSelectionSource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCoinSelectionSource_JCalls_cloned(&utxo_source_conv);
-       }
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       CHECK_ACCESS(signer_provider_ptr);
-       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
-       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKBumpTransactionEventHandler ret_var = BumpTransactionEventHandler_new(broadcaster_conv, utxo_source_conv, signer_provider_conv, logger_conv);
+int64_t  CS_LDK_PrintableString_new(jstring a_arg) {
+       LDKStr a_arg_conv = str_ref_to_owned_c(a_arg);
+       LDKPrintableString ret_var = PrintableString_new(a_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-void  CS_LDK_BumpTransactionEventHandler_handle_event(int64_t this_arg, int64_t event) {
-       LDKBumpTransactionEventHandler this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKBumpTransactionEvent* event_conv = (LDKBumpTransactionEvent*)untag_ptr(event);
-       BumpTransactionEventHandler_handle_event(&this_arg_conv, event_conv);
+jstring  CS_LDK_PrintableString_to_str(int64_t o) {
+       LDKPrintableString o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       LDKStr ret_str = PrintableString_to_str(&o_conv);
+       jstring ret_conv = str_ref_to_cs(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
 }
 
 void  CS_LDK_FilesystemStore_free(int64_t this_obj) {
@@ -83050,7 +88298,7 @@ int64_t  CS_LDK_GossipSync_none() {
        return ret_ref;
 }
 
-int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handler, int64_t chain_monitor, int64_t channel_manager, int64_t gossip_sync, int64_t peer_manager, int64_t logger, int64_t scorer) {
+int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handler, int64_t chain_monitor, int64_t channel_manager, int64_t onion_messenger, int64_t gossip_sync, int64_t peer_manager, int64_t logger, int64_t scorer) {
        void* persister_ptr = untag_ptr(persister);
        CHECK_ACCESS(persister_ptr);
        LDKPersister persister_conv = *(LDKPersister*)(persister_ptr);
@@ -83075,6 +88323,11 @@ int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handl
        channel_manager_conv.is_owned = ptr_is_owned(channel_manager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        channel_manager_conv.is_owned = false;
+       LDKOnionMessenger onion_messenger_conv;
+       onion_messenger_conv.inner = untag_ptr(onion_messenger);
+       onion_messenger_conv.is_owned = ptr_is_owned(onion_messenger);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_messenger_conv);
+       onion_messenger_conv.is_owned = false;
        void* gossip_sync_ptr = untag_ptr(gossip_sync);
        CHECK_ACCESS(gossip_sync_ptr);
        LDKGossipSync gossip_sync_conv = *(LDKGossipSync*)(gossip_sync_ptr);
@@ -83102,7 +88355,7 @@ int64_t  CS_LDK_BackgroundProcessor_start(int64_t persister, int64_t event_handl
                        LDKWriteableScore_JCalls_cloned(&scorer_conv.some);
                }
        }
-       LDKBackgroundProcessor ret_var = BackgroundProcessor_start(persister_conv, event_handler_conv, &chain_monitor_conv, &channel_manager_conv, gossip_sync_conv, &peer_manager_conv, logger_conv, scorer_conv);
+       LDKBackgroundProcessor ret_var = BackgroundProcessor_start(persister_conv, event_handler_conv, &chain_monitor_conv, &channel_manager_conv, &onion_messenger_conv, gossip_sync_conv, &peer_manager_conv, logger_conv, scorer_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
@@ -84286,6 +89539,40 @@ void  CS_LDK_Bolt11InvoiceSignature_free(int64_t this_obj) {
        Bolt11InvoiceSignature_free(this_obj_conv);
 }
 
+int8_tArray  CS_LDK_Bolt11InvoiceSignature_get_a(int64_t this_ptr) {
+       LDKBolt11InvoiceSignature this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = init_int8_tArray(68, __LINE__);
+       memcpy(ret_arr->elems, Bolt11InvoiceSignature_get_a(&this_ptr_conv).serialized_form, 68);
+       return ret_arr;
+}
+
+void  CS_LDK_Bolt11InvoiceSignature_set_a(int64_t this_ptr, int8_tArray val) {
+       LDKBolt11InvoiceSignature this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRecoverableSignature val_ref;
+       CHECK(val->arr_len == 68);
+       memcpy(val_ref.serialized_form, val->elems, 68); FREE(val);
+       Bolt11InvoiceSignature_set_a(&this_ptr_conv, val_ref);
+}
+
+int64_t  CS_LDK_Bolt11InvoiceSignature_new(int8_tArray a_arg) {
+       LDKRecoverableSignature a_arg_ref;
+       CHECK(a_arg->arr_len == 68);
+       memcpy(a_arg_ref.serialized_form, a_arg->elems, 68); FREE(a_arg);
+       LDKBolt11InvoiceSignature ret_var = Bolt11InvoiceSignature_new(a_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline uint64_t Bolt11InvoiceSignature_clone_ptr(LDKBolt11InvoiceSignature *NONNULL_PTR arg) {
        LDKBolt11InvoiceSignature ret_var = Bolt11InvoiceSignature_clone(arg);
        int64_t ret_ref = 0;
@@ -85016,6 +90303,19 @@ int64_t  CS_LDK_Description_into_inner(int64_t this_arg) {
        return ret_ref;
 }
 
+int64_t  CS_LDK_Description_as_inner(int64_t this_arg) {
+       LDKDescription this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKUntrustedString ret_var = Description_as_inner(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 jstring  CS_LDK_Description_to_str(int64_t o) {
        LDKDescription o_conv;
        o_conv.inner = untag_ptr(o);
@@ -85269,334 +90569,6 @@ jstring  CS_LDK_SignOrCreationError_to_str(int64_t o) {
        return ret_conv;
 }
 
-int64_t  CS_LDK_payment_parameters_from_zero_amount_invoice(int64_t invoice, int64_t amount_msat) {
-       LDKBolt11Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = payment_parameters_from_zero_amount_invoice(&invoice_conv, amount_msat);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_payment_parameters_from_invoice(int64_t invoice) {
-       LDKBolt11Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ), "LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ");
-       *ret_conv = payment_parameters_from_invoice(&invoice_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_phantom_invoice(int64_t amt_msat, int64_t payment_hash, jstring description, int32_t invoice_expiry_delta_secs, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       void* payment_hash_ptr = untag_ptr(payment_hash);
-       CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
-       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
-       if (phantom_route_hints_constr.datalen > 0)
-               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
-       else
-               phantom_route_hints_constr.data = NULL;
-       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
-       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
-               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
-               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
-               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
-               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
-               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
-               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
-       }
-       FREE(phantom_route_hints);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_phantom_invoice(amt_msat_conv, payment_hash_conv, description_conv, invoice_expiry_delta_secs, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_phantom_invoice_with_description_hash(int64_t amt_msat, int64_t payment_hash, int32_t invoice_expiry_delta_secs, int64_t description_hash, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, int32_t network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       void* payment_hash_ptr = untag_ptr(payment_hash);
-       CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
-       LDKSha256 description_hash_conv;
-       description_hash_conv.inner = untag_ptr(description_hash);
-       description_hash_conv.is_owned = ptr_is_owned(description_hash);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
-       description_hash_conv = Sha256_clone(&description_hash_conv);
-       LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
-       phantom_route_hints_constr.datalen = phantom_route_hints->arr_len;
-       if (phantom_route_hints_constr.datalen > 0)
-               phantom_route_hints_constr.data = MALLOC(phantom_route_hints_constr.datalen * sizeof(LDKPhantomRouteHints), "LDKCVec_PhantomRouteHintsZ Elements");
-       else
-               phantom_route_hints_constr.data = NULL;
-       int64_t* phantom_route_hints_vals = phantom_route_hints->elems;
-       for (size_t t = 0; t < phantom_route_hints_constr.datalen; t++) {
-               int64_t phantom_route_hints_conv_19 = phantom_route_hints_vals[t];
-               LDKPhantomRouteHints phantom_route_hints_conv_19_conv;
-               phantom_route_hints_conv_19_conv.inner = untag_ptr(phantom_route_hints_conv_19);
-               phantom_route_hints_conv_19_conv.is_owned = ptr_is_owned(phantom_route_hints_conv_19);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(phantom_route_hints_conv_19_conv);
-               phantom_route_hints_conv_19_conv = PhantomRouteHints_clone(&phantom_route_hints_conv_19_conv);
-               phantom_route_hints_constr.data[t] = phantom_route_hints_conv_19_conv;
-       }
-       FREE(phantom_route_hints);
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_phantom_invoice_with_description_hash(amt_msat_conv, payment_hash_conv, invoice_expiry_delta_secs, description_hash_conv, phantom_route_hints_constr, entropy_source_conv, node_signer_conv, logger_conv, network_conv, min_final_cltv_expiry_delta_conv, duration_since_epoch);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKSha256 description_hash_conv;
-       description_hash_conv.inner = untag_ptr(description_hash);
-       description_hash_conv.is_owned = ptr_is_owned(description_hash);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
-       description_hash_conv = Sha256_clone(&description_hash_conv);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_with_description_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, int64_t description_hash, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKSha256 description_hash_conv;
-       description_hash_conv.inner = untag_ptr(description_hash);
-       description_hash_conv.is_owned = ptr_is_owned(description_hash);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(description_hash_conv);
-       description_hash_conv = Sha256_clone(&description_hash_conv);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_hash_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-int64_t  CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(int64_t channelmanager, int64_t node_signer, int64_t logger, int32_t network, int64_t amt_msat, jstring description, int64_t duration_since_epoch, int32_t invoice_expiry_delta_secs, int8_tArray payment_hash, int64_t min_final_cltv_expiry_delta) {
-       LDKChannelManager channelmanager_conv;
-       channelmanager_conv.inner = untag_ptr(channelmanager);
-       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
-       channelmanager_conv.is_owned = false;
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKCurrency network_conv = LDKCurrency_from_cs(network);
-       void* amt_msat_ptr = untag_ptr(amt_msat);
-       CHECK_ACCESS(amt_msat_ptr);
-       LDKCOption_u64Z amt_msat_conv = *(LDKCOption_u64Z*)(amt_msat_ptr);
-       amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
-       LDKStr description_conv = str_ref_to_owned_c(description);
-       LDKThirtyTwoBytes payment_hash_ref;
-       CHECK(payment_hash->arr_len == 32);
-       memcpy(payment_hash_ref.data, payment_hash->elems, 32); FREE(payment_hash);
-       void* min_final_cltv_expiry_delta_ptr = untag_ptr(min_final_cltv_expiry_delta);
-       CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
-       LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
-       min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_Bolt11InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ), "LDKCResult_Bolt11InvoiceSignOrCreationErrorZ");
-       *ret_conv = create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(&channelmanager_conv, node_signer_conv, logger_conv, network_conv, amt_msat_conv, description_conv, duration_since_epoch, invoice_expiry_delta_secs, payment_hash_ref, min_final_cltv_expiry_delta_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 int64_t  CS_LDK_SiPrefix_from_str(jstring s) {
        LDKStr s_conv = str_ref_to_owned_c(s);
        LDKCResult_SiPrefixBolt11ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixBolt11ParseErrorZ), "LDKCResult_SiPrefixBolt11ParseErrorZ");
diff --git a/c_sharp/src/org/ldk/enums/BalanceSource.cs b/c_sharp/src/org/ldk/enums/BalanceSource.cs
new file mode 100644 (file)
index 0000000..8e819e9
--- /dev/null
@@ -0,0 +1,22 @@
+namespace org { namespace ldk { namespace enums {/**
+ * Indicates whether the balance is derived from a cooperative close, a force-close
+ * (for holder or counterparty), or whether it is for an HTLC.
+ */
+public enum BalanceSource {
+       /**
+        * The channel was force closed by the holder.
+        */
+       LDKBalanceSource_HolderForceClosed,
+       /**
+        * The channel was force closed by the counterparty.
+        */
+       LDKBalanceSource_CounterpartyForceClosed,
+       /**
+        * The channel was cooperatively closed.
+        */
+       LDKBalanceSource_CoopClose,
+       /**
+        * This balance is the result of an HTLC.
+        */
+       LDKBalanceSource_Htlc,
+}} } }
index 5d26fe2f049060fbc2e9bcaa78220c60ed7cd39e..941e527ec2e38c86f28648e60d839cee716d7c09 100644 (file)
@@ -110,6 +110,10 @@ public enum Bolt12SemanticError {
         * An invoice payment hash was expected but was missing.
         */
        LDKBolt12SemanticError_MissingPaymentHash,
+       /**
+        * An invoice payment hash was provided but was not expected.
+        */
+       LDKBolt12SemanticError_UnexpectedPaymentHash,
        /**
         * A signature was expected but was missing.
         */
index d2a4d73a0343450cb687bf976f8c88819ecdbfc5..318ac4b9ea129b8fec17c1cceed0a1a573baf304 100644 (file)
@@ -3,13 +3,23 @@ namespace org { namespace ldk { namespace enums {/**
  * estimation.
  */
 public enum ConfirmationTarget {
+       /**
+        * The most aggressive (i.e. highest) feerate estimate available.
+        * 
+        * This is used to sanity-check our counterparty's feerates and should be as conservative as
+        * possible to ensure that we don't confuse a peer using a very conservative estimator for one
+        * trying to burn channel balance to dust.
+        */
+       LDKConfirmationTarget_MaximumFeeEstimate,
        /**
         * We have some funds available on chain which we need to spend prior to some expiry time at
-        * which point our counterparty may be able to steal them. Generally we have in the high tens
-        * to low hundreds of blocks to get our transaction on-chain, but we shouldn't risk too low a
-        * fee - this should be a relatively high priority feerate.
+        * which point our counterparty may be able to steal them.
+        * 
+        * Generally we have in the high tens to low hundreds of blocks to get our transaction
+        * on-chain (it doesn't have to happen in the next few blocks!), but we shouldn't risk too low
+        * a fee - this should be a relatively high priority feerate.
         */
-       LDKConfirmationTarget_OnChainSweep,
+       LDKConfirmationTarget_UrgentOnChainSweep,
        /**
         * This is the lowest feerate we will allow our channel counterparty to have in an anchor
         * channel in order to close the channel if a channel party goes away.
@@ -91,14 +101,18 @@ public enum ConfirmationTarget {
         */
        LDKConfirmationTarget_ChannelCloseMinimum,
        /**
-        * The feerate [`OutputSweeper`] will use on transactions spending
-        * [`SpendableOutputDescriptor`]s after a channel closure.
+        * The feerate used to claim on-chain funds when there is no particular urgency to do so.
+        * 
+        * It is used to get commitment transactions without any HTLCs confirmed in [`ChannelMonitor`]
+        * and by  [`OutputSweeper`] on transactions spending [`SpendableOutputDescriptor`]s after a
+        * channel closure.
         * 
         * Generally spending these outputs is safe as long as they eventually confirm, so a value
         * (slightly above) the mempool minimum should suffice. However, as this value will influence
         * how long funds will be unavailable after channel closure, [`FeeEstimator`] implementors
         * might want to choose a higher feerate to regain control over funds faster.
         * 
+        * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
         * [`OutputSweeper`]: crate::util::sweep::OutputSweeper
         * [`SpendableOutputDescriptor`]: crate::sign::SpendableOutputDescriptor
         */
index 71d37306b8aa21c9c407271d6d29738e75ffa504..da57695fa5c84f644dbd566a6dc0876d520e94aa 100644 (file)
@@ -19,16 +19,11 @@ public enum CreationError {
         */
        LDKCreationError_InvalidAmount,
        /**
-        * Route hints were required for this invoice and were missing. Applies to
-        * [phantom invoices].
-        * 
-        * [phantom invoices]: crate::utils::create_phantom_invoice
+        * Route hints were required for this invoice and were missing.
         */
        LDKCreationError_MissingRouteHints,
        /**
-        * The provided `min_final_cltv_expiry_delta` was less than [`MIN_FINAL_CLTV_EXPIRY_DELTA`].
-        * 
-        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]: lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
+        * The provided `min_final_cltv_expiry_delta` was less than rust-lightning's minimum.
         */
        LDKCreationError_MinFinalCltvExpiryDeltaTooShort,
 }} } }
index 2bf28ee580cbcc82ad5ac2db286d578a8d9b3a5c..26533dcdf51a9b259c3cd6a7a083b9116c1bd604 100644 (file)
@@ -1,6 +1,6 @@
 namespace org { namespace ldk { namespace enums {/**
- * The side of a channel that is the [`IntroductionNode`] in a [`BlindedPath`]. [BOLT 7] defines
- * which nodes is which in the [`ChannelAnnouncement`] message.
+ * The side of a channel that is the [`IntroductionNode`] in a blinded path. [BOLT 7] defines which
+ * nodes is which in the [`ChannelAnnouncement`] message.
  * 
  * [BOLT 7]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_announcement-message
  * [`ChannelAnnouncement`]: crate::ln::msgs::ChannelAnnouncement
index 2b1f21d5ba4e81473c9005354b2a87f82b1cf1e4..57af0e6aac41823bf770548bc1ff6aa1b0268e37 100644 (file)
@@ -4,6 +4,12 @@ namespace org { namespace ldk { namespace enums {/**
 public enum PaymentFailureReason {
        /**
         * The intended recipient rejected our payment.
+        * 
+        * Also used for [`UnknownRequiredFeatures`] and [`InvoiceRequestRejected`] when downgrading to
+        * version prior to 0.0.124.
+        * 
+        * [`UnknownRequiredFeatures`]: Self::UnknownRequiredFeatures
+        * [`InvoiceRequestRejected`]: Self::InvoiceRequestRejected
         */
        LDKPaymentFailureReason_RecipientRejected,
        /**
@@ -25,7 +31,10 @@ public enum PaymentFailureReason {
         * The payment expired while retrying, based on the provided
         * [`PaymentParameters::expiry_time`].
         * 
+        * Also used for [`InvoiceRequestExpired`] when downgrading to version prior to 0.0.124.
+        * 
         * [`PaymentParameters::expiry_time`]: crate::routing::router::PaymentParameters::expiry_time
+        * [`InvoiceRequestExpired`]: Self::InvoiceRequestExpired
         */
        LDKPaymentFailureReason_PaymentExpired,
        /**
@@ -41,4 +50,18 @@ public enum PaymentFailureReason {
         * your router.
         */
        LDKPaymentFailureReason_UnexpectedError,
+       /**
+        * An invoice was received that required unknown features.
+        */
+       LDKPaymentFailureReason_UnknownRequiredFeatures,
+       /**
+        * A [`Bolt12Invoice`] was not received in a reasonable amount of time.
+        */
+       LDKPaymentFailureReason_InvoiceRequestExpired,
+       /**
+        * An [`InvoiceRequest`] for the payment was rejected by the recipient.
+        * 
+        * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
+        */
+       LDKPaymentFailureReason_InvoiceRequestRejected,
 }} } }
index 400a2ca3e2116e1251b1418202cc6377560b2b20..904b4db666f755050bc0561d6c4102c6cb2a4eb9 100644 (file)
@@ -27,4 +27,12 @@ public enum RetryableSendFailure {
         * [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
         */
        LDKRetryableSendFailure_DuplicatePayment,
+       /**
+        * The [`RecipientOnionFields::payment_metadata`], [`RecipientOnionFields::custom_tlvs`], or
+        * [`BlindedPaymentPath`]s provided are too large and caused us to exceed the maximum onion
+        * packet size of 1300 bytes.
+        * 
+        * [`BlindedPaymentPath`]: crate::blinded_path::payment::BlindedPaymentPath
+        */
+       LDKRetryableSendFailure_OnionPacketSizeExceeded,
 }} } }
index 21cab853199b226655181714cf6021359ec52c7a..5cb0f79b3cd879cff929177d3a7aaeaaab3832e6 100644 (file)
@@ -46,4 +46,8 @@ public enum Secp256k1Error {
         * The only valid parity values are 0 or 1.
         */
        LDKSecp256k1Error_InvalidParityValue,
+       /**
+        * Invalid Elligator Swift Value
+        */
+       LDKSecp256k1Error_InvalidEllSwift,
 }} } }
index 1737fdc69bee7e75d9377d12dcb6733770ceaa85..1ad0bc15a5e0beb77f5f6d5372e1a97f7474c0bd 100644 (file)
@@ -35,6 +35,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundBolt12SemanticErrorZ_get_err")] public static extern Bolt12SemanticError CResult_RefundBolt12SemanticErrorZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_u64Z_ty_from_ptr")] public static extern long LDKCOption_u64Z_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_u64Z_Some_get_some")] public static extern long LDKCOption_u64Z_Some_get_some(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDecodeError_ty_from_ptr")] public static extern long LDKDecodeError_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDecodeError_Io_get_io")] public static extern IOError LDKDecodeError_Io_get_io(long ptr);
+       // struct LDKRefund CResult_RefundDecodeErrorZ_get_ok(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_get_ok")] public static extern long CResult_RefundDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_RefundDecodeErrorZ_get_err(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_get_err")] public static extern long CResult_RefundDecodeErrorZ_get_err(long _owner);
        // struct LDKRefund CResult_RefundBolt12ParseErrorZ_get_ok(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundBolt12ParseErrorZ_get_ok")] public static extern long CResult_RefundBolt12ParseErrorZ_get_ok(long _owner);
        // struct LDKBolt12ParseError CResult_RefundBolt12ParseErrorZ_get_err(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner);
@@ -42,8 +48,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKRetry_ty_from_ptr")] public static extern long LDKRetry_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKRetry_Attempts_get_attempts")] public static extern int LDKRetry_Attempts_get_attempts(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKRetry_Timeout_get_timeout")] public static extern long LDKRetry_Timeout_get_timeout(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDecodeError_ty_from_ptr")] public static extern long LDKDecodeError_ty_from_ptr(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDecodeError_Io_get_io")] public static extern IOError LDKDecodeError_Io_get_io(long ptr);
        // struct LDKRetry CResult_RetryDecodeErrorZ_get_ok(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RetryDecodeErrorZ_get_ok")] public static extern long CResult_RetryDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_RetryDecodeErrorZ_get_err(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner);
@@ -103,10 +107,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesNoneZ_get_ok")] public static extern long CResult_ThirtyTwoBytesNoneZ_get_ok(long _owner);
        // void CResult_ThirtyTwoBytesNoneZ_get_err(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesNoneZ_get_err")] public static extern void CResult_ThirtyTwoBytesNoneZ_get_err(long _owner);
-       // struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_ok")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_get_ok(long _owner);
-       // struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_err")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_get_err(long _owner);
+       // struct LDKBolt12Invoice CResult_Bolt12InvoiceDecodeErrorZ_get_ok(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_get_ok")] public static extern long CResult_Bolt12InvoiceDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_Bolt12InvoiceDecodeErrorZ_get_err(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_get_err")] public static extern long CResult_Bolt12InvoiceDecodeErrorZ_get_err(long _owner);
        // struct LDKDelayedPaymentOutputDescriptor CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok")] public static extern long CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_err(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR owner);
@@ -143,14 +147,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_get_ok")] public static extern long CResult_HTLCDescriptorDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_HTLCDescriptorDecodeErrorZ_get_err(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_get_err")] public static extern long CResult_HTLCDescriptorDecodeErrorZ_get_err(long _owner);
-       // void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_get_ok")] public static extern void CResult_NoneNoneZ_get_ok(long _owner);
-       // void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_get_err")] public static extern void CResult_NoneNoneZ_get_err(long _owner);
        // struct LDKPublicKey CResult_PublicKeyNoneZ_get_ok(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PublicKeyNoneZ_get_ok")] public static extern long CResult_PublicKeyNoneZ_get_ok(long _owner);
        // void CResult_PublicKeyNoneZ_get_err(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PublicKeyNoneZ_get_err")] public static extern void CResult_PublicKeyNoneZ_get_err(long _owner);
+       // struct LDKThirtyTwoBytes CResult__u832NoneZ_get_ok(LDKCResult__u832NoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_get_ok")] public static extern long CResult__u832NoneZ_get_ok(long _owner);
+       // void CResult__u832NoneZ_get_err(LDKCResult__u832NoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_get_err")] public static extern void CResult__u832NoneZ_get_err(long _owner);
+       // void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_get_ok")] public static extern void CResult_NoneNoneZ_get_ok(long _owner);
+       // void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_get_err")] public static extern void CResult_NoneNoneZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_BigEndianScalarZ_ty_from_ptr")] public static extern long LDKCOption_BigEndianScalarZ_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_BigEndianScalarZ_Some_get_some")] public static extern long LDKCOption_BigEndianScalarZ_Some_get_some(long ptr);
        // struct LDKRecoverableSignature CResult_RecoverableSignatureNoneZ_get_ok(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner);
@@ -198,9 +206,9 @@ internal class bindings {
                ret[1] = i;
                return ret;
        }
-       // LDKPublicKey ChannelSigner_get_per_commitment_point LDKChannelSigner *NONNULL_PTR this_arg, uint64_t idx
+       // LDKCResult_PublicKeyNoneZ ChannelSigner_get_per_commitment_point LDKChannelSigner *NONNULL_PTR this_arg, uint64_t idx
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelSigner_get_per_commitment_point")] public static extern long ChannelSigner_get_per_commitment_point(long _this_arg, long _idx);
-       // LDKThirtyTwoBytes ChannelSigner_release_commitment_secret LDKChannelSigner *NONNULL_PTR this_arg, uint64_t idx
+       // LDKCResult__u832NoneZ ChannelSigner_release_commitment_secret LDKChannelSigner *NONNULL_PTR this_arg, uint64_t idx
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelSigner_release_commitment_secret")] public static extern long ChannelSigner_release_commitment_secret(long _this_arg, long _idx);
        // LDKCResult_NoneNoneZ ChannelSigner_validate_holder_commitment LDKChannelSigner *NONNULL_PTR this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR holder_tx, struct LDKCVec_ThirtyTwoBytesZ outbound_htlc_preimages
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelSigner_validate_holder_commitment")] public static extern long ChannelSigner_validate_holder_commitment(long _this_arg, long _holder_tx, long _outbound_htlc_preimages);
@@ -258,32 +266,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EcdsaChannelSigner_sign_holder_anchor_input")] public static extern long EcdsaChannelSigner_sign_holder_anchor_input(long _this_arg, long _anchor_tx, long _input);
        // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_channel_announcement_with_funding_key LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR msg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EcdsaChannelSigner_sign_channel_announcement_with_funding_key")] public static extern long EcdsaChannelSigner_sign_channel_announcement_with_funding_key(long _this_arg, long _msg);
-       public interface LDKWriteableEcdsaChannelSigner {
-               long write();
-       }
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKWriteableEcdsaChannelSigner_new")] public static extern long LDKWriteableEcdsaChannelSigner_new_native(long impl_idx, long EcdsaChannelSigner, long ChannelSigner, long pubkeys);
-       public static long[] LDKWriteableEcdsaChannelSigner_new(LDKWriteableEcdsaChannelSigner impl, long EcdsaChannelSigner, long ChannelSigner, long pubkeys) {
-               long new_obj_idx = js_objs.Count;
-               int i = 0;
-               for (; i < js_objs.Count; i++) {
-                       if (js_objs[i] == null || !js_objs[i].IsAlive) { new_obj_idx = i; break; }
-               }
-               if (i == js_objs.Count) {
-                       js_objs.Add(new WeakReference(impl));
-               } else {
-                       js_objs[i] = new WeakReference(impl);
-               }
-               long[] ret = new long[2];
-               ret[0] = LDKWriteableEcdsaChannelSigner_new_native(i, EcdsaChannelSigner, ChannelSigner, pubkeys);
-               ret[1] = i;
-               return ret;
-       }
-       // LDKCVec_u8Z WriteableEcdsaChannelSigner_write LDKWriteableEcdsaChannelSigner *NONNULL_PTR this_arg
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_WriteableEcdsaChannelSigner_write")] public static extern long WriteableEcdsaChannelSigner_write(long _this_arg);
-       // struct LDKWriteableEcdsaChannelSigner CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok")] public static extern long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(long _owner);
-       // struct LDKDecodeError CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err")] public static extern long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(long _owner);
+       // struct LDKEcdsaChannelSigner CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_get_ok")] public static extern long CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_EcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_get_err")] public static extern long CResult_EcdsaChannelSignerDecodeErrorZ_get_err(long _owner);
        // struct LDKCVec_u8Z CResult_CVec_u8ZNoneZ_get_ok(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_u8ZNoneZ_get_ok")] public static extern long CResult_CVec_u8ZNoneZ_get_ok(long _owner);
        // void CResult_CVec_u8ZNoneZ_get_err(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner);
@@ -419,26 +405,32 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneIOErrorZ_get_ok")] public static extern void CResult_NoneIOErrorZ_get_ok(long _owner);
        // enum LDKIOError CResult_NoneIOErrorZ_get_err(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneIOErrorZ_get_err")] public static extern IOError CResult_NoneIOErrorZ_get_err(long _owner);
+       // struct LDKThirtyTwoBytes C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(long _owner);
+       // struct LDKRecipientOnionFields C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(long _owner);
+       // struct LDKRouteParameters C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(long _owner);
+       // struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(long _owner);
+       // void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err")] public static extern void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(long _owner);
        // struct LDKRoute CResult_RouteLightningErrorZ_get_ok(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RouteLightningErrorZ_get_ok")] public static extern long CResult_RouteLightningErrorZ_get_ok(long _owner);
        // struct LDKLightningError CResult_RouteLightningErrorZ_get_err(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RouteLightningErrorZ_get_err")] public static extern long CResult_RouteLightningErrorZ_get_err(long _owner);
-       // struct LDKBlindedPayInfo C2Tuple_BlindedPayInfoBlindedPathZ_get_a(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_get_a")] public static extern long C2Tuple_BlindedPayInfoBlindedPathZ_get_a(long _owner);
-       // struct LDKBlindedPath C2Tuple_BlindedPayInfoBlindedPathZ_get_b(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_get_b")] public static extern long C2Tuple_BlindedPayInfoBlindedPathZ_get_b(long _owner);
-       // struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok")] public static extern long CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(long _owner);
-       // void CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err")] public static extern void CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_err(long _owner);
+       // struct LDKCVec_BlindedPaymentPathZ CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_get_ok")] public static extern long CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(long _owner);
+       // void CResult_CVec_BlindedPaymentPathZNoneZ_get_err(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_get_err")] public static extern void CResult_CVec_BlindedPaymentPathZNoneZ_get_err(long _owner);
        // struct LDKOnionMessagePath CResult_OnionMessagePathNoneZ_get_ok(LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OnionMessagePathNoneZ_get_ok")] public static extern long CResult_OnionMessagePathNoneZ_get_ok(long _owner);
        // void CResult_OnionMessagePathNoneZ_get_err(LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OnionMessagePathNoneZ_get_err")] public static extern void CResult_OnionMessagePathNoneZ_get_err(long _owner);
-       // struct LDKCVec_BlindedPathZ CResult_CVec_BlindedPathZNoneZ_get_ok(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_get_ok")] public static extern long CResult_CVec_BlindedPathZNoneZ_get_ok(long _owner);
-       // void CResult_CVec_BlindedPathZNoneZ_get_err(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_get_err")] public static extern void CResult_CVec_BlindedPathZNoneZ_get_err(long _owner);
+       // struct LDKCVec_BlindedMessagePathZ CResult_CVec_BlindedMessagePathZNoneZ_get_ok(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_get_ok")] public static extern long CResult_CVec_BlindedMessagePathZNoneZ_get_ok(long _owner);
+       // void CResult_CVec_BlindedMessagePathZNoneZ_get_err(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_get_err")] public static extern void CResult_CVec_BlindedMessagePathZNoneZ_get_err(long _owner);
        // struct LDKInFlightHtlcs CResult_InFlightHtlcsDecodeErrorZ_get_ok(LDKCResult_InFlightHtlcsDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InFlightHtlcsDecodeErrorZ_get_ok")] public static extern long CResult_InFlightHtlcsDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_InFlightHtlcsDecodeErrorZ_get_err(LDKCResult_InFlightHtlcsDecodeErrorZ *NONNULL_PTR owner);
@@ -537,7 +529,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ChannelMonitorUpdateStatusNoneZ_get_err")] public static extern void CResult_ChannelMonitorUpdateStatusNoneZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKClosureReason_ty_from_ptr")] public static extern long LDKClosureReason_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKClosureReason_CounterpartyForceClosed_get_peer_msg")] public static extern long LDKClosureReason_CounterpartyForceClosed_get_peer_msg(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKClosureReason_HolderForceClosed_get_broadcasted_latest_txn")] public static extern long LDKClosureReason_HolderForceClosed_get_broadcasted_latest_txn(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKClosureReason_ProcessingError_get_err")] public static extern long LDKClosureReason_ProcessingError_get_err(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKClosureReason_PeerFeerateTooLow_get_peer_feerate_sat_per_kw")] public static extern int LDKClosureReason_PeerFeerateTooLow_get_peer_feerate_sat_per_kw(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKClosureReason_PeerFeerateTooLow_get_required_feerate_sat_per_kw")] public static extern int LDKClosureReason_PeerFeerateTooLow_get_required_feerate_sat_per_kw(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMonitorEvent_ty_from_ptr")] public static extern long LDKMonitorEvent_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMonitorEvent_HTLCEvent_get_htlc_event")] public static extern long LDKMonitorEvent_HTLCEvent_get_htlc_event(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMonitorEvent_HolderForceClosedWithInfo_get_reason")] public static extern long LDKMonitorEvent_HolderForceClosedWithInfo_get_reason(long ptr);
@@ -603,6 +598,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_get_ok")] public static extern long CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_get_ok(long _owner);
        // enum LDKBolt12SemanticError CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_get_err(LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_get_err")] public static extern Bolt12SemanticError CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_get_err(long _owner);
+       // struct LDKOffer CResult_OfferDecodeErrorZ_get_ok(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_get_ok")] public static extern long CResult_OfferDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_OfferDecodeErrorZ_get_err(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_get_err")] public static extern long CResult_OfferDecodeErrorZ_get_err(long _owner);
        // struct LDKOffer CResult_OfferBolt12ParseErrorZ_get_ok(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferBolt12ParseErrorZ_get_ok")] public static extern long CResult_OfferBolt12ParseErrorZ_get_ok(long _owner);
        // struct LDKBolt12ParseError CResult_OfferBolt12ParseErrorZ_get_err(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner);
@@ -616,7 +615,6 @@ internal class bindings {
        // enum LDKSecp256k1Error CResult_PublicKeySecp256k1ErrorZ_get_err(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PublicKeySecp256k1ErrorZ_get_err")] public static extern Secp256k1Error CResult_PublicKeySecp256k1ErrorZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNetworkUpdate_ty_from_ptr")] public static extern long LDKNetworkUpdate_ty_from_ptr(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNetworkUpdate_ChannelUpdateMessage_get_msg")] public static extern long LDKNetworkUpdate_ChannelUpdateMessage_get_msg(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNetworkUpdate_ChannelFailure_get_short_channel_id")] public static extern long LDKNetworkUpdate_ChannelFailure_get_short_channel_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNetworkUpdate_ChannelFailure_get_is_permanent")] public static extern bool LDKNetworkUpdate_ChannelFailure_get_is_permanent(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNetworkUpdate_NodeFailure_get_node_id")] public static extern long LDKNetworkUpdate_NodeFailure_get_node_id(long ptr);
@@ -696,8 +694,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendFundingSigned_get_msg")] public static extern long LDKMessageSendEvent_SendFundingSigned_get_msg(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendStfu_get_node_id")] public static extern long LDKMessageSendEvent_SendStfu_get_node_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendStfu_get_msg")] public static extern long LDKMessageSendEvent_SendStfu_get_msg(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSplice_get_node_id")] public static extern long LDKMessageSendEvent_SendSplice_get_node_id(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSplice_get_msg")] public static extern long LDKMessageSendEvent_SendSplice_get_msg(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSpliceInit_get_node_id")] public static extern long LDKMessageSendEvent_SendSpliceInit_get_node_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSpliceInit_get_msg")] public static extern long LDKMessageSendEvent_SendSpliceInit_get_msg(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSpliceAck_get_node_id")] public static extern long LDKMessageSendEvent_SendSpliceAck_get_node_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSpliceAck_get_msg")] public static extern long LDKMessageSendEvent_SendSpliceAck_get_msg(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendEvent_SendSpliceLocked_get_node_id")] public static extern long LDKMessageSendEvent_SendSpliceLocked_get_node_id(long ptr);
@@ -777,6 +775,9 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSocketAddress_OnionV3_get_port")] public static extern short LDKSocketAddress_OnionV3_get_port(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSocketAddress_Hostname_get_hostname")] public static extern long LDKSocketAddress_Hostname_get_hostname(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSocketAddress_Hostname_get_port")] public static extern short LDKSocketAddress_Hostname_get_port(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNodeAnnouncementInfo_ty_from_ptr")] public static extern long LDKNodeAnnouncementInfo_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNodeAnnouncementInfo_Relayed_get_relayed")] public static extern long LDKNodeAnnouncementInfo_Relayed_get_relayed(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKNodeAnnouncementInfo_Local_get_local")] public static extern long LDKNodeAnnouncementInfo_Local_get_local(long ptr);
        // struct LDKNodeAnnouncementInfo CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok")] public static extern long CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_NodeAnnouncementInfoDecodeErrorZ_get_err(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR owner);
@@ -785,6 +786,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeAliasDecodeErrorZ_get_ok")] public static extern long CResult_NodeAliasDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_NodeAliasDecodeErrorZ_get_err(LDKCResult_NodeAliasDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeAliasDecodeErrorZ_get_err")] public static extern long CResult_NodeAliasDecodeErrorZ_get_err(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_NodeAnnouncementInfoZ_ty_from_ptr")] public static extern long LDKCOption_NodeAnnouncementInfoZ_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_NodeAnnouncementInfoZ_Some_get_some")] public static extern long LDKCOption_NodeAnnouncementInfoZ_Some_get_some(long ptr);
        // struct LDKNodeInfo CResult_NodeInfoDecodeErrorZ_get_ok(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeInfoDecodeErrorZ_get_ok")] public static extern long CResult_NodeInfoDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_NodeInfoDecodeErrorZ_get_err(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR owner);
@@ -893,21 +896,54 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_get_ok")] public static extern long CResult_ThirtyTwoBytesAPIErrorZ_get_ok(long _owner);
        // struct LDKAPIError CResult_ThirtyTwoBytesAPIErrorZ_get_err(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_get_err")] public static extern long CResult_ThirtyTwoBytesAPIErrorZ_get_err(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersContext_ty_from_ptr")] public static extern long LDKOffersContext_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersContext_InvoiceRequest_get_nonce")] public static extern long LDKOffersContext_InvoiceRequest_get_nonce(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersContext_OutboundPayment_get_payment_id")] public static extern long LDKOffersContext_OutboundPayment_get_payment_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersContext_OutboundPayment_get_nonce")] public static extern long LDKOffersContext_OutboundPayment_get_nonce(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersContext_OutboundPayment_get_hmac")] public static extern long LDKOffersContext_OutboundPayment_get_hmac(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersContext_InboundPayment_get_payment_hash")] public static extern long LDKOffersContext_InboundPayment_get_payment_hash(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_OffersContextZ_ty_from_ptr")] public static extern long LDKCOption_OffersContextZ_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_OffersContextZ_Some_get_some")] public static extern long LDKCOption_OffersContextZ_Some_get_some(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersMessage_ty_from_ptr")] public static extern long LDKOffersMessage_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersMessage_InvoiceRequest_get_invoice_request")] public static extern long LDKOffersMessage_InvoiceRequest_get_invoice_request(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersMessage_Invoice_get_invoice")] public static extern long LDKOffersMessage_Invoice_get_invoice(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersMessage_InvoiceError_get_invoice_error")] public static extern long LDKOffersMessage_InvoiceError_get_invoice_error(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_OffersMessageZ_ty_from_ptr")] public static extern long LDKCOption_OffersMessageZ_ty_from_ptr(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_OffersMessageZ_Some_get_some")] public static extern long LDKCOption_OffersMessageZ_Some_get_some(long ptr);
+       // struct LDKOffersMessage C2Tuple_OffersMessageResponseInstructionZ_get_a(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_get_a")] public static extern long C2Tuple_OffersMessageResponseInstructionZ_get_a(long _owner);
+       // struct LDKResponseInstruction C2Tuple_OffersMessageResponseInstructionZ_get_b(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_get_b")] public static extern long C2Tuple_OffersMessageResponseInstructionZ_get_b(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_ty_from_ptr")] public static extern long LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some_get_some")] public static extern long LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some_get_some(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDestination_ty_from_ptr")] public static extern long LDKDestination_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDestination_Node_get_node")] public static extern long LDKDestination_Node_get_node(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKDestination_BlindedPath_get_blinded_path")] public static extern long LDKDestination_BlindedPath_get_blinded_path(long ptr);
-       // struct LDKOffersMessage C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_a")] public static extern long C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(long _owner);
-       // struct LDKDestination C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_b")] public static extern long C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(long _owner);
-       // struct LDKBlindedPath C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_get_c")] public static extern long C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageContext_ty_from_ptr")] public static extern long LDKMessageContext_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageContext_Offers_get_offers")] public static extern long LDKMessageContext_Offers_get_offers(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageContext_Custom_get_custom")] public static extern long LDKMessageContext_Custom_get_custom(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_ty_from_ptr")] public static extern long LDKMessageSendInstructions_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_WithSpecifiedReplyPath_get_destination")] public static extern long LDKMessageSendInstructions_WithSpecifiedReplyPath_get_destination(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_WithSpecifiedReplyPath_get_reply_path")] public static extern long LDKMessageSendInstructions_WithSpecifiedReplyPath_get_reply_path(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_WithReplyPath_get_destination")] public static extern long LDKMessageSendInstructions_WithReplyPath_get_destination(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_WithReplyPath_get_context")] public static extern long LDKMessageSendInstructions_WithReplyPath_get_context(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_WithoutReplyPath_get_destination")] public static extern long LDKMessageSendInstructions_WithoutReplyPath_get_destination(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageSendInstructions_ForReply_get_instructions")] public static extern long LDKMessageSendInstructions_ForReply_get_instructions(long ptr);
+       // struct LDKOffersMessage C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_get_a")] public static extern long C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(long _owner);
+       // struct LDKMessageSendInstructions C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_get_b")] public static extern long C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(long _owner);
+       // struct LDKReleaseHeldHtlc C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a")] public static extern long C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(long _owner);
+       // struct LDKResponseInstruction C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b")] public static extern long C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_ty_from_ptr")] public static extern long LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some_get_some")] public static extern long LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some_get_some(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKAsyncPaymentsMessage_ty_from_ptr")] public static extern long LDKAsyncPaymentsMessage_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKAsyncPaymentsMessage_HeldHtlcAvailable_get_held_htlc_available")] public static extern long LDKAsyncPaymentsMessage_HeldHtlcAvailable_get_held_htlc_available(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKAsyncPaymentsMessage_ReleaseHeldHtlc_get_release_held_htlc")] public static extern long LDKAsyncPaymentsMessage_ReleaseHeldHtlc_get_release_held_htlc(long ptr);
+       // struct LDKAsyncPaymentsMessage C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a")] public static extern long C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(long _owner);
+       // struct LDKMessageSendInstructions C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b")] public static extern long C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(long _owner);
        // struct LDKPhantomRouteHints CResult_PhantomRouteHintsDecodeErrorZ_get_ok(LDKCResult_PhantomRouteHintsDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PhantomRouteHintsDecodeErrorZ_get_ok")] public static extern long CResult_PhantomRouteHintsDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_PhantomRouteHintsDecodeErrorZ_get_err(LDKCResult_PhantomRouteHintsDecodeErrorZ *NONNULL_PTR owner);
@@ -1025,7 +1061,7 @@ internal class bindings {
                long get_inbound_payment_key_material();
                long get_node_id(Recipient recipient);
                long ecdh(Recipient recipient, long other_key, long tweak);
-               long sign_invoice(long hrp_bytes, long invoice_data, Recipient recipient);
+               long sign_invoice(long invoice, Recipient recipient);
                long sign_bolt12_invoice_request(long invoice_request);
                long sign_bolt12_invoice(long invoice);
                long sign_gossip_message(long msg);
@@ -1053,8 +1089,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeSigner_get_node_id")] public static extern long NodeSigner_get_node_id(long _this_arg, Recipient _recipient);
        // LDKCResult_ThirtyTwoBytesNoneZ NodeSigner_ecdh LDKNodeSigner *NONNULL_PTR this_arg, enum LDKRecipient recipient, struct LDKPublicKey other_key, struct LDKCOption_BigEndianScalarZ tweak
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeSigner_ecdh")] public static extern long NodeSigner_ecdh(long _this_arg, Recipient _recipient, long _other_key, long _tweak);
-       // LDKCResult_RecoverableSignatureNoneZ NodeSigner_sign_invoice LDKNodeSigner *NONNULL_PTR this_arg, struct LDKu8slice hrp_bytes, struct LDKCVec_U5Z invoice_data, enum LDKRecipient recipient
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeSigner_sign_invoice")] public static extern long NodeSigner_sign_invoice(long _this_arg, long _hrp_bytes, long _invoice_data, Recipient _recipient);
+       // LDKCResult_RecoverableSignatureNoneZ NodeSigner_sign_invoice LDKNodeSigner *NONNULL_PTR this_arg, const struct LDKRawBolt11Invoice *NONNULL_PTR invoice, enum LDKRecipient recipient
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeSigner_sign_invoice")] public static extern long NodeSigner_sign_invoice(long _this_arg, long _invoice, Recipient _recipient);
        // LDKCResult_SchnorrSignatureNoneZ NodeSigner_sign_bolt12_invoice_request LDKNodeSigner *NONNULL_PTR this_arg, const struct LDKUnsignedInvoiceRequest *NONNULL_PTR invoice_request
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeSigner_sign_bolt12_invoice_request")] public static extern long NodeSigner_sign_bolt12_invoice_request(long _this_arg, long _invoice_request);
        // LDKCResult_SchnorrSignatureNoneZ NodeSigner_sign_bolt12_invoice LDKNodeSigner *NONNULL_PTR this_arg, const struct LDKUnsignedBolt12Invoice *NONNULL_PTR invoice
@@ -1087,9 +1123,9 @@ internal class bindings {
        }
        // LDKThirtyTwoBytes SignerProvider_generate_channel_keys_id LDKSignerProvider *NONNULL_PTR this_arg, bool inbound, uint64_t channel_value_satoshis, struct LDKU128 user_channel_id
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignerProvider_generate_channel_keys_id")] public static extern long SignerProvider_generate_channel_keys_id(long _this_arg, bool _inbound, long _channel_value_satoshis, long _user_channel_id);
-       // LDKWriteableEcdsaChannelSigner SignerProvider_derive_channel_signer LDKSignerProvider *NONNULL_PTR this_arg, uint64_t channel_value_satoshis, struct LDKThirtyTwoBytes channel_keys_id
+       // LDKEcdsaChannelSigner SignerProvider_derive_channel_signer LDKSignerProvider *NONNULL_PTR this_arg, uint64_t channel_value_satoshis, struct LDKThirtyTwoBytes channel_keys_id
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignerProvider_derive_channel_signer")] public static extern long SignerProvider_derive_channel_signer(long _this_arg, long _channel_value_satoshis, long _channel_keys_id);
-       // LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ SignerProvider_read_chan_signer LDKSignerProvider *NONNULL_PTR this_arg, struct LDKu8slice reader
+       // LDKCResult_EcdsaChannelSignerDecodeErrorZ SignerProvider_read_chan_signer LDKSignerProvider *NONNULL_PTR this_arg, struct LDKu8slice reader
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignerProvider_read_chan_signer")] public static extern long SignerProvider_read_chan_signer(long _this_arg, long _reader);
        // LDKCResult_CVec_u8ZNoneZ SignerProvider_get_destination_script LDKSignerProvider *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes channel_keys_id
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignerProvider_get_destination_script")] public static extern long SignerProvider_get_destination_script(long _this_arg, long _channel_keys_id);
@@ -1119,7 +1155,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FeeEstimator_get_est_sat_per_1000_weight")] public static extern int FeeEstimator_get_est_sat_per_1000_weight(long _this_arg, ConfirmationTarget _confirmation_target);
        public interface LDKMessageRouter {
                long find_path(long sender, long peers, long destination);
-               long create_blinded_paths(long recipient, long peers);
+               long create_blinded_paths(long recipient, long context, long peers);
+               long create_compact_blinded_paths(long recipient, long context, long peers);
        }
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKMessageRouter_new")] public static extern long LDKMessageRouter_new_native(long impl_idx);
        public static long[] LDKMessageRouter_new(LDKMessageRouter impl) {
@@ -1140,8 +1177,10 @@ internal class bindings {
        }
        // LDKCResult_OnionMessagePathNoneZ MessageRouter_find_path LDKMessageRouter *NONNULL_PTR this_arg, struct LDKPublicKey sender, struct LDKCVec_PublicKeyZ peers, struct LDKDestination destination
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageRouter_find_path")] public static extern long MessageRouter_find_path(long _this_arg, long _sender, long _peers, long _destination);
-       // LDKCResult_CVec_BlindedPathZNoneZ MessageRouter_create_blinded_paths LDKMessageRouter *NONNULL_PTR this_arg, struct LDKPublicKey recipient, struct LDKCVec_PublicKeyZ peers
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageRouter_create_blinded_paths")] public static extern long MessageRouter_create_blinded_paths(long _this_arg, long _recipient, long _peers);
+       // LDKCResult_CVec_BlindedMessagePathZNoneZ MessageRouter_create_blinded_paths LDKMessageRouter *NONNULL_PTR this_arg, struct LDKPublicKey recipient, struct LDKMessageContext context, struct LDKCVec_PublicKeyZ peers
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageRouter_create_blinded_paths")] public static extern long MessageRouter_create_blinded_paths(long _this_arg, long _recipient, long _context, long _peers);
+       // LDKCResult_CVec_BlindedMessagePathZNoneZ MessageRouter_create_compact_blinded_paths LDKMessageRouter *NONNULL_PTR this_arg, struct LDKPublicKey recipient, struct LDKMessageContext context, struct LDKCVec_MessageForwardNodeZ peers
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageRouter_create_compact_blinded_paths")] public static extern long MessageRouter_create_compact_blinded_paths(long _this_arg, long _recipient, long _context, long _peers);
        public interface LDKRouter {
                long find_route(long payer, long route_params, long first_hops, long inflight_htlcs);
                long find_route_with_id(long payer, long route_params, long first_hops, long inflight_htlcs, long _payment_hash, long _payment_id);
@@ -1168,7 +1207,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Router_find_route")] public static extern long Router_find_route(long _this_arg, long _payer, long _route_params, long _first_hops, long _inflight_htlcs);
        // LDKCResult_RouteLightningErrorZ Router_find_route_with_id LDKRouter *NONNULL_PTR this_arg, struct LDKPublicKey payer, const struct LDKRouteParameters *NONNULL_PTR route_params, struct LDKCVec_ChannelDetailsZ *first_hops, struct LDKInFlightHtlcs inflight_htlcs, struct LDKThirtyTwoBytes _payment_hash, struct LDKThirtyTwoBytes _payment_id
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Router_find_route_with_id")] public static extern long Router_find_route_with_id(long _this_arg, long _payer, long _route_params, long _first_hops, long _inflight_htlcs, long __payment_hash, long __payment_id);
-       // LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ Router_create_blinded_payment_paths LDKRouter *NONNULL_PTR this_arg, struct LDKPublicKey recipient, struct LDKCVec_ChannelDetailsZ first_hops, struct LDKReceiveTlvs tlvs, uint64_t amount_msats
+       // LDKCResult_CVec_BlindedPaymentPathZNoneZ Router_create_blinded_payment_paths LDKRouter *NONNULL_PTR this_arg, struct LDKPublicKey recipient, struct LDKCVec_ChannelDetailsZ first_hops, struct LDKReceiveTlvs tlvs, uint64_t amount_msats
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Router_create_blinded_payment_paths")] public static extern long Router_create_blinded_payment_paths(long _this_arg, long _recipient, long _first_hops, long _tlvs, long _amount_msats);
        // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a")] public static extern long C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(long _owner);
@@ -1223,6 +1262,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a")] public static extern long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(long _owner);
        // struct LDKCVec_C2Tuple_u32CVec_u8ZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b")] public static extern long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(long _owner);
+       // void CResult_NoneReplayEventZ_get_ok(LDKCResult_NoneReplayEventZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_get_ok")] public static extern void CResult_NoneReplayEventZ_get_ok(long _owner);
+       // struct LDKReplayEvent CResult_NoneReplayEventZ_get_err(LDKCResult_NoneReplayEventZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_get_err")] public static extern long CResult_NoneReplayEventZ_get_err(long _owner);
        // uint32_t C2Tuple_u32TxOutZ_get_a(LDKC2Tuple_u32TxOutZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_u32TxOutZ_get_a")] public static extern int C2Tuple_u32TxOutZ_get_a(long _owner);
        // struct LDKTxOut C2Tuple_u32TxOutZ_get_b(LDKC2Tuple_u32TxOutZ *NONNULL_PTR owner);
@@ -1233,8 +1276,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b")] public static extern long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ty_from_ptr")] public static extern long LDKBalance_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableOnChannelClose_get_amount_satoshis")] public static extern long LDKBalance_ClaimableOnChannelClose_get_amount_satoshis(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableOnChannelClose_get_transaction_fee_satoshis")] public static extern long LDKBalance_ClaimableOnChannelClose_get_transaction_fee_satoshis(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableOnChannelClose_get_outbound_payment_htlc_rounded_msat")] public static extern long LDKBalance_ClaimableOnChannelClose_get_outbound_payment_htlc_rounded_msat(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableOnChannelClose_get_outbound_forwarded_htlc_rounded_msat")] public static extern long LDKBalance_ClaimableOnChannelClose_get_outbound_forwarded_htlc_rounded_msat(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableOnChannelClose_get_inbound_claiming_htlc_rounded_msat")] public static extern long LDKBalance_ClaimableOnChannelClose_get_inbound_claiming_htlc_rounded_msat(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableOnChannelClose_get_inbound_htlc_rounded_msat")] public static extern long LDKBalance_ClaimableOnChannelClose_get_inbound_htlc_rounded_msat(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_amount_satoshis")] public static extern long LDKBalance_ClaimableAwaitingConfirmations_get_amount_satoshis(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_confirmation_height")] public static extern int LDKBalance_ClaimableAwaitingConfirmations_get_confirmation_height(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ClaimableAwaitingConfirmations_get_source")] public static extern BalanceSource LDKBalance_ClaimableAwaitingConfirmations_get_source(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ContentiousClaimable_get_amount_satoshis")] public static extern long LDKBalance_ContentiousClaimable_get_amount_satoshis(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ContentiousClaimable_get_timeout_height")] public static extern int LDKBalance_ContentiousClaimable_get_timeout_height(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_ContentiousClaimable_get_payment_hash")] public static extern long LDKBalance_ContentiousClaimable_get_payment_hash(long ptr);
@@ -1242,6 +1291,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_amount_satoshis")] public static extern long LDKBalance_MaybeTimeoutClaimableHTLC_get_amount_satoshis(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_claimable_height")] public static extern int LDKBalance_MaybeTimeoutClaimableHTLC_get_claimable_height(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_payment_hash")] public static extern long LDKBalance_MaybeTimeoutClaimableHTLC_get_payment_hash(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybeTimeoutClaimableHTLC_get_outbound_payment")] public static extern bool LDKBalance_MaybeTimeoutClaimableHTLC_get_outbound_payment(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybePreimageClaimableHTLC_get_amount_satoshis")] public static extern long LDKBalance_MaybePreimageClaimableHTLC_get_amount_satoshis(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybePreimageClaimableHTLC_get_expiry_height")] public static extern int LDKBalance_MaybePreimageClaimableHTLC_get_expiry_height(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBalance_MaybePreimageClaimableHTLC_get_payment_hash")] public static extern long LDKBalance_MaybePreimageClaimableHTLC_get_payment_hash(long ptr);
@@ -1286,12 +1336,9 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyTypeZ_get_a")] public static extern long C2Tuple_PublicKeyTypeZ_get_a(long _owner);
        // struct LDKType C2Tuple_PublicKeyTypeZ_get_b(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyTypeZ_get_b")] public static extern long C2Tuple_PublicKeyTypeZ_get_b(long _owner);
-       // struct LDKPublicKey C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a")] public static extern long C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(long _owner);
-       // struct LDKCVec_SocketAddressZ C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b")] public static extern long C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(long _owner);
        public interface LDKOnionMessageContents {
                long tlv_type();
+               long msg_type();
                long write();
                long debug_str();
        }
@@ -1314,22 +1361,28 @@ internal class bindings {
        }
        // uint64_t OnionMessageContents_tlv_type LDKOnionMessageContents *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageContents_tlv_type")] public static extern long OnionMessageContents_tlv_type(long _this_arg);
+       // LDKStr OnionMessageContents_msg_type LDKOnionMessageContents *NONNULL_PTR this_arg
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageContents_msg_type")] public static extern long OnionMessageContents_msg_type(long _this_arg);
        // LDKCVec_u8Z OnionMessageContents_write LDKOnionMessageContents *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageContents_write")] public static extern long OnionMessageContents_write(long _this_arg);
        // LDKStr OnionMessageContents_debug_str LDKOnionMessageContents *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageContents_debug_str")] public static extern long OnionMessageContents_debug_str(long _this_arg);
+       // struct LDKOnionMessageContents C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_get_a")] public static extern long C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(long _owner);
+       // struct LDKResponseInstruction C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_get_b")] public static extern long C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_ty_from_ptr")] public static extern long LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some_get_some")] public static extern long LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some_get_some(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_OnionMessageContentsZ_ty_from_ptr")] public static extern long LDKCOption_OnionMessageContentsZ_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_OnionMessageContentsZ_Some_get_some")] public static extern long LDKCOption_OnionMessageContentsZ_Some_get_some(long ptr);
        // struct LDKCOption_OnionMessageContentsZ CResult_COption_OnionMessageContentsZDecodeErrorZ_get_ok(LDKCResult_COption_OnionMessageContentsZDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_get_ok")] public static extern long CResult_COption_OnionMessageContentsZDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_COption_OnionMessageContentsZDecodeErrorZ_get_err(LDKCResult_COption_OnionMessageContentsZDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_get_err")] public static extern long CResult_COption_OnionMessageContentsZDecodeErrorZ_get_err(long _owner);
-       // struct LDKOnionMessageContents C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a")] public static extern long C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(long _owner);
-       // struct LDKDestination C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b")] public static extern long C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(long _owner);
-       // struct LDKBlindedPath C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c")] public static extern long C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(long _owner);
+       // struct LDKOnionMessageContents C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a")] public static extern long C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(long _owner);
+       // struct LDKMessageSendInstructions C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b")] public static extern long C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_TypeZ_ty_from_ptr")] public static extern long LDKCOption_TypeZ_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_TypeZ_Some_get_some")] public static extern long LDKCOption_TypeZ_Some_get_some(long ptr);
        // struct LDKCOption_TypeZ CResult_COption_TypeZDecodeErrorZ_get_ok(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR owner);
@@ -1381,8 +1434,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_get_ok")] public static extern long CResult_InvoiceRequestBolt12SemanticErrorZ_get_ok(long _owner);
        // enum LDKBolt12SemanticError CResult_InvoiceRequestBolt12SemanticErrorZ_get_err(LDKCResult_InvoiceRequestBolt12SemanticErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_get_err")] public static extern Bolt12SemanticError CResult_InvoiceRequestBolt12SemanticErrorZ_get_err(long _owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_SecretKeyZ_ty_from_ptr")] public static extern long LDKCOption_SecretKeyZ_ty_from_ptr(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_SecretKeyZ_Some_get_some")] public static extern long LDKCOption_SecretKeyZ_Some_get_some(long ptr);
        // struct LDKInvoiceWithExplicitSigningPubkeyBuilder CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_get_ok(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_get_ok")] public static extern long CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_get_ok(long _owner);
        // enum LDKBolt12SemanticError CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_get_err(LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ *NONNULL_PTR owner);
@@ -1423,10 +1474,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StfuDecodeErrorZ_get_ok")] public static extern long CResult_StfuDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_StfuDecodeErrorZ_get_err(LDKCResult_StfuDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StfuDecodeErrorZ_get_err")] public static extern long CResult_StfuDecodeErrorZ_get_err(long _owner);
-       // struct LDKSplice CResult_SpliceDecodeErrorZ_get_ok(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_get_ok")] public static extern long CResult_SpliceDecodeErrorZ_get_ok(long _owner);
-       // struct LDKDecodeError CResult_SpliceDecodeErrorZ_get_err(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_get_err")] public static extern long CResult_SpliceDecodeErrorZ_get_err(long _owner);
+       // struct LDKSpliceInit CResult_SpliceInitDecodeErrorZ_get_ok(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_get_ok")] public static extern long CResult_SpliceInitDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_SpliceInitDecodeErrorZ_get_err(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_get_err")] public static extern long CResult_SpliceInitDecodeErrorZ_get_err(long _owner);
        // struct LDKSpliceAck CResult_SpliceAckDecodeErrorZ_get_ok(LDKCResult_SpliceAckDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceAckDecodeErrorZ_get_ok")] public static extern long CResult_SpliceAckDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_SpliceAckDecodeErrorZ_get_err(LDKCResult_SpliceAckDecodeErrorZ *NONNULL_PTR owner);
@@ -1487,6 +1538,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok")] public static extern long CResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_ClosingSignedFeeRangeDecodeErrorZ_get_err(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_get_err")] public static extern long CResult_ClosingSignedFeeRangeDecodeErrorZ_get_err(long _owner);
+       // struct LDKCommitmentSignedBatch CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_get_ok")] public static extern long CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_CommitmentSignedBatchDecodeErrorZ_get_err(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_get_err")] public static extern long CResult_CommitmentSignedBatchDecodeErrorZ_get_err(long _owner);
        // struct LDKCommitmentSigned CResult_CommitmentSignedDecodeErrorZ_get_ok(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedDecodeErrorZ_get_ok")] public static extern long CResult_CommitmentSignedDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_CommitmentSignedDecodeErrorZ_get_err(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR owner);
@@ -1615,12 +1670,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_get_ok")] public static extern long CResult_GossipTimestampFilterDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_GossipTimestampFilterDecodeErrorZ_get_err(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_get_err")] public static extern long CResult_GossipTimestampFilterDecodeErrorZ_get_err(long _owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSignOrCreationError_ty_from_ptr")] public static extern long LDKSignOrCreationError_ty_from_ptr(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSignOrCreationError_CreationError_get_creation_error")] public static extern CreationError LDKSignOrCreationError_CreationError_get_creation_error(long ptr);
-       // struct LDKBolt11Invoice CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(long _owner);
-       // struct LDKSignOrCreationError CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_InboundHTLCStateDetailsZ_ty_from_ptr")] public static extern long LDKCOption_InboundHTLCStateDetailsZ_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_InboundHTLCStateDetailsZ_Some_get_some")] public static extern InboundHTLCStateDetails LDKCOption_InboundHTLCStateDetailsZ_Some_get_some(long ptr);
        // struct LDKCOption_InboundHTLCStateDetailsZ CResult_COption_InboundHTLCStateDetailsZDecodeErrorZ_get_ok(LDKCResult_COption_InboundHTLCStateDetailsZDecodeErrorZ *NONNULL_PTR owner);
@@ -1659,6 +1708,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ChannelShutdownStateDecodeErrorZ_get_ok")] public static extern ChannelShutdownState CResult_ChannelShutdownStateDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_ChannelShutdownStateDecodeErrorZ_get_err(LDKCResult_ChannelShutdownStateDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ChannelShutdownStateDecodeErrorZ_get_err")] public static extern long CResult_ChannelShutdownStateDecodeErrorZ_get_err(long _owner);
+       // struct LDKHeldHtlcAvailable CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_get_ok")] public static extern long CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_HeldHtlcAvailableDecodeErrorZ_get_err(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_get_err")] public static extern long CResult_HeldHtlcAvailableDecodeErrorZ_get_err(long _owner);
+       // struct LDKReleaseHeldHtlc CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok")] public static extern long CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_get_err")] public static extern long CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(long _owner);
+       // struct LDKAsyncPaymentsMessage CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok")] public static extern long CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_get_err")] public static extern long CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(long _owner);
        // struct LDKOffersMessage CResult_OffersMessageDecodeErrorZ_get_ok(LDKCResult_OffersMessageDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersMessageDecodeErrorZ_get_ok")] public static extern long CResult_OffersMessageDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_OffersMessageDecodeErrorZ_get_err(LDKCResult_OffersMessageDecodeErrorZ *NONNULL_PTR owner);
@@ -1723,6 +1784,13 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ShutdownScriptInvalidShutdownScriptZ_get_ok")] public static extern long CResult_ShutdownScriptInvalidShutdownScriptZ_get_ok(long _owner);
        // struct LDKInvalidShutdownScript CResult_ShutdownScriptInvalidShutdownScriptZ_get_err(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ShutdownScriptInvalidShutdownScriptZ_get_err")] public static extern long CResult_ShutdownScriptInvalidShutdownScriptZ_get_err(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKFundingInfo_ty_from_ptr")] public static extern long LDKFundingInfo_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKFundingInfo_Tx_get_transaction")] public static extern long LDKFundingInfo_Tx_get_transaction(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKFundingInfo_OutPoint_get_outpoint")] public static extern long LDKFundingInfo_OutPoint_get_outpoint(long ptr);
+       // struct LDKFundingInfo CResult_FundingInfoDecodeErrorZ_get_ok(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_get_ok")] public static extern long CResult_FundingInfoDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_FundingInfoDecodeErrorZ_get_err(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_get_err")] public static extern long CResult_FundingInfoDecodeErrorZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKPaymentPurpose_ty_from_ptr")] public static extern long LDKPaymentPurpose_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKPaymentPurpose_Bolt11InvoicePayment_get_payment_preimage")] public static extern long LDKPaymentPurpose_Bolt11InvoicePayment_get_payment_preimage(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKPaymentPurpose_Bolt11InvoicePayment_get_payment_secret")] public static extern long LDKPaymentPurpose_Bolt11InvoicePayment_get_payment_secret(long ptr);
@@ -1768,14 +1836,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_get_ok")] public static extern long CResult_COption_HTLCDestinationZDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_COption_HTLCDestinationZDecodeErrorZ_get_err(LDKCResult_COption_HTLCDestinationZDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_get_err")] public static extern long CResult_COption_HTLCDestinationZDecodeErrorZ_get_err(long _owner);
-       // enum LDKPaymentFailureReason CResult_PaymentFailureReasonDecodeErrorZ_get_ok(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_get_ok")] public static extern PaymentFailureReason CResult_PaymentFailureReasonDecodeErrorZ_get_ok(long _owner);
-       // struct LDKDecodeError CResult_PaymentFailureReasonDecodeErrorZ_get_err(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_get_err")] public static extern long CResult_PaymentFailureReasonDecodeErrorZ_get_err(long _owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_U128Z_ty_from_ptr")] public static extern long LDKCOption_U128Z_ty_from_ptr(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_U128Z_Some_get_some")] public static extern long LDKCOption_U128Z_Some_get_some(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_PaymentFailureReasonZ_ty_from_ptr")] public static extern long LDKCOption_PaymentFailureReasonZ_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_PaymentFailureReasonZ_Some_get_some")] public static extern PaymentFailureReason LDKCOption_PaymentFailureReasonZ_Some_get_some(long ptr);
+       // struct LDKCOption_PaymentFailureReasonZ CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok")] public static extern long CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err")] public static extern long CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_U128Z_ty_from_ptr")] public static extern long LDKCOption_U128Z_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_U128Z_Some_get_some")] public static extern long LDKCOption_U128Z_Some_get_some(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBumpTransactionEvent_ty_from_ptr")] public static extern long LDKBumpTransactionEvent_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBumpTransactionEvent_ChannelClose_get_channel_id")] public static extern long LDKBumpTransactionEvent_ChannelClose_get_channel_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBumpTransactionEvent_ChannelClose_get_counterparty_node_id")] public static extern long LDKBumpTransactionEvent_ChannelClose_get_counterparty_node_id(long ptr);
@@ -1797,6 +1865,11 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingGenerationReady_get_channel_value_satoshis")] public static extern long LDKEvent_FundingGenerationReady_get_channel_value_satoshis(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingGenerationReady_get_output_script")] public static extern long LDKEvent_FundingGenerationReady_get_output_script(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingGenerationReady_get_user_channel_id")] public static extern long LDKEvent_FundingGenerationReady_get_user_channel_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_channel_id")] public static extern long LDKEvent_FundingTxBroadcastSafe_get_channel_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_user_channel_id")] public static extern long LDKEvent_FundingTxBroadcastSafe_get_user_channel_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_funding_txo")] public static extern long LDKEvent_FundingTxBroadcastSafe_get_funding_txo(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_counterparty_node_id")] public static extern long LDKEvent_FundingTxBroadcastSafe_get_counterparty_node_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_FundingTxBroadcastSafe_get_former_temporary_channel_id")] public static extern long LDKEvent_FundingTxBroadcastSafe_get_former_temporary_channel_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimable_get_receiver_node_id")] public static extern long LDKEvent_PaymentClaimable_get_receiver_node_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimable_get_payment_hash")] public static extern long LDKEvent_PaymentClaimable_get_payment_hash(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimable_get_onion_fields")] public static extern long LDKEvent_PaymentClaimable_get_onion_fields(long ptr);
@@ -1812,9 +1885,13 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimed_get_purpose")] public static extern long LDKEvent_PaymentClaimed_get_purpose(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimed_get_htlcs")] public static extern long LDKEvent_PaymentClaimed_get_htlcs(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimed_get_sender_intended_total_msat")] public static extern long LDKEvent_PaymentClaimed_get_sender_intended_total_msat(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentClaimed_get_onion_fields")] public static extern long LDKEvent_PaymentClaimed_get_onion_fields(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_ConnectionNeeded_get_node_id")] public static extern long LDKEvent_ConnectionNeeded_get_node_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_ConnectionNeeded_get_addresses")] public static extern long LDKEvent_ConnectionNeeded_get_addresses(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_InvoiceRequestFailed_get_payment_id")] public static extern long LDKEvent_InvoiceRequestFailed_get_payment_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_InvoiceReceived_get_payment_id")] public static extern long LDKEvent_InvoiceReceived_get_payment_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_InvoiceReceived_get_invoice")] public static extern long LDKEvent_InvoiceReceived_get_invoice(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_InvoiceReceived_get_context")] public static extern long LDKEvent_InvoiceReceived_get_context(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_InvoiceReceived_get_responder")] public static extern long LDKEvent_InvoiceReceived_get_responder(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentSent_get_payment_id")] public static extern long LDKEvent_PaymentSent_get_payment_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentSent_get_payment_preimage")] public static extern long LDKEvent_PaymentSent_get_payment_preimage(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_PaymentSent_get_payment_hash")] public static extern long LDKEvent_PaymentSent_get_payment_hash(long ptr);
@@ -1871,21 +1948,30 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_ChannelClosed_get_channel_capacity_sats")] public static extern long LDKEvent_ChannelClosed_get_channel_capacity_sats(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_ChannelClosed_get_channel_funding_txo")] public static extern long LDKEvent_ChannelClosed_get_channel_funding_txo(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_DiscardFunding_get_channel_id")] public static extern long LDKEvent_DiscardFunding_get_channel_id(long ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_DiscardFunding_get_transaction")] public static extern long LDKEvent_DiscardFunding_get_transaction(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_DiscardFunding_get_funding_info")] public static extern long LDKEvent_DiscardFunding_get_funding_info(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_temporary_channel_id")] public static extern long LDKEvent_OpenChannelRequest_get_temporary_channel_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_counterparty_node_id")] public static extern long LDKEvent_OpenChannelRequest_get_counterparty_node_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_funding_satoshis")] public static extern long LDKEvent_OpenChannelRequest_get_funding_satoshis(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_push_msat")] public static extern long LDKEvent_OpenChannelRequest_get_push_msat(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_channel_type")] public static extern long LDKEvent_OpenChannelRequest_get_channel_type(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_is_announced")] public static extern bool LDKEvent_OpenChannelRequest_get_is_announced(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OpenChannelRequest_get_params")] public static extern long LDKEvent_OpenChannelRequest_get_params(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_HTLCHandlingFailed_get_prev_channel_id")] public static extern long LDKEvent_HTLCHandlingFailed_get_prev_channel_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_HTLCHandlingFailed_get_failed_next_destination")] public static extern long LDKEvent_HTLCHandlingFailed_get_failed_next_destination(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_BumpTransaction_get_bump_transaction")] public static extern long LDKEvent_BumpTransaction_get_bump_transaction(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OnionMessageIntercepted_get_peer_node_id")] public static extern long LDKEvent_OnionMessageIntercepted_get_peer_node_id(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OnionMessageIntercepted_get_message")] public static extern long LDKEvent_OnionMessageIntercepted_get_message(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEvent_OnionMessagePeerConnected_get_peer_node_id")] public static extern long LDKEvent_OnionMessagePeerConnected_get_peer_node_id(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_EventZ_ty_from_ptr")] public static extern long LDKCOption_EventZ_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_EventZ_Some_get_some")] public static extern long LDKCOption_EventZ_Some_get_some(long ptr);
        // struct LDKCOption_EventZ CResult_COption_EventZDecodeErrorZ_get_ok(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_EventZDecodeErrorZ_get_ok")] public static extern long CResult_COption_EventZDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_COption_EventZDecodeErrorZ_get_err(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_EventZDecodeErrorZ_get_err")] public static extern long CResult_COption_EventZDecodeErrorZ_get_err(long _owner);
+       // struct LDKNonce CResult_NonceDecodeErrorZ_get_ok(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_get_ok")] public static extern long CResult_NonceDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_NonceDecodeErrorZ_get_err(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_get_err")] public static extern long CResult_NonceDecodeErrorZ_get_err(long _owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBolt11ParseError_ty_from_ptr")] public static extern long LDKBolt11ParseError_ty_from_ptr(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBolt11ParseError_Bech32Error_get_bech32_error")] public static extern long LDKBolt11ParseError_Bech32Error_get_bech32_error(long ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBolt11ParseError_ParseAmountError_get_parse_amount_error")] public static extern int LDKBolt11ParseError_ParseAmountError_get_parse_amount_error(long ptr);
@@ -1945,6 +2031,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BigSizeDecodeErrorZ_get_ok")] public static extern long CResult_BigSizeDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_BigSizeDecodeErrorZ_get_err(LDKCResult_BigSizeDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BigSizeDecodeErrorZ_get_err")] public static extern long CResult_BigSizeDecodeErrorZ_get_err(long _owner);
+       // struct LDKUntrustedString CResult_UntrustedStringDecodeErrorZ_get_ok(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_ok")] public static extern long CResult_UntrustedStringDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_err")] public static extern long CResult_UntrustedStringDecodeErrorZ_get_err(long _owner);
        // struct LDKHostname CResult_HostnameDecodeErrorZ_get_ok(LDKCResult_HostnameDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HostnameDecodeErrorZ_get_ok")] public static extern long CResult_HostnameDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_HostnameDecodeErrorZ_get_err(LDKCResult_HostnameDecodeErrorZ *NONNULL_PTR owner);
@@ -1957,10 +2047,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_get_ok")] public static extern long CResult_TransactionU16LenLimitedDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_TransactionU16LenLimitedDecodeErrorZ_get_err(LDKCResult_TransactionU16LenLimitedDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_get_err")] public static extern long CResult_TransactionU16LenLimitedDecodeErrorZ_get_err(long _owner);
-       // struct LDKUntrustedString CResult_UntrustedStringDecodeErrorZ_get_ok(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_ok")] public static extern long CResult_UntrustedStringDecodeErrorZ_get_ok(long _owner);
-       // struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_get_err")] public static extern long CResult_UntrustedStringDecodeErrorZ_get_err(long _owner);
        // struct LDKChannelId CResult_ChannelIdDecodeErrorZ_get_ok(LDKCResult_ChannelIdDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ChannelIdDecodeErrorZ_get_ok")] public static extern long CResult_ChannelIdDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_ChannelIdDecodeErrorZ_get_err(LDKCResult_ChannelIdDecodeErrorZ *NONNULL_PTR owner);
@@ -1969,6 +2055,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple__u832u16Z_get_a")] public static extern long C2Tuple__u832u16Z_get_a(long _owner);
        // uint16_t C2Tuple__u832u16Z_get_b(LDKC2Tuple__u832u16Z *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple__u832u16Z_get_b")] public static extern short C2Tuple__u832u16Z_get_b(long _owner);
+       // struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_ok")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_get_err")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_get_err(long _owner);
+       // struct LDKBlindedPaymentPath CResult_BlindedPaymentPathNoneZ_get_ok(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_get_ok")] public static extern long CResult_BlindedPaymentPathNoneZ_get_ok(long _owner);
+       // void CResult_BlindedPaymentPathNoneZ_get_err(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_get_err")] public static extern void CResult_BlindedPaymentPathNoneZ_get_err(long _owner);
        // struct LDKPaymentRelay CResult_PaymentRelayDecodeErrorZ_get_ok(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentRelayDecodeErrorZ_get_ok")] public static extern long CResult_PaymentRelayDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_PaymentRelayDecodeErrorZ_get_err(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner);
@@ -1993,20 +2087,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_get_ok")] public static extern long CResult_Bolt12RefundContextDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_Bolt12RefundContextDecodeErrorZ_get_err(LDKCResult_Bolt12RefundContextDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_get_err")] public static extern long CResult_Bolt12RefundContextDecodeErrorZ_get_err(long _owner);
-       // struct LDKStr CResult_StrSecp256k1ErrorZ_get_ok(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_get_ok")] public static extern long CResult_StrSecp256k1ErrorZ_get_ok(long _owner);
-       // enum LDKSecp256k1Error CResult_StrSecp256k1ErrorZ_get_err(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_get_err")] public static extern Secp256k1Error CResult_StrSecp256k1ErrorZ_get_err(long _owner);
-       // struct LDKThirtyTwoBytes C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_a(long _owner);
-       // struct LDKRecipientOnionFields C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_b(long _owner);
-       // struct LDKRouteParameters C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_get_c(long _owner);
-       // struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_ok(long _owner);
-       // void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err")] public static extern void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_get_err(long _owner);
+       // struct LDKResponder CResult_ResponderDecodeErrorZ_get_ok(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_get_ok")] public static extern long CResult_ResponderDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_ResponderDecodeErrorZ_get_err(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_get_err")] public static extern long CResult_ResponderDecodeErrorZ_get_err(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_MessageContextZ_ty_from_ptr")] public static extern long LDKCOption_MessageContextZ_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKCOption_MessageContextZ_Some_get_some")] public static extern long LDKCOption_MessageContextZ_Some_get_some(long ptr);
        // struct LDKPublicKey C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_get_a(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_get_a")] public static extern long C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_get_a(long _owner);
        // struct LDKOnionMessage C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_get_b(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR owner);
@@ -2042,22 +2128,20 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SendSuccessSendErrorZ_get_ok")] public static extern long CResult_SendSuccessSendErrorZ_get_ok(long _owner);
        // struct LDKSendError CResult_SendSuccessSendErrorZ_get_err(LDKCResult_SendSuccessSendErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SendSuccessSendErrorZ_get_err")] public static extern long CResult_SendSuccessSendErrorZ_get_err(long _owner);
-       // struct LDKBlindedPath CResult_BlindedPathNoneZ_get_ok(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_get_ok")] public static extern long CResult_BlindedPathNoneZ_get_ok(long _owner);
-       // void CResult_BlindedPathNoneZ_get_err(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_get_err")] public static extern void CResult_BlindedPathNoneZ_get_err(long _owner);
-       // struct LDKC2Tuple_BlindedPayInfoBlindedPathZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok")] public static extern long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(long _owner);
-       // void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err")] public static extern void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(long _owner);
-       // struct LDKBlindedPath CResult_BlindedPathDecodeErrorZ_get_ok(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_get_ok")] public static extern long CResult_BlindedPathDecodeErrorZ_get_ok(long _owner);
-       // struct LDKDecodeError CResult_BlindedPathDecodeErrorZ_get_err(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_get_err")] public static extern long CResult_BlindedPathDecodeErrorZ_get_err(long _owner);
+       // void CResult_NoneSendErrorZ_get_ok(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_get_ok")] public static extern void CResult_NoneSendErrorZ_get_ok(long _owner);
+       // struct LDKSendError CResult_NoneSendErrorZ_get_err(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_get_err")] public static extern long CResult_NoneSendErrorZ_get_err(long _owner);
        // struct LDKBlindedHop CResult_BlindedHopDecodeErrorZ_get_ok(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedHopDecodeErrorZ_get_ok")] public static extern long CResult_BlindedHopDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_BlindedHopDecodeErrorZ_get_err(LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedHopDecodeErrorZ_get_err")] public static extern long CResult_BlindedHopDecodeErrorZ_get_err(long _owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSignOrCreationError_ty_from_ptr")] public static extern long LDKSignOrCreationError_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKSignOrCreationError_CreationError_get_creation_error")] public static extern CreationError LDKSignOrCreationError_CreationError_get_creation_error(long ptr);
+       // struct LDKBolt11Invoice CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_get_ok(long _owner);
+       // struct LDKSignOrCreationError CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_get_err(long _owner);
        // struct LDKInvoiceError CResult_InvoiceErrorDecodeErrorZ_get_ok(LDKCResult_InvoiceErrorDecodeErrorZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceErrorDecodeErrorZ_get_ok")] public static extern long CResult_InvoiceErrorDecodeErrorZ_get_ok(long _owner);
        // struct LDKDecodeError CResult_InvoiceErrorDecodeErrorZ_get_err(LDKCResult_InvoiceErrorDecodeErrorZ *NONNULL_PTR owner);
@@ -2226,10 +2310,26 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointChannelIdZ_get_a")] public static extern long C2Tuple_OutPointChannelIdZ_get_a(long _owner);
        // struct LDKChannelId C2Tuple_OutPointChannelIdZ_get_b(LDKC2Tuple_OutPointChannelIdZ *NONNULL_PTR owner);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointChannelIdZ_get_b")] public static extern long C2Tuple_OutPointChannelIdZ_get_b(long _owner);
-       // struct LDKOutPoint C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a")] public static extern long C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(long _owner);
-       // struct LDKCVec_MonitorUpdateIdZ C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b")] public static extern long C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(long _owner);
+       // struct LDKOutPoint C2Tuple_OutPointCVec_u64ZZ_get_a(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_u64ZZ_get_a")] public static extern long C2Tuple_OutPointCVec_u64ZZ_get_a(long _owner);
+       // struct LDKCVec_u64Z C2Tuple_OutPointCVec_u64ZZ_get_b(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_u64ZZ_get_b")] public static extern long C2Tuple_OutPointCVec_u64ZZ_get_b(long _owner);
+       // struct LDKBlindedMessagePath CResult_BlindedMessagePathDecodeErrorZ_get_ok(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_get_ok")] public static extern long CResult_BlindedMessagePathDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_BlindedMessagePathDecodeErrorZ_get_err(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_get_err")] public static extern long CResult_BlindedMessagePathDecodeErrorZ_get_err(long _owner);
+       // struct LDKBlindedMessagePath CResult_BlindedMessagePathNoneZ_get_ok(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_get_ok")] public static extern long CResult_BlindedMessagePathNoneZ_get_ok(long _owner);
+       // void CResult_BlindedMessagePathNoneZ_get_err(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_get_err")] public static extern void CResult_BlindedMessagePathNoneZ_get_err(long _owner);
+       // struct LDKMessageContext CResult_MessageContextDecodeErrorZ_get_ok(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_get_ok")] public static extern long CResult_MessageContextDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_MessageContextDecodeErrorZ_get_err(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_get_err")] public static extern long CResult_MessageContextDecodeErrorZ_get_err(long _owner);
+       // struct LDKOffersContext CResult_OffersContextDecodeErrorZ_get_ok(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_get_ok")] public static extern long CResult_OffersContextDecodeErrorZ_get_ok(long _owner);
+       // struct LDKDecodeError CResult_OffersContextDecodeErrorZ_get_err(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR owner);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_get_err")] public static extern long CResult_OffersContextDecodeErrorZ_get_err(long _owner);
        public interface LDKPersister {
                long persist_manager(long channel_manager);
                long persist_graph(long network_graph);
@@ -2259,8 +2359,8 @@ internal class bindings {
        // LDKCResult_NoneIOErrorZ Persister_persist_scorer LDKPersister *NONNULL_PTR this_arg, const struct LDKWriteableScore *NONNULL_PTR scorer
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persister_persist_scorer")] public static extern long Persister_persist_scorer(long _this_arg, long _scorer);
        public interface LDKPersist {
-               ChannelMonitorUpdateStatus persist_new_channel(long channel_funding_outpoint, long data, long update_id);
-               ChannelMonitorUpdateStatus update_persisted_channel(long channel_funding_outpoint, long update, long data, long update_id);
+               ChannelMonitorUpdateStatus persist_new_channel(long channel_funding_outpoint, long monitor);
+               ChannelMonitorUpdateStatus update_persisted_channel(long channel_funding_outpoint, long monitor_update, long monitor);
                void archive_persisted_channel(long channel_funding_outpoint);
        }
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKPersist_new")] public static extern long LDKPersist_new_native(long impl_idx);
@@ -2280,10 +2380,10 @@ internal class bindings {
                ret[1] = i;
                return ret;
        }
-       // LDKChannelMonitorUpdateStatus Persist_persist_new_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_funding_outpoint, const struct LDKChannelMonitor *NONNULL_PTR data, struct LDKMonitorUpdateId update_id
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persist_persist_new_channel")] public static extern ChannelMonitorUpdateStatus Persist_persist_new_channel(long _this_arg, long _channel_funding_outpoint, long _data, long _update_id);
-       // LDKChannelMonitorUpdateStatus Persist_update_persisted_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_funding_outpoint, struct LDKChannelMonitorUpdate update, const struct LDKChannelMonitor *NONNULL_PTR data, struct LDKMonitorUpdateId update_id
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persist_update_persisted_channel")] public static extern ChannelMonitorUpdateStatus Persist_update_persisted_channel(long _this_arg, long _channel_funding_outpoint, long _update, long _data, long _update_id);
+       // LDKChannelMonitorUpdateStatus Persist_persist_new_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_funding_outpoint, const struct LDKChannelMonitor *NONNULL_PTR monitor
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persist_persist_new_channel")] public static extern ChannelMonitorUpdateStatus Persist_persist_new_channel(long _this_arg, long _channel_funding_outpoint, long _monitor);
+       // LDKChannelMonitorUpdateStatus Persist_update_persisted_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_funding_outpoint, struct LDKChannelMonitorUpdate monitor_update, const struct LDKChannelMonitor *NONNULL_PTR monitor
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persist_update_persisted_channel")] public static extern ChannelMonitorUpdateStatus Persist_update_persisted_channel(long _this_arg, long _channel_funding_outpoint, long _monitor_update, long _monitor);
        // void Persist_archive_persisted_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_funding_outpoint
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persist_archive_persisted_channel")] public static extern void Persist_archive_persisted_channel(long _this_arg, long _channel_funding_outpoint);
        public interface LDKListen {
@@ -2371,7 +2471,7 @@ internal class bindings {
        // void FutureCallback_call LDKFutureCallback *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FutureCallback_call")] public static extern void FutureCallback_call(long _this_arg);
        public interface LDKEventHandler {
-               void handle_event(long _event);
+               long handle_event(long _event);
        }
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKEventHandler_new")] public static extern long LDKEventHandler_new_native(long impl_idx);
        public static long[] LDKEventHandler_new(LDKEventHandler impl) {
@@ -2390,8 +2490,8 @@ internal class bindings {
                ret[1] = i;
                return ret;
        }
-       // void EventHandler_handle_event LDKEventHandler *NONNULL_PTR this_arg, struct LDKEvent event
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EventHandler_handle_event")] public static extern void EventHandler_handle_event(long _this_arg, long _event);
+       // LDKCResult_NoneReplayEventZ EventHandler_handle_event LDKEventHandler *NONNULL_PTR this_arg, struct LDKEvent event
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EventHandler_handle_event")] public static extern long EventHandler_handle_event(long _this_arg, long _event);
        public interface LDKEventsProvider {
                void process_pending_events(long handler);
        }
@@ -2563,7 +2663,7 @@ internal class bindings {
        // LDKCOption_CVec_ThirtyTwoBytesZZ ChannelMessageHandler_get_chain_hashes LDKChannelMessageHandler *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMessageHandler_get_chain_hashes")] public static extern long ChannelMessageHandler_get_chain_hashes(long _this_arg);
        public interface LDKOffersMessageHandler {
-               long handle_message(long message);
+               long handle_message(long message, long context, long responder);
                long release_pending_messages();
        }
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKOffersMessageHandler_new")] public static extern long LDKOffersMessageHandler_new_native(long impl_idx);
@@ -2583,10 +2683,38 @@ internal class bindings {
                ret[1] = i;
                return ret;
        }
-       // LDKCOption_OffersMessageZ OffersMessageHandler_handle_message LDKOffersMessageHandler *NONNULL_PTR this_arg, struct LDKOffersMessage message
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersMessageHandler_handle_message")] public static extern long OffersMessageHandler_handle_message(long _this_arg, long _message);
-       // LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ OffersMessageHandler_release_pending_messages LDKOffersMessageHandler *NONNULL_PTR this_arg
+       // LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ OffersMessageHandler_handle_message LDKOffersMessageHandler *NONNULL_PTR this_arg, struct LDKOffersMessage message, struct LDKCOption_OffersContextZ context, struct LDKResponder responder
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersMessageHandler_handle_message")] public static extern long OffersMessageHandler_handle_message(long _this_arg, long _message, long _context, long _responder);
+       // LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ OffersMessageHandler_release_pending_messages LDKOffersMessageHandler *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersMessageHandler_release_pending_messages")] public static extern long OffersMessageHandler_release_pending_messages(long _this_arg);
+       public interface LDKAsyncPaymentsMessageHandler {
+               long held_htlc_available(long message, long responder);
+               void release_held_htlc(long message);
+               long release_pending_messages();
+       }
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKAsyncPaymentsMessageHandler_new")] public static extern long LDKAsyncPaymentsMessageHandler_new_native(long impl_idx);
+       public static long[] LDKAsyncPaymentsMessageHandler_new(LDKAsyncPaymentsMessageHandler impl) {
+               long new_obj_idx = js_objs.Count;
+               int i = 0;
+               for (; i < js_objs.Count; i++) {
+                       if (js_objs[i] == null || !js_objs[i].IsAlive) { new_obj_idx = i; break; }
+               }
+               if (i == js_objs.Count) {
+                       js_objs.Add(new WeakReference(impl));
+               } else {
+                       js_objs[i] = new WeakReference(impl);
+               }
+               long[] ret = new long[2];
+               ret[0] = LDKAsyncPaymentsMessageHandler_new_native(i);
+               ret[1] = i;
+               return ret;
+       }
+       // LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ AsyncPaymentsMessageHandler_held_htlc_available LDKAsyncPaymentsMessageHandler *NONNULL_PTR this_arg, struct LDKHeldHtlcAvailable message, struct LDKResponder responder
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessageHandler_held_htlc_available")] public static extern long AsyncPaymentsMessageHandler_held_htlc_available(long _this_arg, long _message, long _responder);
+       // void AsyncPaymentsMessageHandler_release_held_htlc LDKAsyncPaymentsMessageHandler *NONNULL_PTR this_arg, struct LDKReleaseHeldHtlc message
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessageHandler_release_held_htlc")] public static extern void AsyncPaymentsMessageHandler_release_held_htlc(long _this_arg, long _message);
+       // LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ AsyncPaymentsMessageHandler_release_pending_messages LDKAsyncPaymentsMessageHandler *NONNULL_PTR this_arg
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessageHandler_release_pending_messages")] public static extern long AsyncPaymentsMessageHandler_release_pending_messages(long _this_arg);
        public interface LDKNodeIdLookUp {
                long next_node_id(long short_channel_id);
        }
@@ -2668,7 +2796,6 @@ internal class bindings {
        // LDKInitFeatures RoutingMessageHandler_provided_init_features LDKRoutingMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingMessageHandler_provided_init_features")] public static extern long RoutingMessageHandler_provided_init_features(long _this_arg, long _their_node_id);
        public interface LDKOnionMessageHandler {
-               long get_and_clear_connections_needed();
                void handle_onion_message(long peer_node_id, long msg);
                long next_onion_message_for_peer(long peer_node_id);
                long peer_connected(long their_node_id, long init, bool inbound);
@@ -2694,8 +2821,6 @@ internal class bindings {
                ret[1] = i;
                return ret;
        }
-       // LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ OnionMessageHandler_get_and_clear_connections_needed LDKOnionMessageHandler *NONNULL_PTR this_arg
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageHandler_get_and_clear_connections_needed")] public static extern long OnionMessageHandler_get_and_clear_connections_needed(long _this_arg);
        // void OnionMessageHandler_handle_onion_message LDKOnionMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey peer_node_id, const struct LDKOnionMessage *NONNULL_PTR msg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageHandler_handle_onion_message")] public static extern void OnionMessageHandler_handle_onion_message(long _this_arg, long _peer_node_id, long _msg);
        // LDKOnionMessage OnionMessageHandler_next_onion_message_for_peer LDKOnionMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey peer_node_id
@@ -2735,6 +2860,8 @@ internal class bindings {
        public interface LDKCustomMessageHandler {
                long handle_custom_message(long msg, long sender_node_id);
                long get_and_clear_pending_msg();
+               void peer_disconnected(long their_node_id);
+               long peer_connected(long their_node_id, long msg, bool inbound);
                long provided_node_features();
                long provided_init_features(long their_node_id);
        }
@@ -2759,12 +2886,16 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomMessageHandler_handle_custom_message")] public static extern long CustomMessageHandler_handle_custom_message(long _this_arg, long _msg, long _sender_node_id);
        // LDKCVec_C2Tuple_PublicKeyTypeZZ CustomMessageHandler_get_and_clear_pending_msg LDKCustomMessageHandler *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomMessageHandler_get_and_clear_pending_msg")] public static extern long CustomMessageHandler_get_and_clear_pending_msg(long _this_arg);
+       // void CustomMessageHandler_peer_disconnected LDKCustomMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomMessageHandler_peer_disconnected")] public static extern void CustomMessageHandler_peer_disconnected(long _this_arg, long _their_node_id);
+       // LDKCResult_NoneNoneZ CustomMessageHandler_peer_connected LDKCustomMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id, const struct LDKInit *NONNULL_PTR msg, bool inbound
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomMessageHandler_peer_connected")] public static extern long CustomMessageHandler_peer_connected(long _this_arg, long _their_node_id, long _msg, bool _inbound);
        // LDKNodeFeatures CustomMessageHandler_provided_node_features LDKCustomMessageHandler *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomMessageHandler_provided_node_features")] public static extern long CustomMessageHandler_provided_node_features(long _this_arg);
        // LDKInitFeatures CustomMessageHandler_provided_init_features LDKCustomMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomMessageHandler_provided_init_features")] public static extern long CustomMessageHandler_provided_init_features(long _this_arg, long _their_node_id);
        public interface LDKCustomOnionMessageHandler {
-               long handle_custom_message(long msg);
+               long handle_custom_message(long message, long context, long responder);
                long read_custom_message(long message_type, long buffer);
                long release_pending_custom_messages();
        }
@@ -2785,11 +2916,11 @@ internal class bindings {
                ret[1] = i;
                return ret;
        }
-       // LDKCOption_OnionMessageContentsZ CustomOnionMessageHandler_handle_custom_message LDKCustomOnionMessageHandler *NONNULL_PTR this_arg, struct LDKOnionMessageContents msg
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomOnionMessageHandler_handle_custom_message")] public static extern long CustomOnionMessageHandler_handle_custom_message(long _this_arg, long _msg);
+       // LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ CustomOnionMessageHandler_handle_custom_message LDKCustomOnionMessageHandler *NONNULL_PTR this_arg, struct LDKOnionMessageContents message, struct LDKCOption_CVec_u8ZZ context, struct LDKResponder responder
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomOnionMessageHandler_handle_custom_message")] public static extern long CustomOnionMessageHandler_handle_custom_message(long _this_arg, long _message, long _context, long _responder);
        // LDKCResult_COption_OnionMessageContentsZDecodeErrorZ CustomOnionMessageHandler_read_custom_message LDKCustomOnionMessageHandler *NONNULL_PTR this_arg, uint64_t message_type, struct LDKu8slice buffer
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomOnionMessageHandler_read_custom_message")] public static extern long CustomOnionMessageHandler_read_custom_message(long _this_arg, long _message_type, long _buffer);
-       // LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ CustomOnionMessageHandler_release_pending_custom_messages LDKCustomOnionMessageHandler *NONNULL_PTR this_arg
+       // LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ CustomOnionMessageHandler_release_pending_custom_messages LDKCustomOnionMessageHandler *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CustomOnionMessageHandler_release_pending_custom_messages")] public static extern long CustomOnionMessageHandler_release_pending_custom_messages(long _this_arg);
        public interface LDKSocketDescriptor {
                long send_data(long data, bool resume_read);
@@ -2820,6 +2951,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SocketDescriptor_disconnect_socket")] public static extern void SocketDescriptor_disconnect_socket(long _this_arg);
        // uint64_t SocketDescriptor_hash LDKSocketDescriptor *NONNULL_PTR this_arg
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SocketDescriptor_hash")] public static extern long SocketDescriptor_hash(long _this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBolt12PaymentError_ty_from_ptr")] public static extern long LDKBolt12PaymentError_ty_from_ptr(long ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_LDKBolt12PaymentError_SendingFailed_get_sending_failed")] public static extern RetryableSendFailure LDKBolt12PaymentError_SendingFailed_get_sending_failed(long ptr);
        public interface LDKSignBolt12InvoiceFn {
                long sign_invoice(long message);
        }
@@ -3066,8 +3199,20 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_u64Z_clone_ptr")] public static extern long COption_u64Z_clone_ptr(long _arg);
        // struct LDKCOption_u64Z COption_u64Z_clone(const struct LDKCOption_u64Z *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_u64Z_clone")] public static extern long COption_u64Z_clone(long _orig);
-       // void CVec_BlindedPathZ_free(struct LDKCVec_BlindedPathZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_BlindedPathZ_free")] public static extern void CVec_BlindedPathZ_free(long __res);
+       // void CVec_BlindedMessagePathZ_free(struct LDKCVec_BlindedMessagePathZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_BlindedMessagePathZ_free")] public static extern void CVec_BlindedMessagePathZ_free(long __res);
+       // struct LDKCResult_RefundDecodeErrorZ CResult_RefundDecodeErrorZ_ok(struct LDKRefund o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_ok")] public static extern long CResult_RefundDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_RefundDecodeErrorZ CResult_RefundDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_err")] public static extern long CResult_RefundDecodeErrorZ_err(long _e);
+       // bool CResult_RefundDecodeErrorZ_is_ok(const struct LDKCResult_RefundDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_is_ok")] public static extern bool CResult_RefundDecodeErrorZ_is_ok(long _o);
+       // void CResult_RefundDecodeErrorZ_free(struct LDKCResult_RefundDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_free")] public static extern void CResult_RefundDecodeErrorZ_free(long __res);
+       // uint64_t CResult_RefundDecodeErrorZ_clone_ptr(LDKCResult_RefundDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_clone_ptr")] public static extern long CResult_RefundDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_RefundDecodeErrorZ CResult_RefundDecodeErrorZ_clone(const struct LDKCResult_RefundDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundDecodeErrorZ_clone")] public static extern long CResult_RefundDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_RefundBolt12ParseErrorZ CResult_RefundBolt12ParseErrorZ_ok(struct LDKRefund o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RefundBolt12ParseErrorZ_ok")] public static extern long CResult_RefundBolt12ParseErrorZ_ok(long _o);
        // struct LDKCResult_RefundBolt12ParseErrorZ CResult_RefundBolt12ParseErrorZ_err(struct LDKBolt12ParseError e);
@@ -3198,6 +3343,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SchnorrSignatureNoneZ_clone_ptr")] public static extern long CResult_SchnorrSignatureNoneZ_clone_ptr(long _arg);
        // struct LDKCResult_SchnorrSignatureNoneZ CResult_SchnorrSignatureNoneZ_clone(const struct LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SchnorrSignatureNoneZ_clone")] public static extern long CResult_SchnorrSignatureNoneZ_clone(long _orig);
+       // void CVec_StrZ_free(struct LDKCVec_StrZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_StrZ_free")] public static extern void CVec_StrZ_free(long __res);
        // void CVec_ThirtyTwoBytesZ_free(struct LDKCVec_ThirtyTwoBytesZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_ThirtyTwoBytesZ_free")] public static extern void CVec_ThirtyTwoBytesZ_free(long __res);
        // struct LDKCOption_CVec_ThirtyTwoBytesZZ COption_CVec_ThirtyTwoBytesZZ_some(struct LDKCVec_ThirtyTwoBytesZ o);
@@ -3242,18 +3389,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesNoneZ_clone_ptr")] public static extern long CResult_ThirtyTwoBytesNoneZ_clone_ptr(long _arg);
        // struct LDKCResult_ThirtyTwoBytesNoneZ CResult_ThirtyTwoBytesNoneZ_clone(const struct LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesNoneZ_clone")] public static extern long CResult_ThirtyTwoBytesNoneZ_clone(long _orig);
-       // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_ok(struct LDKBlindedPayInfo o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_ok")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_ok(long _o);
-       // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_err")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_err(long _e);
-       // bool CResult_BlindedPayInfoDecodeErrorZ_is_ok(const struct LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_is_ok")] public static extern bool CResult_BlindedPayInfoDecodeErrorZ_is_ok(long _o);
-       // void CResult_BlindedPayInfoDecodeErrorZ_free(struct LDKCResult_BlindedPayInfoDecodeErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_free")] public static extern void CResult_BlindedPayInfoDecodeErrorZ_free(long __res);
-       // uint64_t CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone_ptr")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_clone(const struct LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_Bolt12InvoiceDecodeErrorZ CResult_Bolt12InvoiceDecodeErrorZ_ok(struct LDKBolt12Invoice o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_ok")] public static extern long CResult_Bolt12InvoiceDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_Bolt12InvoiceDecodeErrorZ CResult_Bolt12InvoiceDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_err")] public static extern long CResult_Bolt12InvoiceDecodeErrorZ_err(long _e);
+       // bool CResult_Bolt12InvoiceDecodeErrorZ_is_ok(const struct LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_is_ok")] public static extern bool CResult_Bolt12InvoiceDecodeErrorZ_is_ok(long _o);
+       // void CResult_Bolt12InvoiceDecodeErrorZ_free(struct LDKCResult_Bolt12InvoiceDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_free")] public static extern void CResult_Bolt12InvoiceDecodeErrorZ_free(long __res);
+       // uint64_t CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr")] public static extern long CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_Bolt12InvoiceDecodeErrorZ CResult_Bolt12InvoiceDecodeErrorZ_clone(const struct LDKCResult_Bolt12InvoiceDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12InvoiceDecodeErrorZ_clone")] public static extern long CResult_Bolt12InvoiceDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(struct LDKDelayedPaymentOutputDescriptor o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok")] public static extern long CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(long _o);
        // struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3348,18 +3495,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_clone_ptr")] public static extern long CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_HTLCDescriptorDecodeErrorZ CResult_HTLCDescriptorDecodeErrorZ_clone(const struct LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HTLCDescriptorDecodeErrorZ_clone")] public static extern long CResult_HTLCDescriptorDecodeErrorZ_clone(long _orig);
-       // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_ok(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_ok")] public static extern long CResult_NoneNoneZ_ok();
-       // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_err(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_err")] public static extern long CResult_NoneNoneZ_err();
-       // bool CResult_NoneNoneZ_is_ok(const struct LDKCResult_NoneNoneZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_is_ok")] public static extern bool CResult_NoneNoneZ_is_ok(long _o);
-       // void CResult_NoneNoneZ_free(struct LDKCResult_NoneNoneZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_free")] public static extern void CResult_NoneNoneZ_free(long __res);
-       // uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_clone_ptr")] public static extern long CResult_NoneNoneZ_clone_ptr(long _arg);
-       // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_clone(const struct LDKCResult_NoneNoneZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_clone")] public static extern long CResult_NoneNoneZ_clone(long _orig);
        // struct LDKCResult_PublicKeyNoneZ CResult_PublicKeyNoneZ_ok(struct LDKPublicKey o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PublicKeyNoneZ_ok")] public static extern long CResult_PublicKeyNoneZ_ok(long _o);
        // struct LDKCResult_PublicKeyNoneZ CResult_PublicKeyNoneZ_err(void);
@@ -3372,6 +3507,30 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PublicKeyNoneZ_clone_ptr")] public static extern long CResult_PublicKeyNoneZ_clone_ptr(long _arg);
        // struct LDKCResult_PublicKeyNoneZ CResult_PublicKeyNoneZ_clone(const struct LDKCResult_PublicKeyNoneZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PublicKeyNoneZ_clone")] public static extern long CResult_PublicKeyNoneZ_clone(long _orig);
+       // struct LDKCResult__u832NoneZ CResult__u832NoneZ_ok(struct LDKThirtyTwoBytes o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_ok")] public static extern long CResult__u832NoneZ_ok(long _o);
+       // struct LDKCResult__u832NoneZ CResult__u832NoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_err")] public static extern long CResult__u832NoneZ_err();
+       // bool CResult__u832NoneZ_is_ok(const struct LDKCResult__u832NoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_is_ok")] public static extern bool CResult__u832NoneZ_is_ok(long _o);
+       // void CResult__u832NoneZ_free(struct LDKCResult__u832NoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_free")] public static extern void CResult__u832NoneZ_free(long __res);
+       // uint64_t CResult__u832NoneZ_clone_ptr(LDKCResult__u832NoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_clone_ptr")] public static extern long CResult__u832NoneZ_clone_ptr(long _arg);
+       // struct LDKCResult__u832NoneZ CResult__u832NoneZ_clone(const struct LDKCResult__u832NoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult__u832NoneZ_clone")] public static extern long CResult__u832NoneZ_clone(long _orig);
+       // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_ok(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_ok")] public static extern long CResult_NoneNoneZ_ok();
+       // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_err")] public static extern long CResult_NoneNoneZ_err();
+       // bool CResult_NoneNoneZ_is_ok(const struct LDKCResult_NoneNoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_is_ok")] public static extern bool CResult_NoneNoneZ_is_ok(long _o);
+       // void CResult_NoneNoneZ_free(struct LDKCResult_NoneNoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_free")] public static extern void CResult_NoneNoneZ_free(long __res);
+       // uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_clone_ptr")] public static extern long CResult_NoneNoneZ_clone_ptr(long _arg);
+       // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_clone(const struct LDKCResult_NoneNoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneNoneZ_clone")] public static extern long CResult_NoneNoneZ_clone(long _orig);
        // struct LDKCOption_BigEndianScalarZ COption_BigEndianScalarZ_some(struct LDKBigEndianScalar o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_BigEndianScalarZ_some")] public static extern long COption_BigEndianScalarZ_some(long _o);
        // struct LDKCOption_BigEndianScalarZ COption_BigEndianScalarZ_none(void);
@@ -3382,8 +3541,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_BigEndianScalarZ_clone_ptr")] public static extern long COption_BigEndianScalarZ_clone_ptr(long _arg);
        // struct LDKCOption_BigEndianScalarZ COption_BigEndianScalarZ_clone(const struct LDKCOption_BigEndianScalarZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_BigEndianScalarZ_clone")] public static extern long COption_BigEndianScalarZ_clone(long _orig);
-       // void CVec_U5Z_free(struct LDKCVec_U5Z _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_U5Z_free")] public static extern void CVec_U5Z_free(long __res);
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_ok(struct LDKRecoverableSignature o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RecoverableSignatureNoneZ_ok")] public static extern long CResult_RecoverableSignatureNoneZ_ok(long _o);
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_err(void);
@@ -3420,18 +3577,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TransactionNoneZ_clone_ptr")] public static extern long CResult_TransactionNoneZ_clone_ptr(long _arg);
        // struct LDKCResult_TransactionNoneZ CResult_TransactionNoneZ_clone(const struct LDKCResult_TransactionNoneZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TransactionNoneZ_clone")] public static extern long CResult_TransactionNoneZ_clone(long _orig);
-       // struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(struct LDKWriteableEcdsaChannelSigner o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok")] public static extern long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(long _o);
-       // struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err")] public static extern long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(long _e);
-       // bool CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(const struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok")] public static extern bool CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(long _o);
-       // void CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free")] public static extern void CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(long __res);
-       // uint64_t CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr")] public static extern long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(const struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone")] public static extern long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_EcdsaChannelSignerDecodeErrorZ CResult_EcdsaChannelSignerDecodeErrorZ_ok(struct LDKEcdsaChannelSigner o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_ok")] public static extern long CResult_EcdsaChannelSignerDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_EcdsaChannelSignerDecodeErrorZ CResult_EcdsaChannelSignerDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_err")] public static extern long CResult_EcdsaChannelSignerDecodeErrorZ_err(long _e);
+       // bool CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(const struct LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_is_ok")] public static extern bool CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(long _o);
+       // void CResult_EcdsaChannelSignerDecodeErrorZ_free(struct LDKCResult_EcdsaChannelSignerDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_free")] public static extern void CResult_EcdsaChannelSignerDecodeErrorZ_free(long __res);
+       // uint64_t CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr")] public static extern long CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_EcdsaChannelSignerDecodeErrorZ CResult_EcdsaChannelSignerDecodeErrorZ_clone(const struct LDKCResult_EcdsaChannelSignerDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_EcdsaChannelSignerDecodeErrorZ_clone")] public static extern long CResult_EcdsaChannelSignerDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_CVec_u8ZNoneZ CResult_CVec_u8ZNoneZ_ok(struct LDKCVec_u8Z o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_u8ZNoneZ_ok")] public static extern long CResult_CVec_u8ZNoneZ_ok(long _o);
        // struct LDKCResult_CVec_u8ZNoneZ CResult_CVec_u8ZNoneZ_err(void);
@@ -3540,6 +3697,26 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneIOErrorZ_clone_ptr")] public static extern long CResult_NoneIOErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_NoneIOErrorZ CResult_NoneIOErrorZ_clone(const struct LDKCResult_NoneIOErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneIOErrorZ_clone")] public static extern long CResult_NoneIOErrorZ_clone(long _orig);
+       // uint64_t C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(long _arg);
+       // struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(const struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(long _orig);
+       // struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(struct LDKThirtyTwoBytes a, struct LDKRecipientOnionFields b, struct LDKRouteParameters c);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(long _a, long _b, long _c);
+       // void C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free")] public static extern void C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(long __res);
+       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(long _o);
+       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err();
+       // bool CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(const struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok")] public static extern bool CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(long _o);
+       // void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free")] public static extern void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(long __res);
+       // uint64_t CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(long _arg);
+       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(const struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(long _orig);
        // void CVec_ChannelDetailsZ_free(struct LDKCVec_ChannelDetailsZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_ChannelDetailsZ_free")] public static extern void CVec_ChannelDetailsZ_free(long __res);
        // struct LDKCResult_RouteLightningErrorZ CResult_RouteLightningErrorZ_ok(struct LDKRoute o);
@@ -3554,28 +3731,20 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RouteLightningErrorZ_clone_ptr")] public static extern long CResult_RouteLightningErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_RouteLightningErrorZ CResult_RouteLightningErrorZ_clone(const struct LDKCResult_RouteLightningErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RouteLightningErrorZ_clone")] public static extern long CResult_RouteLightningErrorZ_clone(long _orig);
-       // uint64_t C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr")] public static extern long C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(long _arg);
-       // struct LDKC2Tuple_BlindedPayInfoBlindedPathZ C2Tuple_BlindedPayInfoBlindedPathZ_clone(const struct LDKC2Tuple_BlindedPayInfoBlindedPathZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_clone")] public static extern long C2Tuple_BlindedPayInfoBlindedPathZ_clone(long _orig);
-       // struct LDKC2Tuple_BlindedPayInfoBlindedPathZ C2Tuple_BlindedPayInfoBlindedPathZ_new(struct LDKBlindedPayInfo a, struct LDKBlindedPath b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_new")] public static extern long C2Tuple_BlindedPayInfoBlindedPathZ_new(long _a, long _b);
-       // void C2Tuple_BlindedPayInfoBlindedPathZ_free(struct LDKC2Tuple_BlindedPayInfoBlindedPathZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_BlindedPayInfoBlindedPathZ_free")] public static extern void C2Tuple_BlindedPayInfoBlindedPathZ_free(long __res);
-       // void CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free(struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free")] public static extern void CVec_C2Tuple_BlindedPayInfoBlindedPathZZ_free(long __res);
-       // struct LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok")] public static extern long CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(long _o);
-       // struct LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err")] public static extern long CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err();
-       // bool CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(const struct LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok")] public static extern bool CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(long _o);
-       // void CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(struct LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free")] public static extern void CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(long __res);
-       // uint64_t CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr")] public static extern long CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(long _arg);
-       // struct LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(const struct LDKCResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone")] public static extern long CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(long _orig);
+       // void CVec_BlindedPaymentPathZ_free(struct LDKCVec_BlindedPaymentPathZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_BlindedPaymentPathZ_free")] public static extern void CVec_BlindedPaymentPathZ_free(long __res);
+       // struct LDKCResult_CVec_BlindedPaymentPathZNoneZ CResult_CVec_BlindedPaymentPathZNoneZ_ok(struct LDKCVec_BlindedPaymentPathZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_ok")] public static extern long CResult_CVec_BlindedPaymentPathZNoneZ_ok(long _o);
+       // struct LDKCResult_CVec_BlindedPaymentPathZNoneZ CResult_CVec_BlindedPaymentPathZNoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_err")] public static extern long CResult_CVec_BlindedPaymentPathZNoneZ_err();
+       // bool CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(const struct LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_is_ok")] public static extern bool CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(long _o);
+       // void CResult_CVec_BlindedPaymentPathZNoneZ_free(struct LDKCResult_CVec_BlindedPaymentPathZNoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_free")] public static extern void CResult_CVec_BlindedPaymentPathZNoneZ_free(long __res);
+       // uint64_t CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr")] public static extern long CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(long _arg);
+       // struct LDKCResult_CVec_BlindedPaymentPathZNoneZ CResult_CVec_BlindedPaymentPathZNoneZ_clone(const struct LDKCResult_CVec_BlindedPaymentPathZNoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPaymentPathZNoneZ_clone")] public static extern long CResult_CVec_BlindedPaymentPathZNoneZ_clone(long _orig);
        // void CVec_PublicKeyZ_free(struct LDKCVec_PublicKeyZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_PublicKeyZ_free")] public static extern void CVec_PublicKeyZ_free(long __res);
        // struct LDKCResult_OnionMessagePathNoneZ CResult_OnionMessagePathNoneZ_ok(struct LDKOnionMessagePath o);
@@ -3590,18 +3759,20 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OnionMessagePathNoneZ_clone_ptr")] public static extern long CResult_OnionMessagePathNoneZ_clone_ptr(long _arg);
        // struct LDKCResult_OnionMessagePathNoneZ CResult_OnionMessagePathNoneZ_clone(const struct LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OnionMessagePathNoneZ_clone")] public static extern long CResult_OnionMessagePathNoneZ_clone(long _orig);
-       // struct LDKCResult_CVec_BlindedPathZNoneZ CResult_CVec_BlindedPathZNoneZ_ok(struct LDKCVec_BlindedPathZ o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_ok")] public static extern long CResult_CVec_BlindedPathZNoneZ_ok(long _o);
-       // struct LDKCResult_CVec_BlindedPathZNoneZ CResult_CVec_BlindedPathZNoneZ_err(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_err")] public static extern long CResult_CVec_BlindedPathZNoneZ_err();
-       // bool CResult_CVec_BlindedPathZNoneZ_is_ok(const struct LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_is_ok")] public static extern bool CResult_CVec_BlindedPathZNoneZ_is_ok(long _o);
-       // void CResult_CVec_BlindedPathZNoneZ_free(struct LDKCResult_CVec_BlindedPathZNoneZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_free")] public static extern void CResult_CVec_BlindedPathZNoneZ_free(long __res);
-       // uint64_t CResult_CVec_BlindedPathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_clone_ptr")] public static extern long CResult_CVec_BlindedPathZNoneZ_clone_ptr(long _arg);
-       // struct LDKCResult_CVec_BlindedPathZNoneZ CResult_CVec_BlindedPathZNoneZ_clone(const struct LDKCResult_CVec_BlindedPathZNoneZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedPathZNoneZ_clone")] public static extern long CResult_CVec_BlindedPathZNoneZ_clone(long _orig);
+       // struct LDKCResult_CVec_BlindedMessagePathZNoneZ CResult_CVec_BlindedMessagePathZNoneZ_ok(struct LDKCVec_BlindedMessagePathZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_ok")] public static extern long CResult_CVec_BlindedMessagePathZNoneZ_ok(long _o);
+       // struct LDKCResult_CVec_BlindedMessagePathZNoneZ CResult_CVec_BlindedMessagePathZNoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_err")] public static extern long CResult_CVec_BlindedMessagePathZNoneZ_err();
+       // bool CResult_CVec_BlindedMessagePathZNoneZ_is_ok(const struct LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_is_ok")] public static extern bool CResult_CVec_BlindedMessagePathZNoneZ_is_ok(long _o);
+       // void CResult_CVec_BlindedMessagePathZNoneZ_free(struct LDKCResult_CVec_BlindedMessagePathZNoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_free")] public static extern void CResult_CVec_BlindedMessagePathZNoneZ_free(long __res);
+       // uint64_t CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr")] public static extern long CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(long _arg);
+       // struct LDKCResult_CVec_BlindedMessagePathZNoneZ CResult_CVec_BlindedMessagePathZNoneZ_clone(const struct LDKCResult_CVec_BlindedMessagePathZNoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_BlindedMessagePathZNoneZ_clone")] public static extern long CResult_CVec_BlindedMessagePathZNoneZ_clone(long _orig);
+       // void CVec_MessageForwardNodeZ_free(struct LDKCVec_MessageForwardNodeZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_MessageForwardNodeZ_free")] public static extern void CVec_MessageForwardNodeZ_free(long __res);
        // struct LDKCResult_InFlightHtlcsDecodeErrorZ CResult_InFlightHtlcsDecodeErrorZ_ok(struct LDKInFlightHtlcs o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InFlightHtlcsDecodeErrorZ_ok")] public static extern long CResult_InFlightHtlcsDecodeErrorZ_ok(long _o);
        // struct LDKCResult_InFlightHtlcsDecodeErrorZ CResult_InFlightHtlcsDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3684,8 +3855,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentParametersDecodeErrorZ_clone")] public static extern long CResult_PaymentParametersDecodeErrorZ_clone(long _orig);
        // void CVec_RouteHintZ_free(struct LDKCVec_RouteHintZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_RouteHintZ_free")] public static extern void CVec_RouteHintZ_free(long __res);
-       // void CVec_RouteHintHopZ_free(struct LDKCVec_RouteHintHopZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_RouteHintHopZ_free")] public static extern void CVec_RouteHintHopZ_free(long __res);
        // struct LDKCResult_RouteHintDecodeErrorZ CResult_RouteHintDecodeErrorZ_ok(struct LDKRouteHint o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_RouteHintDecodeErrorZ_ok")] public static extern long CResult_RouteHintDecodeErrorZ_ok(long _o);
        // struct LDKCResult_RouteHintDecodeErrorZ CResult_RouteHintDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3966,6 +4135,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_is_ok")] public static extern bool CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_is_ok(long _o);
        // void CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_free(struct LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_free")] public static extern void CResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ_free(long __res);
+       // struct LDKCResult_OfferDecodeErrorZ CResult_OfferDecodeErrorZ_ok(struct LDKOffer o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_ok")] public static extern long CResult_OfferDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_OfferDecodeErrorZ CResult_OfferDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_err")] public static extern long CResult_OfferDecodeErrorZ_err(long _e);
+       // bool CResult_OfferDecodeErrorZ_is_ok(const struct LDKCResult_OfferDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_is_ok")] public static extern bool CResult_OfferDecodeErrorZ_is_ok(long _o);
+       // void CResult_OfferDecodeErrorZ_free(struct LDKCResult_OfferDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_free")] public static extern void CResult_OfferDecodeErrorZ_free(long __res);
+       // uint64_t CResult_OfferDecodeErrorZ_clone_ptr(LDKCResult_OfferDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_clone_ptr")] public static extern long CResult_OfferDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_OfferDecodeErrorZ CResult_OfferDecodeErrorZ_clone(const struct LDKCResult_OfferDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferDecodeErrorZ_clone")] public static extern long CResult_OfferDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_OfferBolt12ParseErrorZ CResult_OfferBolt12ParseErrorZ_ok(struct LDKOffer o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OfferBolt12ParseErrorZ_ok")] public static extern long CResult_OfferBolt12ParseErrorZ_ok(long _o);
        // struct LDKCResult_OfferBolt12ParseErrorZ CResult_OfferBolt12ParseErrorZ_err(struct LDKBolt12ParseError e);
@@ -4136,6 +4317,16 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeAliasDecodeErrorZ_clone_ptr")] public static extern long CResult_NodeAliasDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_NodeAliasDecodeErrorZ CResult_NodeAliasDecodeErrorZ_clone(const struct LDKCResult_NodeAliasDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeAliasDecodeErrorZ_clone")] public static extern long CResult_NodeAliasDecodeErrorZ_clone(long _orig);
+       // struct LDKCOption_NodeAnnouncementInfoZ COption_NodeAnnouncementInfoZ_some(struct LDKNodeAnnouncementInfo o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_NodeAnnouncementInfoZ_some")] public static extern long COption_NodeAnnouncementInfoZ_some(long _o);
+       // struct LDKCOption_NodeAnnouncementInfoZ COption_NodeAnnouncementInfoZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_NodeAnnouncementInfoZ_none")] public static extern long COption_NodeAnnouncementInfoZ_none();
+       // void COption_NodeAnnouncementInfoZ_free(struct LDKCOption_NodeAnnouncementInfoZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_NodeAnnouncementInfoZ_free")] public static extern void COption_NodeAnnouncementInfoZ_free(long __res);
+       // uint64_t COption_NodeAnnouncementInfoZ_clone_ptr(LDKCOption_NodeAnnouncementInfoZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_NodeAnnouncementInfoZ_clone_ptr")] public static extern long COption_NodeAnnouncementInfoZ_clone_ptr(long _arg);
+       // struct LDKCOption_NodeAnnouncementInfoZ COption_NodeAnnouncementInfoZ_clone(const struct LDKCOption_NodeAnnouncementInfoZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_NodeAnnouncementInfoZ_clone")] public static extern long COption_NodeAnnouncementInfoZ_clone(long _orig);
        // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_ok(struct LDKNodeInfo o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NodeInfoDecodeErrorZ_ok")] public static extern long CResult_NodeInfoDecodeErrorZ_ok(long _o);
        // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_err(struct LDKDecodeError e);
@@ -4410,26 +4601,72 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr")] public static extern long CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_ThirtyTwoBytesAPIErrorZ CResult_ThirtyTwoBytesAPIErrorZ_clone(const struct LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ThirtyTwoBytesAPIErrorZ_clone")] public static extern long CResult_ThirtyTwoBytesAPIErrorZ_clone(long _orig);
-       // struct LDKCOption_OffersMessageZ COption_OffersMessageZ_some(struct LDKOffersMessage o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersMessageZ_some")] public static extern long COption_OffersMessageZ_some(long _o);
-       // struct LDKCOption_OffersMessageZ COption_OffersMessageZ_none(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersMessageZ_none")] public static extern long COption_OffersMessageZ_none();
-       // void COption_OffersMessageZ_free(struct LDKCOption_OffersMessageZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersMessageZ_free")] public static extern void COption_OffersMessageZ_free(long __res);
-       // uint64_t COption_OffersMessageZ_clone_ptr(LDKCOption_OffersMessageZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersMessageZ_clone_ptr")] public static extern long COption_OffersMessageZ_clone_ptr(long _arg);
-       // struct LDKCOption_OffersMessageZ COption_OffersMessageZ_clone(const struct LDKCOption_OffersMessageZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersMessageZ_clone")] public static extern long COption_OffersMessageZ_clone(long _orig);
-       // uint64_t C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr")] public static extern long C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(long _arg);
-       // struct LDKC3Tuple_OffersMessageDestinationBlindedPathZ C3Tuple_OffersMessageDestinationBlindedPathZ_clone(const struct LDKC3Tuple_OffersMessageDestinationBlindedPathZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_clone")] public static extern long C3Tuple_OffersMessageDestinationBlindedPathZ_clone(long _orig);
-       // struct LDKC3Tuple_OffersMessageDestinationBlindedPathZ C3Tuple_OffersMessageDestinationBlindedPathZ_new(struct LDKOffersMessage a, struct LDKDestination b, struct LDKBlindedPath c);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_new")] public static extern long C3Tuple_OffersMessageDestinationBlindedPathZ_new(long _a, long _b, long _c);
-       // void C3Tuple_OffersMessageDestinationBlindedPathZ_free(struct LDKC3Tuple_OffersMessageDestinationBlindedPathZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OffersMessageDestinationBlindedPathZ_free")] public static extern void C3Tuple_OffersMessageDestinationBlindedPathZ_free(long __res);
-       // void CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free(struct LDKCVec_C3Tuple_OffersMessageDestinationBlindedPathZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free")] public static extern void CVec_C3Tuple_OffersMessageDestinationBlindedPathZZ_free(long __res);
+       // struct LDKCOption_OffersContextZ COption_OffersContextZ_some(struct LDKOffersContext o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersContextZ_some")] public static extern long COption_OffersContextZ_some(long _o);
+       // struct LDKCOption_OffersContextZ COption_OffersContextZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersContextZ_none")] public static extern long COption_OffersContextZ_none();
+       // void COption_OffersContextZ_free(struct LDKCOption_OffersContextZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersContextZ_free")] public static extern void COption_OffersContextZ_free(long __res);
+       // uint64_t COption_OffersContextZ_clone_ptr(LDKCOption_OffersContextZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersContextZ_clone_ptr")] public static extern long COption_OffersContextZ_clone_ptr(long _arg);
+       // struct LDKCOption_OffersContextZ COption_OffersContextZ_clone(const struct LDKCOption_OffersContextZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OffersContextZ_clone")] public static extern long COption_OffersContextZ_clone(long _orig);
+       // uint64_t C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_clone_ptr")] public static extern long C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_OffersMessageResponseInstructionZ C2Tuple_OffersMessageResponseInstructionZ_clone(const struct LDKC2Tuple_OffersMessageResponseInstructionZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_clone")] public static extern long C2Tuple_OffersMessageResponseInstructionZ_clone(long _orig);
+       // struct LDKC2Tuple_OffersMessageResponseInstructionZ C2Tuple_OffersMessageResponseInstructionZ_new(struct LDKOffersMessage a, struct LDKResponseInstruction b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_new")] public static extern long C2Tuple_OffersMessageResponseInstructionZ_new(long _a, long _b);
+       // void C2Tuple_OffersMessageResponseInstructionZ_free(struct LDKC2Tuple_OffersMessageResponseInstructionZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageResponseInstructionZ_free")] public static extern void C2Tuple_OffersMessageResponseInstructionZ_free(long __res);
+       // struct LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ COption_C2Tuple_OffersMessageResponseInstructionZZ_some(struct LDKC2Tuple_OffersMessageResponseInstructionZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_some")] public static extern long COption_C2Tuple_OffersMessageResponseInstructionZZ_some(long _o);
+       // struct LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ COption_C2Tuple_OffersMessageResponseInstructionZZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_none")] public static extern long COption_C2Tuple_OffersMessageResponseInstructionZZ_none();
+       // void COption_C2Tuple_OffersMessageResponseInstructionZZ_free(struct LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_free")] public static extern void COption_C2Tuple_OffersMessageResponseInstructionZZ_free(long __res);
+       // uint64_t COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr")] public static extern long COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(long _arg);
+       // struct LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(const struct LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OffersMessageResponseInstructionZZ_clone")] public static extern long COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(long _orig);
+       // uint64_t C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr")] public static extern long C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_OffersMessageMessageSendInstructionsZ C2Tuple_OffersMessageMessageSendInstructionsZ_clone(const struct LDKC2Tuple_OffersMessageMessageSendInstructionsZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_clone")] public static extern long C2Tuple_OffersMessageMessageSendInstructionsZ_clone(long _orig);
+       // struct LDKC2Tuple_OffersMessageMessageSendInstructionsZ C2Tuple_OffersMessageMessageSendInstructionsZ_new(struct LDKOffersMessage a, struct LDKMessageSendInstructions b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_new")] public static extern long C2Tuple_OffersMessageMessageSendInstructionsZ_new(long _a, long _b);
+       // void C2Tuple_OffersMessageMessageSendInstructionsZ_free(struct LDKC2Tuple_OffersMessageMessageSendInstructionsZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OffersMessageMessageSendInstructionsZ_free")] public static extern void C2Tuple_OffersMessageMessageSendInstructionsZ_free(long __res);
+       // void CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free(struct LDKCVec_C2Tuple_OffersMessageMessageSendInstructionsZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free")] public static extern void CVec_C2Tuple_OffersMessageMessageSendInstructionsZZ_free(long __res);
+       // uint64_t C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr")] public static extern long C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(const struct LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone")] public static extern long C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(long _orig);
+       // struct LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(struct LDKReleaseHeldHtlc a, struct LDKResponseInstruction b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new")] public static extern long C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(long _a, long _b);
+       // void C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(struct LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free")] public static extern void C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(long __res);
+       // struct LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(struct LDKC2Tuple_ReleaseHeldHtlcResponseInstructionZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some")] public static extern long COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(long _o);
+       // struct LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none")] public static extern long COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none();
+       // void COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(struct LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free")] public static extern void COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(long __res);
+       // uint64_t COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr")] public static extern long COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(long _arg);
+       // struct LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(const struct LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone")] public static extern long COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(long _orig);
+       // uint64_t C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr")] public static extern long C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(const struct LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone")] public static extern long C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(long _orig);
+       // struct LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(struct LDKAsyncPaymentsMessage a, struct LDKMessageSendInstructions b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new")] public static extern long C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(long _a, long _b);
+       // void C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(struct LDKC2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free")] public static extern void C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(long __res);
+       // void CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free(struct LDKCVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free")] public static extern void CVec_C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZZ_free(long __res);
        // struct LDKCResult_PhantomRouteHintsDecodeErrorZ CResult_PhantomRouteHintsDecodeErrorZ_ok(struct LDKPhantomRouteHints o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PhantomRouteHintsDecodeErrorZ_ok")] public static extern long CResult_PhantomRouteHintsDecodeErrorZ_ok(long _o);
        // struct LDKCResult_PhantomRouteHintsDecodeErrorZ CResult_PhantomRouteHintsDecodeErrorZ_err(struct LDKDecodeError e);
@@ -4634,6 +4871,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free")] public static extern void C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free(long __res);
        // void CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free")] public static extern void CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(long __res);
+       // struct LDKCResult_NoneReplayEventZ CResult_NoneReplayEventZ_ok(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_ok")] public static extern long CResult_NoneReplayEventZ_ok();
+       // struct LDKCResult_NoneReplayEventZ CResult_NoneReplayEventZ_err(struct LDKReplayEvent e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_err")] public static extern long CResult_NoneReplayEventZ_err(long _e);
+       // bool CResult_NoneReplayEventZ_is_ok(const struct LDKCResult_NoneReplayEventZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_is_ok")] public static extern bool CResult_NoneReplayEventZ_is_ok(long _o);
+       // void CResult_NoneReplayEventZ_free(struct LDKCResult_NoneReplayEventZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_free")] public static extern void CResult_NoneReplayEventZ_free(long __res);
+       // uint64_t CResult_NoneReplayEventZ_clone_ptr(LDKCResult_NoneReplayEventZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_clone_ptr")] public static extern long CResult_NoneReplayEventZ_clone_ptr(long _arg);
+       // struct LDKCResult_NoneReplayEventZ CResult_NoneReplayEventZ_clone(const struct LDKCResult_NoneReplayEventZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneReplayEventZ_clone")] public static extern long CResult_NoneReplayEventZ_clone(long _orig);
        // void CVec_CommitmentTransactionZ_free(struct LDKCVec_CommitmentTransactionZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_CommitmentTransactionZ_free")] public static extern void CVec_CommitmentTransactionZ_free(long __res);
        // uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg);
@@ -4688,16 +4937,24 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyTypeZ_free")] public static extern void C2Tuple_PublicKeyTypeZ_free(long __res);
        // void CVec_C2Tuple_PublicKeyTypeZZ_free(struct LDKCVec_C2Tuple_PublicKeyTypeZZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_PublicKeyTypeZZ_free")] public static extern void CVec_C2Tuple_PublicKeyTypeZZ_free(long __res);
-       // uint64_t C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr")] public static extern long C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(long _arg);
-       // struct LDKC2Tuple_PublicKeyCVec_SocketAddressZZ C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(const struct LDKC2Tuple_PublicKeyCVec_SocketAddressZZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_clone")] public static extern long C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(long _orig);
-       // struct LDKC2Tuple_PublicKeyCVec_SocketAddressZZ C2Tuple_PublicKeyCVec_SocketAddressZZ_new(struct LDKPublicKey a, struct LDKCVec_SocketAddressZ b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_new")] public static extern long C2Tuple_PublicKeyCVec_SocketAddressZZ_new(long _a, long _b);
-       // void C2Tuple_PublicKeyCVec_SocketAddressZZ_free(struct LDKC2Tuple_PublicKeyCVec_SocketAddressZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_PublicKeyCVec_SocketAddressZZ_free")] public static extern void C2Tuple_PublicKeyCVec_SocketAddressZZ_free(long __res);
-       // void CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free(struct LDKCVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free")] public static extern void CVec_C2Tuple_PublicKeyCVec_SocketAddressZZZ_free(long __res);
+       // uint64_t C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr")] public static extern long C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_OnionMessageContentsResponseInstructionZ C2Tuple_OnionMessageContentsResponseInstructionZ_clone(const struct LDKC2Tuple_OnionMessageContentsResponseInstructionZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_clone")] public static extern long C2Tuple_OnionMessageContentsResponseInstructionZ_clone(long _orig);
+       // struct LDKC2Tuple_OnionMessageContentsResponseInstructionZ C2Tuple_OnionMessageContentsResponseInstructionZ_new(struct LDKOnionMessageContents a, struct LDKResponseInstruction b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_new")] public static extern long C2Tuple_OnionMessageContentsResponseInstructionZ_new(long _a, long _b);
+       // void C2Tuple_OnionMessageContentsResponseInstructionZ_free(struct LDKC2Tuple_OnionMessageContentsResponseInstructionZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsResponseInstructionZ_free")] public static extern void C2Tuple_OnionMessageContentsResponseInstructionZ_free(long __res);
+       // struct LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(struct LDKC2Tuple_OnionMessageContentsResponseInstructionZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some")] public static extern long COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(long _o);
+       // struct LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none")] public static extern long COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none();
+       // void COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(struct LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free")] public static extern void COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(long __res);
+       // uint64_t COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr")] public static extern long COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(long _arg);
+       // struct LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(const struct LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone")] public static extern long COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(long _orig);
        // struct LDKCOption_OnionMessageContentsZ COption_OnionMessageContentsZ_some(struct LDKOnionMessageContents o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_OnionMessageContentsZ_some")] public static extern long COption_OnionMessageContentsZ_some(long _o);
        // struct LDKCOption_OnionMessageContentsZ COption_OnionMessageContentsZ_none(void);
@@ -4720,16 +4977,16 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_clone_ptr")] public static extern long CResult_COption_OnionMessageContentsZDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_COption_OnionMessageContentsZDecodeErrorZ CResult_COption_OnionMessageContentsZDecodeErrorZ_clone(const struct LDKCResult_COption_OnionMessageContentsZDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_OnionMessageContentsZDecodeErrorZ_clone")] public static extern long CResult_COption_OnionMessageContentsZDecodeErrorZ_clone(long _orig);
-       // uint64_t C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr")] public static extern long C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(long _arg);
-       // struct LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(const struct LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone")] public static extern long C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(long _orig);
-       // struct LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(struct LDKOnionMessageContents a, struct LDKDestination b, struct LDKBlindedPath c);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new")] public static extern long C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(long _a, long _b, long _c);
-       // void C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(struct LDKC3Tuple_OnionMessageContentsDestinationBlindedPathZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free")] public static extern void C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(long __res);
-       // void CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free(struct LDKCVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free")] public static extern void CVec_C3Tuple_OnionMessageContentsDestinationBlindedPathZZ_free(long __res);
+       // uint64_t C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr")] public static extern long C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(const struct LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone")] public static extern long C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(long _orig);
+       // struct LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(struct LDKOnionMessageContents a, struct LDKMessageSendInstructions b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new")] public static extern long C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(long _a, long _b);
+       // void C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(struct LDKC2Tuple_OnionMessageContentsMessageSendInstructionsZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free")] public static extern void C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(long __res);
+       // void CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free(struct LDKCVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free")] public static extern void CVec_C2Tuple_OnionMessageContentsMessageSendInstructionsZZ_free(long __res);
        // struct LDKCOption_TypeZ COption_TypeZ_some(struct LDKType o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_TypeZ_some")] public static extern long COption_TypeZ_some(long _o);
        // struct LDKCOption_TypeZ COption_TypeZ_none(void);
@@ -4820,8 +5077,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_u8ZIOErrorZ_clone_ptr")] public static extern long CResult_CVec_u8ZIOErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_CVec_u8ZIOErrorZ CResult_CVec_u8ZIOErrorZ_clone(const struct LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_u8ZIOErrorZ_clone")] public static extern long CResult_CVec_u8ZIOErrorZ_clone(long _orig);
-       // void CVec_StrZ_free(struct LDKCVec_StrZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_StrZ_free")] public static extern void CVec_StrZ_free(long __res);
        // struct LDKCResult_CVec_StrZIOErrorZ CResult_CVec_StrZIOErrorZ_ok(struct LDKCVec_StrZ o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CVec_StrZIOErrorZ_ok")] public static extern long CResult_CVec_StrZIOErrorZ_ok(long _o);
        // struct LDKCResult_CVec_StrZIOErrorZ CResult_CVec_StrZIOErrorZ_err(enum LDKIOError e);
@@ -4884,16 +5139,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_clone_ptr")] public static extern long CResult_InvoiceRequestBolt12SemanticErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_InvoiceRequestBolt12SemanticErrorZ CResult_InvoiceRequestBolt12SemanticErrorZ_clone(const struct LDKCResult_InvoiceRequestBolt12SemanticErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceRequestBolt12SemanticErrorZ_clone")] public static extern long CResult_InvoiceRequestBolt12SemanticErrorZ_clone(long _orig);
-       // struct LDKCOption_SecretKeyZ COption_SecretKeyZ_some(struct LDKSecretKey o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_SecretKeyZ_some")] public static extern long COption_SecretKeyZ_some(long _o);
-       // struct LDKCOption_SecretKeyZ COption_SecretKeyZ_none(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_SecretKeyZ_none")] public static extern long COption_SecretKeyZ_none();
-       // void COption_SecretKeyZ_free(struct LDKCOption_SecretKeyZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_SecretKeyZ_free")] public static extern void COption_SecretKeyZ_free(long __res);
-       // uint64_t COption_SecretKeyZ_clone_ptr(LDKCOption_SecretKeyZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_SecretKeyZ_clone_ptr")] public static extern long COption_SecretKeyZ_clone_ptr(long _arg);
-       // struct LDKCOption_SecretKeyZ COption_SecretKeyZ_clone(const struct LDKCOption_SecretKeyZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_SecretKeyZ_clone")] public static extern long COption_SecretKeyZ_clone(long _orig);
        // struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_ok(struct LDKInvoiceWithExplicitSigningPubkeyBuilder o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_ok")] public static extern long CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_ok(long _o);
        // struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ CResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ_err(enum LDKBolt12SemanticError e);
@@ -5030,18 +5275,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StfuDecodeErrorZ_clone_ptr")] public static extern long CResult_StfuDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_StfuDecodeErrorZ CResult_StfuDecodeErrorZ_clone(const struct LDKCResult_StfuDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StfuDecodeErrorZ_clone")] public static extern long CResult_StfuDecodeErrorZ_clone(long _orig);
-       // struct LDKCResult_SpliceDecodeErrorZ CResult_SpliceDecodeErrorZ_ok(struct LDKSplice o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_ok")] public static extern long CResult_SpliceDecodeErrorZ_ok(long _o);
-       // struct LDKCResult_SpliceDecodeErrorZ CResult_SpliceDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_err")] public static extern long CResult_SpliceDecodeErrorZ_err(long _e);
-       // bool CResult_SpliceDecodeErrorZ_is_ok(const struct LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_is_ok")] public static extern bool CResult_SpliceDecodeErrorZ_is_ok(long _o);
-       // void CResult_SpliceDecodeErrorZ_free(struct LDKCResult_SpliceDecodeErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_free")] public static extern void CResult_SpliceDecodeErrorZ_free(long __res);
-       // uint64_t CResult_SpliceDecodeErrorZ_clone_ptr(LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_clone_ptr")] public static extern long CResult_SpliceDecodeErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_SpliceDecodeErrorZ CResult_SpliceDecodeErrorZ_clone(const struct LDKCResult_SpliceDecodeErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceDecodeErrorZ_clone")] public static extern long CResult_SpliceDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_SpliceInitDecodeErrorZ CResult_SpliceInitDecodeErrorZ_ok(struct LDKSpliceInit o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_ok")] public static extern long CResult_SpliceInitDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_SpliceInitDecodeErrorZ CResult_SpliceInitDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_err")] public static extern long CResult_SpliceInitDecodeErrorZ_err(long _e);
+       // bool CResult_SpliceInitDecodeErrorZ_is_ok(const struct LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_is_ok")] public static extern bool CResult_SpliceInitDecodeErrorZ_is_ok(long _o);
+       // void CResult_SpliceInitDecodeErrorZ_free(struct LDKCResult_SpliceInitDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_free")] public static extern void CResult_SpliceInitDecodeErrorZ_free(long __res);
+       // uint64_t CResult_SpliceInitDecodeErrorZ_clone_ptr(LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_clone_ptr")] public static extern long CResult_SpliceInitDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_SpliceInitDecodeErrorZ CResult_SpliceInitDecodeErrorZ_clone(const struct LDKCResult_SpliceInitDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceInitDecodeErrorZ_clone")] public static extern long CResult_SpliceInitDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_SpliceAckDecodeErrorZ CResult_SpliceAckDecodeErrorZ_ok(struct LDKSpliceAck o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SpliceAckDecodeErrorZ_ok")] public static extern long CResult_SpliceAckDecodeErrorZ_ok(long _o);
        // struct LDKCResult_SpliceAckDecodeErrorZ CResult_SpliceAckDecodeErrorZ_err(struct LDKDecodeError e);
@@ -5222,6 +5467,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr")] public static extern long CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(const struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone")] public static extern long CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_CommitmentSignedBatchDecodeErrorZ CResult_CommitmentSignedBatchDecodeErrorZ_ok(struct LDKCommitmentSignedBatch o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_ok")] public static extern long CResult_CommitmentSignedBatchDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_CommitmentSignedBatchDecodeErrorZ CResult_CommitmentSignedBatchDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_err")] public static extern long CResult_CommitmentSignedBatchDecodeErrorZ_err(long _e);
+       // bool CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(const struct LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_is_ok")] public static extern bool CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(long _o);
+       // void CResult_CommitmentSignedBatchDecodeErrorZ_free(struct LDKCResult_CommitmentSignedBatchDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_free")] public static extern void CResult_CommitmentSignedBatchDecodeErrorZ_free(long __res);
+       // uint64_t CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr")] public static extern long CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_CommitmentSignedBatchDecodeErrorZ CResult_CommitmentSignedBatchDecodeErrorZ_clone(const struct LDKCResult_CommitmentSignedBatchDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedBatchDecodeErrorZ_clone")] public static extern long CResult_CommitmentSignedBatchDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CResult_CommitmentSignedDecodeErrorZ_ok(struct LDKCommitmentSigned o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_CommitmentSignedDecodeErrorZ_ok")] public static extern long CResult_CommitmentSignedDecodeErrorZ_ok(long _o);
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CResult_CommitmentSignedDecodeErrorZ_err(struct LDKDecodeError e);
@@ -5606,20 +5863,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr")] public static extern long CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_GossipTimestampFilterDecodeErrorZ CResult_GossipTimestampFilterDecodeErrorZ_clone(const struct LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_GossipTimestampFilterDecodeErrorZ_clone")] public static extern long CResult_GossipTimestampFilterDecodeErrorZ_clone(long _orig);
-       // void CVec_PhantomRouteHintsZ_free(struct LDKCVec_PhantomRouteHintsZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_PhantomRouteHintsZ_free")] public static extern void CVec_PhantomRouteHintsZ_free(long __res);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(struct LDKBolt11Invoice o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_ok")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(long _o);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ CResult_Bolt11InvoiceSignOrCreationErrorZ_err(struct LDKSignOrCreationError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_err")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_err(long _e);
-       // bool CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(const struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok")] public static extern bool CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(long _o);
-       // void CResult_Bolt11InvoiceSignOrCreationErrorZ_free(struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_free")] public static extern void CResult_Bolt11InvoiceSignOrCreationErrorZ_free(long __res);
-       // uint64_t CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(const struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(long _orig);
        // struct LDKCOption_InboundHTLCStateDetailsZ COption_InboundHTLCStateDetailsZ_some(enum LDKInboundHTLCStateDetails o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_InboundHTLCStateDetailsZ_some")] public static extern long COption_InboundHTLCStateDetailsZ_some(InboundHTLCStateDetails _o);
        // struct LDKCOption_InboundHTLCStateDetailsZ COption_InboundHTLCStateDetailsZ_none(void);
@@ -5752,6 +5995,42 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ChannelShutdownStateDecodeErrorZ_clone")] public static extern long CResult_ChannelShutdownStateDecodeErrorZ_clone(long _orig);
        // void CVec_FutureZ_free(struct LDKCVec_FutureZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_FutureZ_free")] public static extern void CVec_FutureZ_free(long __res);
+       // struct LDKCResult_HeldHtlcAvailableDecodeErrorZ CResult_HeldHtlcAvailableDecodeErrorZ_ok(struct LDKHeldHtlcAvailable o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_ok")] public static extern long CResult_HeldHtlcAvailableDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_HeldHtlcAvailableDecodeErrorZ CResult_HeldHtlcAvailableDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_err")] public static extern long CResult_HeldHtlcAvailableDecodeErrorZ_err(long _e);
+       // bool CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(const struct LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_is_ok")] public static extern bool CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(long _o);
+       // void CResult_HeldHtlcAvailableDecodeErrorZ_free(struct LDKCResult_HeldHtlcAvailableDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_free")] public static extern void CResult_HeldHtlcAvailableDecodeErrorZ_free(long __res);
+       // uint64_t CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr")] public static extern long CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_HeldHtlcAvailableDecodeErrorZ CResult_HeldHtlcAvailableDecodeErrorZ_clone(const struct LDKCResult_HeldHtlcAvailableDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HeldHtlcAvailableDecodeErrorZ_clone")] public static extern long CResult_HeldHtlcAvailableDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ CResult_ReleaseHeldHtlcDecodeErrorZ_ok(struct LDKReleaseHeldHtlc o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_ok")] public static extern long CResult_ReleaseHeldHtlcDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ CResult_ReleaseHeldHtlcDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_err")] public static extern long CResult_ReleaseHeldHtlcDecodeErrorZ_err(long _e);
+       // bool CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(const struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok")] public static extern bool CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(long _o);
+       // void CResult_ReleaseHeldHtlcDecodeErrorZ_free(struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_free")] public static extern void CResult_ReleaseHeldHtlcDecodeErrorZ_free(long __res);
+       // uint64_t CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr")] public static extern long CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ CResult_ReleaseHeldHtlcDecodeErrorZ_clone(const struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ReleaseHeldHtlcDecodeErrorZ_clone")] public static extern long CResult_ReleaseHeldHtlcDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ CResult_AsyncPaymentsMessageDecodeErrorZ_ok(struct LDKAsyncPaymentsMessage o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_ok")] public static extern long CResult_AsyncPaymentsMessageDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ CResult_AsyncPaymentsMessageDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_err")] public static extern long CResult_AsyncPaymentsMessageDecodeErrorZ_err(long _e);
+       // bool CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(const struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok")] public static extern bool CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(long _o);
+       // void CResult_AsyncPaymentsMessageDecodeErrorZ_free(struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_free")] public static extern void CResult_AsyncPaymentsMessageDecodeErrorZ_free(long __res);
+       // uint64_t CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr")] public static extern long CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ CResult_AsyncPaymentsMessageDecodeErrorZ_clone(const struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_AsyncPaymentsMessageDecodeErrorZ_clone")] public static extern long CResult_AsyncPaymentsMessageDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_OffersMessageDecodeErrorZ CResult_OffersMessageDecodeErrorZ_ok(struct LDKOffersMessage o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersMessageDecodeErrorZ_ok")] public static extern long CResult_OffersMessageDecodeErrorZ_ok(long _o);
        // struct LDKCResult_OffersMessageDecodeErrorZ CResult_OffersMessageDecodeErrorZ_err(struct LDKDecodeError e);
@@ -5942,6 +6221,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ShutdownScriptInvalidShutdownScriptZ_clone")] public static extern long CResult_ShutdownScriptInvalidShutdownScriptZ_clone(long _orig);
        // void CVec_TransactionZ_free(struct LDKCVec_TransactionZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_TransactionZ_free")] public static extern void CVec_TransactionZ_free(long __res);
+       // struct LDKCResult_FundingInfoDecodeErrorZ CResult_FundingInfoDecodeErrorZ_ok(struct LDKFundingInfo o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_ok")] public static extern long CResult_FundingInfoDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_FundingInfoDecodeErrorZ CResult_FundingInfoDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_err")] public static extern long CResult_FundingInfoDecodeErrorZ_err(long _e);
+       // bool CResult_FundingInfoDecodeErrorZ_is_ok(const struct LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_is_ok")] public static extern bool CResult_FundingInfoDecodeErrorZ_is_ok(long _o);
+       // void CResult_FundingInfoDecodeErrorZ_free(struct LDKCResult_FundingInfoDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_free")] public static extern void CResult_FundingInfoDecodeErrorZ_free(long __res);
+       // uint64_t CResult_FundingInfoDecodeErrorZ_clone_ptr(LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_clone_ptr")] public static extern long CResult_FundingInfoDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_FundingInfoDecodeErrorZ CResult_FundingInfoDecodeErrorZ_clone(const struct LDKCResult_FundingInfoDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_FundingInfoDecodeErrorZ_clone")] public static extern long CResult_FundingInfoDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_PaymentPurposeDecodeErrorZ CResult_PaymentPurposeDecodeErrorZ_ok(struct LDKPaymentPurpose o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentPurposeDecodeErrorZ_ok")] public static extern long CResult_PaymentPurposeDecodeErrorZ_ok(long _o);
        // struct LDKCResult_PaymentPurposeDecodeErrorZ CResult_PaymentPurposeDecodeErrorZ_err(struct LDKDecodeError e);
@@ -6032,18 +6323,28 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_clone_ptr")] public static extern long CResult_COption_HTLCDestinationZDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_COption_HTLCDestinationZDecodeErrorZ CResult_COption_HTLCDestinationZDecodeErrorZ_clone(const struct LDKCResult_COption_HTLCDestinationZDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_HTLCDestinationZDecodeErrorZ_clone")] public static extern long CResult_COption_HTLCDestinationZDecodeErrorZ_clone(long _orig);
-       // struct LDKCResult_PaymentFailureReasonDecodeErrorZ CResult_PaymentFailureReasonDecodeErrorZ_ok(enum LDKPaymentFailureReason o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_ok")] public static extern long CResult_PaymentFailureReasonDecodeErrorZ_ok(PaymentFailureReason _o);
-       // struct LDKCResult_PaymentFailureReasonDecodeErrorZ CResult_PaymentFailureReasonDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_err")] public static extern long CResult_PaymentFailureReasonDecodeErrorZ_err(long _e);
-       // bool CResult_PaymentFailureReasonDecodeErrorZ_is_ok(const struct LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_is_ok")] public static extern bool CResult_PaymentFailureReasonDecodeErrorZ_is_ok(long _o);
-       // void CResult_PaymentFailureReasonDecodeErrorZ_free(struct LDKCResult_PaymentFailureReasonDecodeErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_free")] public static extern void CResult_PaymentFailureReasonDecodeErrorZ_free(long __res);
-       // uint64_t CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr")] public static extern long CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_PaymentFailureReasonDecodeErrorZ CResult_PaymentFailureReasonDecodeErrorZ_clone(const struct LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentFailureReasonDecodeErrorZ_clone")] public static extern long CResult_PaymentFailureReasonDecodeErrorZ_clone(long _orig);
+       // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_some(enum LDKPaymentFailureReason o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_some")] public static extern long COption_PaymentFailureReasonZ_some(PaymentFailureReason _o);
+       // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_none")] public static extern long COption_PaymentFailureReasonZ_none();
+       // void COption_PaymentFailureReasonZ_free(struct LDKCOption_PaymentFailureReasonZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_free")] public static extern void COption_PaymentFailureReasonZ_free(long __res);
+       // uint64_t COption_PaymentFailureReasonZ_clone_ptr(LDKCOption_PaymentFailureReasonZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_clone_ptr")] public static extern long COption_PaymentFailureReasonZ_clone_ptr(long _arg);
+       // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_clone(const struct LDKCOption_PaymentFailureReasonZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_clone")] public static extern long COption_PaymentFailureReasonZ_clone(long _orig);
+       // struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(struct LDKCOption_PaymentFailureReasonZ o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok")] public static extern long CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_err")] public static extern long CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(long _e);
+       // bool CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(const struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok")] public static extern bool CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(long _o);
+       // void CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_free")] public static extern void CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(long __res);
+       // uint64_t CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr")] public static extern long CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(const struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone")] public static extern long CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(long _orig);
        // struct LDKCOption_U128Z COption_U128Z_some(struct LDKU128 o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_U128Z_some")] public static extern long COption_U128Z_some(long _o);
        // struct LDKCOption_U128Z COption_U128Z_none(void);
@@ -6056,16 +6357,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_U128Z_clone")] public static extern long COption_U128Z_clone(long _orig);
        // void CVec_ClaimedHTLCZ_free(struct LDKCVec_ClaimedHTLCZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_ClaimedHTLCZ_free")] public static extern void CVec_ClaimedHTLCZ_free(long __res);
-       // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_some(enum LDKPaymentFailureReason o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_some")] public static extern long COption_PaymentFailureReasonZ_some(PaymentFailureReason _o);
-       // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_none(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_none")] public static extern long COption_PaymentFailureReasonZ_none();
-       // void COption_PaymentFailureReasonZ_free(struct LDKCOption_PaymentFailureReasonZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_free")] public static extern void COption_PaymentFailureReasonZ_free(long __res);
-       // uint64_t COption_PaymentFailureReasonZ_clone_ptr(LDKCOption_PaymentFailureReasonZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_clone_ptr")] public static extern long COption_PaymentFailureReasonZ_clone_ptr(long _arg);
-       // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_clone(const struct LDKCOption_PaymentFailureReasonZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_PaymentFailureReasonZ_clone")] public static extern long COption_PaymentFailureReasonZ_clone(long _orig);
        // struct LDKCOption_EventZ COption_EventZ_some(struct LDKEvent o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_EventZ_some")] public static extern long COption_EventZ_some(long _o);
        // struct LDKCOption_EventZ COption_EventZ_none(void);
@@ -6088,6 +6379,20 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_EventZDecodeErrorZ_clone_ptr")] public static extern long CResult_COption_EventZDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_clone(const struct LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_COption_EventZDecodeErrorZ_clone")] public static extern long CResult_COption_EventZDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_NonceDecodeErrorZ CResult_NonceDecodeErrorZ_ok(struct LDKNonce o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_ok")] public static extern long CResult_NonceDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_NonceDecodeErrorZ CResult_NonceDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_err")] public static extern long CResult_NonceDecodeErrorZ_err(long _e);
+       // bool CResult_NonceDecodeErrorZ_is_ok(const struct LDKCResult_NonceDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_is_ok")] public static extern bool CResult_NonceDecodeErrorZ_is_ok(long _o);
+       // void CResult_NonceDecodeErrorZ_free(struct LDKCResult_NonceDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_free")] public static extern void CResult_NonceDecodeErrorZ_free(long __res);
+       // uint64_t CResult_NonceDecodeErrorZ_clone_ptr(LDKCResult_NonceDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_clone_ptr")] public static extern long CResult_NonceDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_NonceDecodeErrorZ CResult_NonceDecodeErrorZ_clone(const struct LDKCResult_NonceDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NonceDecodeErrorZ_clone")] public static extern long CResult_NonceDecodeErrorZ_clone(long _orig);
+       // void CVec_RouteHintHopZ_free(struct LDKCVec_RouteHintHopZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_RouteHintHopZ_free")] public static extern void CVec_RouteHintHopZ_free(long __res);
        // struct LDKCResult_SiPrefixBolt11ParseErrorZ CResult_SiPrefixBolt11ParseErrorZ_ok(enum LDKSiPrefix o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SiPrefixBolt11ParseErrorZ_ok")] public static extern long CResult_SiPrefixBolt11ParseErrorZ_ok(SiPrefix _o);
        // struct LDKCResult_SiPrefixBolt11ParseErrorZ CResult_SiPrefixBolt11ParseErrorZ_err(struct LDKBolt11ParseError e);
@@ -6230,6 +6535,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BigSizeDecodeErrorZ_clone_ptr")] public static extern long CResult_BigSizeDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_BigSizeDecodeErrorZ CResult_BigSizeDecodeErrorZ_clone(const struct LDKCResult_BigSizeDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BigSizeDecodeErrorZ_clone")] public static extern long CResult_BigSizeDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_ok(struct LDKUntrustedString o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_ok")] public static extern long CResult_UntrustedStringDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_err")] public static extern long CResult_UntrustedStringDecodeErrorZ_err(long _e);
+       // bool CResult_UntrustedStringDecodeErrorZ_is_ok(const struct LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_is_ok")] public static extern bool CResult_UntrustedStringDecodeErrorZ_is_ok(long _o);
+       // void CResult_UntrustedStringDecodeErrorZ_free(struct LDKCResult_UntrustedStringDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_free")] public static extern void CResult_UntrustedStringDecodeErrorZ_free(long __res);
+       // uint64_t CResult_UntrustedStringDecodeErrorZ_clone_ptr(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone_ptr")] public static extern long CResult_UntrustedStringDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_clone(const struct LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone")] public static extern long CResult_UntrustedStringDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_HostnameDecodeErrorZ CResult_HostnameDecodeErrorZ_ok(struct LDKHostname o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_HostnameDecodeErrorZ_ok")] public static extern long CResult_HostnameDecodeErrorZ_ok(long _o);
        // struct LDKCResult_HostnameDecodeErrorZ CResult_HostnameDecodeErrorZ_err(struct LDKDecodeError e);
@@ -6266,18 +6583,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_clone_ptr")] public static extern long CResult_TransactionU16LenLimitedDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_TransactionU16LenLimitedDecodeErrorZ CResult_TransactionU16LenLimitedDecodeErrorZ_clone(const struct LDKCResult_TransactionU16LenLimitedDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TransactionU16LenLimitedDecodeErrorZ_clone")] public static extern long CResult_TransactionU16LenLimitedDecodeErrorZ_clone(long _orig);
-       // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_ok(struct LDKUntrustedString o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_ok")] public static extern long CResult_UntrustedStringDecodeErrorZ_ok(long _o);
-       // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_err")] public static extern long CResult_UntrustedStringDecodeErrorZ_err(long _e);
-       // bool CResult_UntrustedStringDecodeErrorZ_is_ok(const struct LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_is_ok")] public static extern bool CResult_UntrustedStringDecodeErrorZ_is_ok(long _o);
-       // void CResult_UntrustedStringDecodeErrorZ_free(struct LDKCResult_UntrustedStringDecodeErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_free")] public static extern void CResult_UntrustedStringDecodeErrorZ_free(long __res);
-       // uint64_t CResult_UntrustedStringDecodeErrorZ_clone_ptr(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone_ptr")] public static extern long CResult_UntrustedStringDecodeErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_clone(const struct LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_UntrustedStringDecodeErrorZ_clone")] public static extern long CResult_UntrustedStringDecodeErrorZ_clone(long _orig);
        // struct LDKCResult_ChannelIdDecodeErrorZ CResult_ChannelIdDecodeErrorZ_ok(struct LDKChannelId o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ChannelIdDecodeErrorZ_ok")] public static extern long CResult_ChannelIdDecodeErrorZ_ok(long _o);
        // struct LDKCResult_ChannelIdDecodeErrorZ CResult_ChannelIdDecodeErrorZ_err(struct LDKDecodeError e);
@@ -6298,6 +6603,32 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple__u832u16Z_new")] public static extern long C2Tuple__u832u16Z_new(long _a, short _b);
        // void C2Tuple__u832u16Z_free(struct LDKC2Tuple__u832u16Z _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple__u832u16Z_free")] public static extern void C2Tuple__u832u16Z_free(long __res);
+       // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_ok(struct LDKBlindedPayInfo o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_ok")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_err")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_err(long _e);
+       // bool CResult_BlindedPayInfoDecodeErrorZ_is_ok(const struct LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_is_ok")] public static extern bool CResult_BlindedPayInfoDecodeErrorZ_is_ok(long _o);
+       // void CResult_BlindedPayInfoDecodeErrorZ_free(struct LDKCResult_BlindedPayInfoDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_free")] public static extern void CResult_BlindedPayInfoDecodeErrorZ_free(long __res);
+       // uint64_t CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone_ptr")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_clone(const struct LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPayInfoDecodeErrorZ_clone")] public static extern long CResult_BlindedPayInfoDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_BlindedPaymentPathNoneZ CResult_BlindedPaymentPathNoneZ_ok(struct LDKBlindedPaymentPath o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_ok")] public static extern long CResult_BlindedPaymentPathNoneZ_ok(long _o);
+       // struct LDKCResult_BlindedPaymentPathNoneZ CResult_BlindedPaymentPathNoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_err")] public static extern long CResult_BlindedPaymentPathNoneZ_err();
+       // bool CResult_BlindedPaymentPathNoneZ_is_ok(const struct LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_is_ok")] public static extern bool CResult_BlindedPaymentPathNoneZ_is_ok(long _o);
+       // void CResult_BlindedPaymentPathNoneZ_free(struct LDKCResult_BlindedPaymentPathNoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_free")] public static extern void CResult_BlindedPaymentPathNoneZ_free(long __res);
+       // uint64_t CResult_BlindedPaymentPathNoneZ_clone_ptr(LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_clone_ptr")] public static extern long CResult_BlindedPaymentPathNoneZ_clone_ptr(long _arg);
+       // struct LDKCResult_BlindedPaymentPathNoneZ CResult_BlindedPaymentPathNoneZ_clone(const struct LDKCResult_BlindedPaymentPathNoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPaymentPathNoneZ_clone")] public static extern long CResult_BlindedPaymentPathNoneZ_clone(long _orig);
+       // void CVec_PaymentForwardNodeZ_free(struct LDKCVec_PaymentForwardNodeZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_PaymentForwardNodeZ_free")] public static extern void CVec_PaymentForwardNodeZ_free(long __res);
        // struct LDKCResult_PaymentRelayDecodeErrorZ CResult_PaymentRelayDecodeErrorZ_ok(struct LDKPaymentRelay o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_PaymentRelayDecodeErrorZ_ok")] public static extern long CResult_PaymentRelayDecodeErrorZ_ok(long _o);
        // struct LDKCResult_PaymentRelayDecodeErrorZ CResult_PaymentRelayDecodeErrorZ_err(struct LDKDecodeError e);
@@ -6370,38 +6701,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_clone_ptr")] public static extern long CResult_Bolt12RefundContextDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_Bolt12RefundContextDecodeErrorZ CResult_Bolt12RefundContextDecodeErrorZ_clone(const struct LDKCResult_Bolt12RefundContextDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt12RefundContextDecodeErrorZ_clone")] public static extern long CResult_Bolt12RefundContextDecodeErrorZ_clone(long _orig);
-       // struct LDKCResult_StrSecp256k1ErrorZ CResult_StrSecp256k1ErrorZ_ok(struct LDKStr o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_ok")] public static extern long CResult_StrSecp256k1ErrorZ_ok(long _o);
-       // struct LDKCResult_StrSecp256k1ErrorZ CResult_StrSecp256k1ErrorZ_err(enum LDKSecp256k1Error e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_err")] public static extern long CResult_StrSecp256k1ErrorZ_err(Secp256k1Error _e);
-       // bool CResult_StrSecp256k1ErrorZ_is_ok(const struct LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_is_ok")] public static extern bool CResult_StrSecp256k1ErrorZ_is_ok(long _o);
-       // void CResult_StrSecp256k1ErrorZ_free(struct LDKCResult_StrSecp256k1ErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_free")] public static extern void CResult_StrSecp256k1ErrorZ_free(long __res);
-       // uint64_t CResult_StrSecp256k1ErrorZ_clone_ptr(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_clone_ptr")] public static extern long CResult_StrSecp256k1ErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_StrSecp256k1ErrorZ CResult_StrSecp256k1ErrorZ_clone(const struct LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_StrSecp256k1ErrorZ_clone")] public static extern long CResult_StrSecp256k1ErrorZ_clone(long _orig);
-       // uint64_t C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone_ptr(long _arg);
-       // struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(const struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_clone(long _orig);
-       // struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(struct LDKThirtyTwoBytes a, struct LDKRecipientOnionFields b, struct LDKRouteParameters c);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new")] public static extern long C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_new(long _a, long _b, long _c);
-       // void C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free")] public static extern void C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ_free(long __res);
-       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(struct LDKC3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_ok(long _o);
-       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_err();
-       // bool CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(const struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok")] public static extern bool CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_is_ok(long _o);
-       // void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free")] public static extern void CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_free(long __res);
-       // uint64_t CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone_ptr(long _arg);
-       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(const struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone")] public static extern long CResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ_clone(long _orig);
        // struct LDKCResult_TxOutUtxoLookupErrorZ CResult_TxOutUtxoLookupErrorZ_ok(struct LDKTxOut o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TxOutUtxoLookupErrorZ_ok")] public static extern long CResult_TxOutUtxoLookupErrorZ_ok(long _o);
        // struct LDKCResult_TxOutUtxoLookupErrorZ CResult_TxOutUtxoLookupErrorZ_err(enum LDKUtxoLookupError e);
@@ -6414,6 +6713,28 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone_ptr")] public static extern long CResult_TxOutUtxoLookupErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_TxOutUtxoLookupErrorZ CResult_TxOutUtxoLookupErrorZ_clone(const struct LDKCResult_TxOutUtxoLookupErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_TxOutUtxoLookupErrorZ_clone")] public static extern long CResult_TxOutUtxoLookupErrorZ_clone(long _orig);
+       // struct LDKCResult_ResponderDecodeErrorZ CResult_ResponderDecodeErrorZ_ok(struct LDKResponder o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_ok")] public static extern long CResult_ResponderDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_ResponderDecodeErrorZ CResult_ResponderDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_err")] public static extern long CResult_ResponderDecodeErrorZ_err(long _e);
+       // bool CResult_ResponderDecodeErrorZ_is_ok(const struct LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_is_ok")] public static extern bool CResult_ResponderDecodeErrorZ_is_ok(long _o);
+       // void CResult_ResponderDecodeErrorZ_free(struct LDKCResult_ResponderDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_free")] public static extern void CResult_ResponderDecodeErrorZ_free(long __res);
+       // uint64_t CResult_ResponderDecodeErrorZ_clone_ptr(LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_clone_ptr")] public static extern long CResult_ResponderDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_ResponderDecodeErrorZ CResult_ResponderDecodeErrorZ_clone(const struct LDKCResult_ResponderDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_ResponderDecodeErrorZ_clone")] public static extern long CResult_ResponderDecodeErrorZ_clone(long _orig);
+       // struct LDKCOption_MessageContextZ COption_MessageContextZ_some(struct LDKMessageContext o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_MessageContextZ_some")] public static extern long COption_MessageContextZ_some(long _o);
+       // struct LDKCOption_MessageContextZ COption_MessageContextZ_none(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_MessageContextZ_none")] public static extern long COption_MessageContextZ_none();
+       // void COption_MessageContextZ_free(struct LDKCOption_MessageContextZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_MessageContextZ_free")] public static extern void COption_MessageContextZ_free(long __res);
+       // uint64_t COption_MessageContextZ_clone_ptr(LDKCOption_MessageContextZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_MessageContextZ_clone_ptr")] public static extern long COption_MessageContextZ_clone_ptr(long _arg);
+       // struct LDKCOption_MessageContextZ COption_MessageContextZ_clone(const struct LDKCOption_MessageContextZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_COption_MessageContextZ_clone")] public static extern long COption_MessageContextZ_clone(long _orig);
        // uint64_t C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_clone_ptr(LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_clone_ptr")] public static extern long C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_clone_ptr(long _arg);
        // struct LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ_clone(const struct LDKC3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ *NONNULL_PTR orig);
@@ -6458,44 +6779,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SendSuccessSendErrorZ_clone_ptr")] public static extern long CResult_SendSuccessSendErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_SendSuccessSendErrorZ CResult_SendSuccessSendErrorZ_clone(const struct LDKCResult_SendSuccessSendErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_SendSuccessSendErrorZ_clone")] public static extern long CResult_SendSuccessSendErrorZ_clone(long _orig);
-       // struct LDKCResult_BlindedPathNoneZ CResult_BlindedPathNoneZ_ok(struct LDKBlindedPath o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_ok")] public static extern long CResult_BlindedPathNoneZ_ok(long _o);
-       // struct LDKCResult_BlindedPathNoneZ CResult_BlindedPathNoneZ_err(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_err")] public static extern long CResult_BlindedPathNoneZ_err();
-       // bool CResult_BlindedPathNoneZ_is_ok(const struct LDKCResult_BlindedPathNoneZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_is_ok")] public static extern bool CResult_BlindedPathNoneZ_is_ok(long _o);
-       // void CResult_BlindedPathNoneZ_free(struct LDKCResult_BlindedPathNoneZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_free")] public static extern void CResult_BlindedPathNoneZ_free(long __res);
-       // uint64_t CResult_BlindedPathNoneZ_clone_ptr(LDKCResult_BlindedPathNoneZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_clone_ptr")] public static extern long CResult_BlindedPathNoneZ_clone_ptr(long _arg);
-       // struct LDKCResult_BlindedPathNoneZ CResult_BlindedPathNoneZ_clone(const struct LDKCResult_BlindedPathNoneZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathNoneZ_clone")] public static extern long CResult_BlindedPathNoneZ_clone(long _orig);
-       // struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(struct LDKC2Tuple_BlindedPayInfoBlindedPathZ o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok")] public static extern long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(long _o);
-       // struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err")] public static extern long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
-       // bool CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(const struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok")] public static extern bool CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(long _o);
-       // void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free")] public static extern void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(long __res);
-       // uint64_t CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr")] public static extern long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(long _arg);
-       // struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(const struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone")] public static extern long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(long _orig);
-       // void CVec_ForwardNodeZ_free(struct LDKCVec_ForwardNodeZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_ForwardNodeZ_free")] public static extern void CVec_ForwardNodeZ_free(long __res);
-       // struct LDKCResult_BlindedPathDecodeErrorZ CResult_BlindedPathDecodeErrorZ_ok(struct LDKBlindedPath o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_ok")] public static extern long CResult_BlindedPathDecodeErrorZ_ok(long _o);
-       // struct LDKCResult_BlindedPathDecodeErrorZ CResult_BlindedPathDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_err")] public static extern long CResult_BlindedPathDecodeErrorZ_err(long _e);
-       // bool CResult_BlindedPathDecodeErrorZ_is_ok(const struct LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_is_ok")] public static extern bool CResult_BlindedPathDecodeErrorZ_is_ok(long _o);
-       // void CResult_BlindedPathDecodeErrorZ_free(struct LDKCResult_BlindedPathDecodeErrorZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_free")] public static extern void CResult_BlindedPathDecodeErrorZ_free(long __res);
-       // uint64_t CResult_BlindedPathDecodeErrorZ_clone_ptr(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_clone_ptr")] public static extern long CResult_BlindedPathDecodeErrorZ_clone_ptr(long _arg);
-       // struct LDKCResult_BlindedPathDecodeErrorZ CResult_BlindedPathDecodeErrorZ_clone(const struct LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedPathDecodeErrorZ_clone")] public static extern long CResult_BlindedPathDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_NoneSendErrorZ CResult_NoneSendErrorZ_ok(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_ok")] public static extern long CResult_NoneSendErrorZ_ok();
+       // struct LDKCResult_NoneSendErrorZ CResult_NoneSendErrorZ_err(struct LDKSendError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_err")] public static extern long CResult_NoneSendErrorZ_err(long _e);
+       // bool CResult_NoneSendErrorZ_is_ok(const struct LDKCResult_NoneSendErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_is_ok")] public static extern bool CResult_NoneSendErrorZ_is_ok(long _o);
+       // void CResult_NoneSendErrorZ_free(struct LDKCResult_NoneSendErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_free")] public static extern void CResult_NoneSendErrorZ_free(long __res);
+       // uint64_t CResult_NoneSendErrorZ_clone_ptr(LDKCResult_NoneSendErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_clone_ptr")] public static extern long CResult_NoneSendErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_NoneSendErrorZ CResult_NoneSendErrorZ_clone(const struct LDKCResult_NoneSendErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_NoneSendErrorZ_clone")] public static extern long CResult_NoneSendErrorZ_clone(long _orig);
        // struct LDKCResult_BlindedHopDecodeErrorZ CResult_BlindedHopDecodeErrorZ_ok(struct LDKBlindedHop o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedHopDecodeErrorZ_ok")] public static extern long CResult_BlindedHopDecodeErrorZ_ok(long _o);
        // struct LDKCResult_BlindedHopDecodeErrorZ CResult_BlindedHopDecodeErrorZ_err(struct LDKDecodeError e);
@@ -6508,10 +6803,24 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedHopDecodeErrorZ_clone_ptr")] public static extern long CResult_BlindedHopDecodeErrorZ_clone_ptr(long _arg);
        // struct LDKCResult_BlindedHopDecodeErrorZ CResult_BlindedHopDecodeErrorZ_clone(const struct LDKCResult_BlindedHopDecodeErrorZ *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedHopDecodeErrorZ_clone")] public static extern long CResult_BlindedHopDecodeErrorZ_clone(long _orig);
-       // struct LDKCResult_InvoiceErrorDecodeErrorZ CResult_InvoiceErrorDecodeErrorZ_ok(struct LDKInvoiceError o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceErrorDecodeErrorZ_ok")] public static extern long CResult_InvoiceErrorDecodeErrorZ_ok(long _o);
-       // struct LDKCResult_InvoiceErrorDecodeErrorZ CResult_InvoiceErrorDecodeErrorZ_err(struct LDKDecodeError e);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceErrorDecodeErrorZ_err")] public static extern long CResult_InvoiceErrorDecodeErrorZ_err(long _e);
+       // void CVec_PhantomRouteHintsZ_free(struct LDKCVec_PhantomRouteHintsZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_PhantomRouteHintsZ_free")] public static extern void CVec_PhantomRouteHintsZ_free(long __res);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(struct LDKBolt11Invoice o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_ok")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_ok(long _o);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ CResult_Bolt11InvoiceSignOrCreationErrorZ_err(struct LDKSignOrCreationError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_err")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_err(long _e);
+       // bool CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(const struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok")] public static extern bool CResult_Bolt11InvoiceSignOrCreationErrorZ_is_ok(long _o);
+       // void CResult_Bolt11InvoiceSignOrCreationErrorZ_free(struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_free")] public static extern void CResult_Bolt11InvoiceSignOrCreationErrorZ_free(long __res);
+       // uint64_t CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(const struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_Bolt11InvoiceSignOrCreationErrorZ_clone")] public static extern long CResult_Bolt11InvoiceSignOrCreationErrorZ_clone(long _orig);
+       // struct LDKCResult_InvoiceErrorDecodeErrorZ CResult_InvoiceErrorDecodeErrorZ_ok(struct LDKInvoiceError o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceErrorDecodeErrorZ_ok")] public static extern long CResult_InvoiceErrorDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_InvoiceErrorDecodeErrorZ CResult_InvoiceErrorDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceErrorDecodeErrorZ_err")] public static extern long CResult_InvoiceErrorDecodeErrorZ_err(long _e);
        // bool CResult_InvoiceErrorDecodeErrorZ_is_ok(const struct LDKCResult_InvoiceErrorDecodeErrorZ *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_InvoiceErrorDecodeErrorZ_is_ok")] public static extern bool CResult_InvoiceErrorDecodeErrorZ_is_ok(long _o);
        // void CResult_InvoiceErrorDecodeErrorZ_free(struct LDKCResult_InvoiceErrorDecodeErrorZ _res);
@@ -6662,18 +6971,64 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointChannelIdZ_free")] public static extern void C2Tuple_OutPointChannelIdZ_free(long __res);
        // void CVec_C2Tuple_OutPointChannelIdZZ_free(struct LDKCVec_C2Tuple_OutPointChannelIdZZ _res);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_OutPointChannelIdZZ_free")] public static extern void CVec_C2Tuple_OutPointChannelIdZZ_free(long __res);
-       // void CVec_MonitorUpdateIdZ_free(struct LDKCVec_MonitorUpdateIdZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_MonitorUpdateIdZ_free")] public static extern void CVec_MonitorUpdateIdZ_free(long __res);
-       // uint64_t C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr")] public static extern long C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(long _arg);
-       // struct LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(const struct LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone")] public static extern long C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(long _orig);
-       // struct LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(struct LDKOutPoint a, struct LDKCVec_MonitorUpdateIdZ b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new")] public static extern long C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(long _a, long _b);
-       // void C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(struct LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free")] public static extern void C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(long __res);
-       // void CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free(struct LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ _res);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free")] public static extern void CVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ_free(long __res);
+       // uint64_t C2Tuple_OutPointCVec_u64ZZ_clone_ptr(LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_u64ZZ_clone_ptr")] public static extern long C2Tuple_OutPointCVec_u64ZZ_clone_ptr(long _arg);
+       // struct LDKC2Tuple_OutPointCVec_u64ZZ C2Tuple_OutPointCVec_u64ZZ_clone(const struct LDKC2Tuple_OutPointCVec_u64ZZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_u64ZZ_clone")] public static extern long C2Tuple_OutPointCVec_u64ZZ_clone(long _orig);
+       // struct LDKC2Tuple_OutPointCVec_u64ZZ C2Tuple_OutPointCVec_u64ZZ_new(struct LDKOutPoint a, struct LDKCVec_u64Z b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_u64ZZ_new")] public static extern long C2Tuple_OutPointCVec_u64ZZ_new(long _a, long _b);
+       // void C2Tuple_OutPointCVec_u64ZZ_free(struct LDKC2Tuple_OutPointCVec_u64ZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_C2Tuple_OutPointCVec_u64ZZ_free")] public static extern void C2Tuple_OutPointCVec_u64ZZ_free(long __res);
+       // void CVec_C2Tuple_OutPointCVec_u64ZZZ_free(struct LDKCVec_C2Tuple_OutPointCVec_u64ZZZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CVec_C2Tuple_OutPointCVec_u64ZZZ_free")] public static extern void CVec_C2Tuple_OutPointCVec_u64ZZZ_free(long __res);
+       // struct LDKCResult_BlindedMessagePathDecodeErrorZ CResult_BlindedMessagePathDecodeErrorZ_ok(struct LDKBlindedMessagePath o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_ok")] public static extern long CResult_BlindedMessagePathDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_BlindedMessagePathDecodeErrorZ CResult_BlindedMessagePathDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_err")] public static extern long CResult_BlindedMessagePathDecodeErrorZ_err(long _e);
+       // bool CResult_BlindedMessagePathDecodeErrorZ_is_ok(const struct LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_is_ok")] public static extern bool CResult_BlindedMessagePathDecodeErrorZ_is_ok(long _o);
+       // void CResult_BlindedMessagePathDecodeErrorZ_free(struct LDKCResult_BlindedMessagePathDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_free")] public static extern void CResult_BlindedMessagePathDecodeErrorZ_free(long __res);
+       // uint64_t CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_clone_ptr")] public static extern long CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_BlindedMessagePathDecodeErrorZ CResult_BlindedMessagePathDecodeErrorZ_clone(const struct LDKCResult_BlindedMessagePathDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathDecodeErrorZ_clone")] public static extern long CResult_BlindedMessagePathDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_BlindedMessagePathNoneZ CResult_BlindedMessagePathNoneZ_ok(struct LDKBlindedMessagePath o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_ok")] public static extern long CResult_BlindedMessagePathNoneZ_ok(long _o);
+       // struct LDKCResult_BlindedMessagePathNoneZ CResult_BlindedMessagePathNoneZ_err(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_err")] public static extern long CResult_BlindedMessagePathNoneZ_err();
+       // bool CResult_BlindedMessagePathNoneZ_is_ok(const struct LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_is_ok")] public static extern bool CResult_BlindedMessagePathNoneZ_is_ok(long _o);
+       // void CResult_BlindedMessagePathNoneZ_free(struct LDKCResult_BlindedMessagePathNoneZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_free")] public static extern void CResult_BlindedMessagePathNoneZ_free(long __res);
+       // uint64_t CResult_BlindedMessagePathNoneZ_clone_ptr(LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_clone_ptr")] public static extern long CResult_BlindedMessagePathNoneZ_clone_ptr(long _arg);
+       // struct LDKCResult_BlindedMessagePathNoneZ CResult_BlindedMessagePathNoneZ_clone(const struct LDKCResult_BlindedMessagePathNoneZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_BlindedMessagePathNoneZ_clone")] public static extern long CResult_BlindedMessagePathNoneZ_clone(long _orig);
+       // struct LDKCResult_MessageContextDecodeErrorZ CResult_MessageContextDecodeErrorZ_ok(struct LDKMessageContext o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_ok")] public static extern long CResult_MessageContextDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_MessageContextDecodeErrorZ CResult_MessageContextDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_err")] public static extern long CResult_MessageContextDecodeErrorZ_err(long _e);
+       // bool CResult_MessageContextDecodeErrorZ_is_ok(const struct LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_is_ok")] public static extern bool CResult_MessageContextDecodeErrorZ_is_ok(long _o);
+       // void CResult_MessageContextDecodeErrorZ_free(struct LDKCResult_MessageContextDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_free")] public static extern void CResult_MessageContextDecodeErrorZ_free(long __res);
+       // uint64_t CResult_MessageContextDecodeErrorZ_clone_ptr(LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_clone_ptr")] public static extern long CResult_MessageContextDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_MessageContextDecodeErrorZ CResult_MessageContextDecodeErrorZ_clone(const struct LDKCResult_MessageContextDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_MessageContextDecodeErrorZ_clone")] public static extern long CResult_MessageContextDecodeErrorZ_clone(long _orig);
+       // struct LDKCResult_OffersContextDecodeErrorZ CResult_OffersContextDecodeErrorZ_ok(struct LDKOffersContext o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_ok")] public static extern long CResult_OffersContextDecodeErrorZ_ok(long _o);
+       // struct LDKCResult_OffersContextDecodeErrorZ CResult_OffersContextDecodeErrorZ_err(struct LDKDecodeError e);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_err")] public static extern long CResult_OffersContextDecodeErrorZ_err(long _e);
+       // bool CResult_OffersContextDecodeErrorZ_is_ok(const struct LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_is_ok")] public static extern bool CResult_OffersContextDecodeErrorZ_is_ok(long _o);
+       // void CResult_OffersContextDecodeErrorZ_free(struct LDKCResult_OffersContextDecodeErrorZ _res);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_free")] public static extern void CResult_OffersContextDecodeErrorZ_free(long __res);
+       // uint64_t CResult_OffersContextDecodeErrorZ_clone_ptr(LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_clone_ptr")] public static extern long CResult_OffersContextDecodeErrorZ_clone_ptr(long _arg);
+       // struct LDKCResult_OffersContextDecodeErrorZ CResult_OffersContextDecodeErrorZ_clone(const struct LDKCResult_OffersContextDecodeErrorZ *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CResult_OffersContextDecodeErrorZ_clone")] public static extern long CResult_OffersContextDecodeErrorZ_clone(long _orig);
        // void APIError_free(struct LDKAPIError this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_APIError_free")] public static extern void APIError_free(long _this_ptr);
        // uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg);
@@ -6718,6 +7073,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BigSize_write")] public static extern long BigSize_write(long _obj);
        // struct LDKCResult_BigSizeDecodeErrorZ BigSize_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BigSize_read")] public static extern long BigSize_read(long _ser);
+       // struct LDKCVec_u8Z UntrustedString_write(const struct LDKUntrustedString *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_write")] public static extern long UntrustedString_write(long _obj);
+       // struct LDKCResult_UntrustedStringDecodeErrorZ UntrustedString_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_read")] public static extern long UntrustedString_read(long _ser);
        // void Hostname_free(struct LDKHostname this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Hostname_free")] public static extern void Hostname_free(long _this_obj);
        // uint64_t Hostname_clone_ptr(LDKHostname *NONNULL_PTR arg);
@@ -6756,14 +7115,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TransactionU16LenLimited_write")] public static extern long TransactionU16LenLimited_write(long _obj);
        // struct LDKCResult_TransactionU16LenLimitedDecodeErrorZ TransactionU16LenLimited_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TransactionU16LenLimited_read")] public static extern long TransactionU16LenLimited_read(long _ser);
-       // struct LDKCResult_StrSecp256k1ErrorZ sign(struct LDKu8slice msg, const uint8_t (*sk)[32]);
+       // struct LDKStr sign(struct LDKu8slice msg, const uint8_t (*sk)[32]);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_sign")] public static extern long sign(long _msg, long _sk);
        // struct LDKCResult_PublicKeySecp256k1ErrorZ recover_pk(struct LDKu8slice msg, struct LDKStr sig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_recover_pk")] public static extern long recover_pk(long _msg, long _sig);
        // bool verify(struct LDKu8slice msg, struct LDKStr sig, struct LDKPublicKey pk);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_verify")] public static extern bool verify(long _msg, long _sig, long _pk);
-       // struct LDKCVec_u8Z construct_invoice_preimage(struct LDKu8slice hrp_bytes, struct LDKCVec_U5Z data_without_signature);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_construct_invoice_preimage")] public static extern long construct_invoice_preimage(long _hrp_bytes, long _data_without_signature);
        // void KVStore_free(struct LDKKVStore this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_KVStore_free")] public static extern void KVStore_free(long _this_ptr);
        // void Persister_free(struct LDKPersister this_ptr);
@@ -6772,12 +7129,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_read_channel_monitors")] public static extern long read_channel_monitors(long _kv_store, long _entropy_source, long _signer_provider);
        // void MonitorUpdatingPersister_free(struct LDKMonitorUpdatingPersister this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_free")] public static extern void MonitorUpdatingPersister_free(long _this_obj);
-       // MUST_USE_RES struct LDKMonitorUpdatingPersister MonitorUpdatingPersister_new(struct LDKKVStore kv_store, struct LDKLogger logger, uint64_t maximum_pending_updates, struct LDKEntropySource entropy_source, struct LDKSignerProvider signer_provider);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_new")] public static extern long MonitorUpdatingPersister_new(long _kv_store, long _logger, long _maximum_pending_updates, long _entropy_source, long _signer_provider);
-       // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ MonitorUpdatingPersister_read_all_channel_monitors_with_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, const struct LDKFeeEstimator *NONNULL_PTR fee_estimator);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_read_all_channel_monitors_with_updates")] public static extern long MonitorUpdatingPersister_read_all_channel_monitors_with_updates(long _this_arg, long _broadcaster, long _fee_estimator);
-       // MUST_USE_RES struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ MonitorUpdatingPersister_read_channel_monitor_with_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, const struct LDKFeeEstimator *NONNULL_PTR fee_estimator, struct LDKStr monitor_key);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_read_channel_monitor_with_updates")] public static extern long MonitorUpdatingPersister_read_channel_monitor_with_updates(long _this_arg, long _broadcaster, long _fee_estimator, long _monitor_key);
+       // MUST_USE_RES struct LDKMonitorUpdatingPersister MonitorUpdatingPersister_new(struct LDKKVStore kv_store, struct LDKLogger logger, uint64_t maximum_pending_updates, struct LDKEntropySource entropy_source, struct LDKSignerProvider signer_provider, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_new")] public static extern long MonitorUpdatingPersister_new(long _kv_store, long _logger, long _maximum_pending_updates, long _entropy_source, long _signer_provider, long _broadcaster, long _fee_estimator);
+       // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ MonitorUpdatingPersister_read_all_channel_monitors_with_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_read_all_channel_monitors_with_updates")] public static extern long MonitorUpdatingPersister_read_all_channel_monitors_with_updates(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ MonitorUpdatingPersister_read_channel_monitor_with_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, struct LDKStr monitor_key);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_read_channel_monitor_with_updates")] public static extern long MonitorUpdatingPersister_read_channel_monitor_with_updates(long _this_arg, long _monitor_key);
        // MUST_USE_RES struct LDKCResult_NoneIOErrorZ MonitorUpdatingPersister_cleanup_stale_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, bool lazy);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdatingPersister_cleanup_stale_updates")] public static extern long MonitorUpdatingPersister_cleanup_stale_updates(long _this_arg, bool _lazy);
        // struct LDKPersist MonitorUpdatingPersister_as_Persist(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg);
@@ -6800,38 +7157,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_vout_from_scid")] public static extern short vout_from_scid(long _short_channel_id);
        // struct LDKCResult_u64ShortChannelIdErrorZ scid_from_parts(uint64_t block, uint64_t tx_index, uint64_t vout_index);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_scid_from_parts")] public static extern long scid_from_parts(long _block, long _tx_index, long _vout_index);
-       // void UntrustedString_free(struct LDKUntrustedString this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_free")] public static extern void UntrustedString_free(long _this_obj);
-       // struct LDKStr UntrustedString_get_a(const struct LDKUntrustedString *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_get_a")] public static extern long UntrustedString_get_a(long _this_ptr);
-       // void UntrustedString_set_a(struct LDKUntrustedString *NONNULL_PTR this_ptr, struct LDKStr val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_set_a")] public static extern void UntrustedString_set_a(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKUntrustedString UntrustedString_new(struct LDKStr a_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_new")] public static extern long UntrustedString_new(long _a_arg);
-       // uint64_t UntrustedString_clone_ptr(LDKUntrustedString *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_clone_ptr")] public static extern long UntrustedString_clone_ptr(long _arg);
-       // struct LDKUntrustedString UntrustedString_clone(const struct LDKUntrustedString *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_clone")] public static extern long UntrustedString_clone(long _orig);
-       // bool UntrustedString_eq(const struct LDKUntrustedString *NONNULL_PTR a, const struct LDKUntrustedString *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_eq")] public static extern bool UntrustedString_eq(long _a, long _b);
-       // uint64_t UntrustedString_hash(const struct LDKUntrustedString *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_hash")] public static extern long UntrustedString_hash(long _o);
-       // struct LDKCVec_u8Z UntrustedString_write(const struct LDKUntrustedString *NONNULL_PTR obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_write")] public static extern long UntrustedString_write(long _obj);
-       // struct LDKCResult_UntrustedStringDecodeErrorZ UntrustedString_read(struct LDKu8slice ser);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_read")] public static extern long UntrustedString_read(long _ser);
-       // struct LDKStr UntrustedString_to_str(const struct LDKUntrustedString *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_to_str")] public static extern long UntrustedString_to_str(long _o);
-       // void PrintableString_free(struct LDKPrintableString this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_free")] public static extern void PrintableString_free(long _this_obj);
-       // struct LDKStr PrintableString_get_a(const struct LDKPrintableString *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_get_a")] public static extern long PrintableString_get_a(long _this_ptr);
-       // void PrintableString_set_a(struct LDKPrintableString *NONNULL_PTR this_ptr, struct LDKStr val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_set_a")] public static extern void PrintableString_set_a(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKPrintableString PrintableString_new(struct LDKStr a_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_new")] public static extern long PrintableString_new(long _a_arg);
-       // struct LDKStr PrintableString_to_str(const struct LDKPrintableString *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_to_str")] public static extern long PrintableString_to_str(long _o);
        // void TrackedSpendableOutput_free(struct LDKTrackedSpendableOutput this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TrackedSpendableOutput_free")] public static extern void TrackedSpendableOutput_free(long _this_obj);
        // struct LDKSpendableOutputDescriptor TrackedSpendableOutput_get_descriptor(const struct LDKTrackedSpendableOutput *NONNULL_PTR this_ptr);
@@ -6922,6 +7247,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Sleeper_from_single_future")] public static extern long Sleeper_from_single_future(long _future);
        // MUST_USE_RES struct LDKSleeper Sleeper_from_two_futures(const struct LDKFuture *NONNULL_PTR fut_a, const struct LDKFuture *NONNULL_PTR fut_b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Sleeper_from_two_futures")] public static extern long Sleeper_from_two_futures(long _fut_a, long _fut_b);
+       // MUST_USE_RES struct LDKSleeper Sleeper_from_three_futures(const struct LDKFuture *NONNULL_PTR fut_a, const struct LDKFuture *NONNULL_PTR fut_b, const struct LDKFuture *NONNULL_PTR fut_c);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Sleeper_from_three_futures")] public static extern long Sleeper_from_three_futures(long _fut_a, long _fut_b, long _fut_c);
        // MUST_USE_RES struct LDKSleeper Sleeper_new(struct LDKCVec_FutureZ futures);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Sleeper_new")] public static extern long Sleeper_new(long _futures);
        // void Sleeper_wait(const struct LDKSleeper *NONNULL_PTR this_arg);
@@ -6980,8 +7307,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_get_line")] public static extern int Record_get_line(long _this_ptr);
        // void Record_set_line(struct LDKRecord *NONNULL_PTR this_ptr, uint32_t val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_set_line")] public static extern void Record_set_line(long _this_ptr, int _val);
-       // MUST_USE_RES struct LDKRecord Record_new(enum LDKLevel level_arg, struct LDKPublicKey peer_id_arg, struct LDKChannelId channel_id_arg, struct LDKStr args_arg, struct LDKStr module_path_arg, struct LDKStr file_arg, uint32_t line_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_new")] public static extern long Record_new(Level _level_arg, long _peer_id_arg, long _channel_id_arg, long _args_arg, long _module_path_arg, long _file_arg, int _line_arg);
+       // struct LDKCOption_ThirtyTwoBytesZ Record_get_payment_hash(const struct LDKRecord *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_get_payment_hash")] public static extern long Record_get_payment_hash(long _this_ptr);
+       // void Record_set_payment_hash(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKCOption_ThirtyTwoBytesZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_set_payment_hash")] public static extern void Record_set_payment_hash(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKRecord Record_new(enum LDKLevel level_arg, struct LDKPublicKey peer_id_arg, struct LDKChannelId channel_id_arg, struct LDKStr args_arg, struct LDKStr module_path_arg, struct LDKStr file_arg, uint32_t line_arg, struct LDKCOption_ThirtyTwoBytesZ payment_hash_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_new")] public static extern long Record_new(Level _level_arg, long _peer_id_arg, long _channel_id_arg, long _args_arg, long _module_path_arg, long _file_arg, int _line_arg, long _payment_hash_arg);
        // uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Record_clone_ptr")] public static extern long Record_clone_ptr(long _arg);
        // struct LDKRecord Record_clone(const struct LDKRecord *NONNULL_PTR orig);
@@ -7010,10 +7341,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_get_negotiate_scid_privacy")] public static extern bool ChannelHandshakeConfig_get_negotiate_scid_privacy(long _this_ptr);
        // void ChannelHandshakeConfig_set_negotiate_scid_privacy(struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr, bool val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_set_negotiate_scid_privacy")] public static extern void ChannelHandshakeConfig_set_negotiate_scid_privacy(long _this_ptr, bool _val);
-       // bool ChannelHandshakeConfig_get_announced_channel(const struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_get_announced_channel")] public static extern bool ChannelHandshakeConfig_get_announced_channel(long _this_ptr);
-       // void ChannelHandshakeConfig_set_announced_channel(struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr, bool val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_set_announced_channel")] public static extern void ChannelHandshakeConfig_set_announced_channel(long _this_ptr, bool _val);
+       // bool ChannelHandshakeConfig_get_announce_for_forwarding(const struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_get_announce_for_forwarding")] public static extern bool ChannelHandshakeConfig_get_announce_for_forwarding(long _this_ptr);
+       // void ChannelHandshakeConfig_set_announce_for_forwarding(struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr, bool val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_set_announce_for_forwarding")] public static extern void ChannelHandshakeConfig_set_announce_for_forwarding(long _this_ptr, bool _val);
        // bool ChannelHandshakeConfig_get_commit_upfront_shutdown_pubkey(const struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_get_commit_upfront_shutdown_pubkey")] public static extern bool ChannelHandshakeConfig_get_commit_upfront_shutdown_pubkey(long _this_ptr);
        // void ChannelHandshakeConfig_set_commit_upfront_shutdown_pubkey(struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr, bool val);
@@ -7030,8 +7361,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_get_our_max_accepted_htlcs")] public static extern short ChannelHandshakeConfig_get_our_max_accepted_htlcs(long _this_ptr);
        // void ChannelHandshakeConfig_set_our_max_accepted_htlcs(struct LDKChannelHandshakeConfig *NONNULL_PTR this_ptr, uint16_t val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_set_our_max_accepted_htlcs")] public static extern void ChannelHandshakeConfig_set_our_max_accepted_htlcs(long _this_ptr, short _val);
-       // MUST_USE_RES struct LDKChannelHandshakeConfig ChannelHandshakeConfig_new(uint32_t minimum_depth_arg, uint16_t our_to_self_delay_arg, uint64_t our_htlc_minimum_msat_arg, uint8_t max_inbound_htlc_value_in_flight_percent_of_channel_arg, bool negotiate_scid_privacy_arg, bool announced_channel_arg, bool commit_upfront_shutdown_pubkey_arg, uint32_t their_channel_reserve_proportional_millionths_arg, bool negotiate_anchors_zero_fee_htlc_tx_arg, uint16_t our_max_accepted_htlcs_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_new")] public static extern long ChannelHandshakeConfig_new(int _minimum_depth_arg, short _our_to_self_delay_arg, long _our_htlc_minimum_msat_arg, byte _max_inbound_htlc_value_in_flight_percent_of_channel_arg, bool _negotiate_scid_privacy_arg, bool _announced_channel_arg, bool _commit_upfront_shutdown_pubkey_arg, int _their_channel_reserve_proportional_millionths_arg, bool _negotiate_anchors_zero_fee_htlc_tx_arg, short _our_max_accepted_htlcs_arg);
+       // MUST_USE_RES struct LDKChannelHandshakeConfig ChannelHandshakeConfig_new(uint32_t minimum_depth_arg, uint16_t our_to_self_delay_arg, uint64_t our_htlc_minimum_msat_arg, uint8_t max_inbound_htlc_value_in_flight_percent_of_channel_arg, bool negotiate_scid_privacy_arg, bool announce_for_forwarding_arg, bool commit_upfront_shutdown_pubkey_arg, uint32_t their_channel_reserve_proportional_millionths_arg, bool negotiate_anchors_zero_fee_htlc_tx_arg, uint16_t our_max_accepted_htlcs_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_new")] public static extern long ChannelHandshakeConfig_new(int _minimum_depth_arg, short _our_to_self_delay_arg, long _our_htlc_minimum_msat_arg, byte _max_inbound_htlc_value_in_flight_percent_of_channel_arg, bool _negotiate_scid_privacy_arg, bool _announce_for_forwarding_arg, bool _commit_upfront_shutdown_pubkey_arg, int _their_channel_reserve_proportional_millionths_arg, bool _negotiate_anchors_zero_fee_htlc_tx_arg, short _our_max_accepted_htlcs_arg);
        // uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelHandshakeConfig_clone_ptr")] public static extern long ChannelHandshakeConfig_clone_ptr(long _arg);
        // struct LDKChannelHandshakeConfig ChannelHandshakeConfig_clone(const struct LDKChannelHandshakeConfig *NONNULL_PTR orig);
@@ -7170,8 +7501,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelConfigUpdate_set_force_close_avoidance_max_fee_satoshis")] public static extern void ChannelConfigUpdate_set_force_close_avoidance_max_fee_satoshis(long _this_ptr, long _val);
        // MUST_USE_RES struct LDKChannelConfigUpdate ChannelConfigUpdate_new(struct LDKCOption_u32Z forwarding_fee_proportional_millionths_arg, struct LDKCOption_u32Z forwarding_fee_base_msat_arg, struct LDKCOption_u16Z cltv_expiry_delta_arg, struct LDKCOption_MaxDustHTLCExposureZ max_dust_htlc_exposure_msat_arg, struct LDKCOption_u64Z force_close_avoidance_max_fee_satoshis_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelConfigUpdate_new")] public static extern long ChannelConfigUpdate_new(long _forwarding_fee_proportional_millionths_arg, long _forwarding_fee_base_msat_arg, long _cltv_expiry_delta_arg, long _max_dust_htlc_exposure_msat_arg, long _force_close_avoidance_max_fee_satoshis_arg);
-       // MUST_USE_RES struct LDKChannelConfigUpdate ChannelConfigUpdate_default(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelConfigUpdate_default")] public static extern long ChannelConfigUpdate_default();
        // void UserConfig_free(struct LDKUserConfig this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_free")] public static extern void UserConfig_free(long _this_obj);
        // struct LDKChannelHandshakeConfig UserConfig_get_channel_handshake_config(const struct LDKUserConfig *NONNULL_PTR this_ptr);
@@ -7206,8 +7535,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_get_accept_mpp_keysend")] public static extern bool UserConfig_get_accept_mpp_keysend(long _this_ptr);
        // void UserConfig_set_accept_mpp_keysend(struct LDKUserConfig *NONNULL_PTR this_ptr, bool val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_set_accept_mpp_keysend")] public static extern void UserConfig_set_accept_mpp_keysend(long _this_ptr, bool _val);
-       // MUST_USE_RES struct LDKUserConfig UserConfig_new(struct LDKChannelHandshakeConfig channel_handshake_config_arg, struct LDKChannelHandshakeLimits channel_handshake_limits_arg, struct LDKChannelConfig channel_config_arg, bool accept_forwards_to_priv_channels_arg, bool accept_inbound_channels_arg, bool manually_accept_inbound_channels_arg, bool accept_intercept_htlcs_arg, bool accept_mpp_keysend_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_new")] public static extern long UserConfig_new(long _channel_handshake_config_arg, long _channel_handshake_limits_arg, long _channel_config_arg, bool _accept_forwards_to_priv_channels_arg, bool _accept_inbound_channels_arg, bool _manually_accept_inbound_channels_arg, bool _accept_intercept_htlcs_arg, bool _accept_mpp_keysend_arg);
+       // bool UserConfig_get_manually_handle_bolt12_invoices(const struct LDKUserConfig *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_get_manually_handle_bolt12_invoices")] public static extern bool UserConfig_get_manually_handle_bolt12_invoices(long _this_ptr);
+       // void UserConfig_set_manually_handle_bolt12_invoices(struct LDKUserConfig *NONNULL_PTR this_ptr, bool val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_set_manually_handle_bolt12_invoices")] public static extern void UserConfig_set_manually_handle_bolt12_invoices(long _this_ptr, bool _val);
+       // MUST_USE_RES struct LDKUserConfig UserConfig_new(struct LDKChannelHandshakeConfig channel_handshake_config_arg, struct LDKChannelHandshakeLimits channel_handshake_limits_arg, struct LDKChannelConfig channel_config_arg, bool accept_forwards_to_priv_channels_arg, bool accept_inbound_channels_arg, bool manually_accept_inbound_channels_arg, bool accept_intercept_htlcs_arg, bool accept_mpp_keysend_arg, bool manually_handle_bolt12_invoices_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_new")] public static extern long UserConfig_new(long _channel_handshake_config_arg, long _channel_handshake_limits_arg, long _channel_config_arg, bool _accept_forwards_to_priv_channels_arg, bool _accept_inbound_channels_arg, bool _manually_accept_inbound_channels_arg, bool _accept_intercept_htlcs_arg, bool _accept_mpp_keysend_arg, bool _manually_handle_bolt12_invoices_arg);
        // uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UserConfig_clone_ptr")] public static extern long UserConfig_clone_ptr(long _arg);
        // struct LDKUserConfig UserConfig_clone(const struct LDKUserConfig *NONNULL_PTR orig);
@@ -7286,8 +7619,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BroadcasterInterface_free")] public static extern void BroadcasterInterface_free(long _this_ptr);
        // enum LDKConfirmationTarget ConfirmationTarget_clone(const enum LDKConfirmationTarget *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ConfirmationTarget_clone")] public static extern ConfirmationTarget ConfirmationTarget_clone(long _orig);
-       // enum LDKConfirmationTarget ConfirmationTarget_on_chain_sweep(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ConfirmationTarget_on_chain_sweep")] public static extern ConfirmationTarget ConfirmationTarget_on_chain_sweep();
+       // enum LDKConfirmationTarget ConfirmationTarget_maximum_fee_estimate(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ConfirmationTarget_maximum_fee_estimate")] public static extern ConfirmationTarget ConfirmationTarget_maximum_fee_estimate();
+       // enum LDKConfirmationTarget ConfirmationTarget_urgent_on_chain_sweep(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ConfirmationTarget_urgent_on_chain_sweep")] public static extern ConfirmationTarget ConfirmationTarget_urgent_on_chain_sweep();
        // enum LDKConfirmationTarget ConfirmationTarget_min_allowed_anchor_channel_remote_fee(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ConfirmationTarget_min_allowed_anchor_channel_remote_fee")] public static extern ConfirmationTarget ConfirmationTarget_min_allowed_anchor_channel_remote_fee();
        // enum LDKConfirmationTarget ConfirmationTarget_min_allowed_non_anchor_channel_remote_fee(void);
@@ -7306,16 +7641,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ConfirmationTarget_eq")] public static extern bool ConfirmationTarget_eq(long _a, long _b);
        // void FeeEstimator_free(struct LDKFeeEstimator this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FeeEstimator_free")] public static extern void FeeEstimator_free(long _this_ptr);
-       // void MonitorUpdateId_free(struct LDKMonitorUpdateId this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdateId_free")] public static extern void MonitorUpdateId_free(long _this_obj);
-       // uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdateId_clone_ptr")] public static extern long MonitorUpdateId_clone_ptr(long _arg);
-       // struct LDKMonitorUpdateId MonitorUpdateId_clone(const struct LDKMonitorUpdateId *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdateId_clone")] public static extern long MonitorUpdateId_clone(long _orig);
-       // uint64_t MonitorUpdateId_hash(const struct LDKMonitorUpdateId *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdateId_hash")] public static extern long MonitorUpdateId_hash(long _o);
-       // bool MonitorUpdateId_eq(const struct LDKMonitorUpdateId *NONNULL_PTR a, const struct LDKMonitorUpdateId *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MonitorUpdateId_eq")] public static extern bool MonitorUpdateId_eq(long _a, long _b);
        // void Persist_free(struct LDKPersist this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Persist_free")] public static extern void Persist_free(long _this_ptr);
        // void LockedChannelMonitor_free(struct LDKLockedChannelMonitor this_obj);
@@ -7330,9 +7655,9 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChainMonitor_get_monitor")] public static extern long ChainMonitor_get_monitor(long _this_arg, long _funding_txo);
        // MUST_USE_RES struct LDKCVec_C2Tuple_OutPointChannelIdZZ ChainMonitor_list_monitors(const struct LDKChainMonitor *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChainMonitor_list_monitors")] public static extern long ChainMonitor_list_monitors(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ ChainMonitor_list_pending_monitor_updates(const struct LDKChainMonitor *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_OutPointCVec_u64ZZZ ChainMonitor_list_pending_monitor_updates(const struct LDKChainMonitor *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChainMonitor_list_pending_monitor_updates")] public static extern long ChainMonitor_list_pending_monitor_updates(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChainMonitor_channel_monitor_updated(const struct LDKChainMonitor *NONNULL_PTR this_arg, struct LDKOutPoint funding_txo, struct LDKMonitorUpdateId completed_update_id);
+       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChainMonitor_channel_monitor_updated(const struct LDKChainMonitor *NONNULL_PTR this_arg, struct LDKOutPoint funding_txo, uint64_t completed_update_id);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChainMonitor_channel_monitor_updated")] public static extern long ChainMonitor_channel_monitor_updated(long _this_arg, long _funding_txo, long _completed_update_id);
        // MUST_USE_RES struct LDKFuture ChainMonitor_get_update_future(const struct LDKChainMonitor *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChainMonitor_get_update_future")] public static extern long ChainMonitor_get_update_future(long _this_arg);
@@ -7402,20 +7727,32 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCUpdate_write")] public static extern long HTLCUpdate_write(long _obj);
        // struct LDKCResult_HTLCUpdateDecodeErrorZ HTLCUpdate_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCUpdate_read")] public static extern long HTLCUpdate_read(long _ser);
+       // enum LDKBalanceSource BalanceSource_clone(const enum LDKBalanceSource *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BalanceSource_clone")] public static extern BalanceSource BalanceSource_clone(long _orig);
+       // enum LDKBalanceSource BalanceSource_holder_force_closed(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BalanceSource_holder_force_closed")] public static extern BalanceSource BalanceSource_holder_force_closed();
+       // enum LDKBalanceSource BalanceSource_counterparty_force_closed(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BalanceSource_counterparty_force_closed")] public static extern BalanceSource BalanceSource_counterparty_force_closed();
+       // enum LDKBalanceSource BalanceSource_coop_close(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BalanceSource_coop_close")] public static extern BalanceSource BalanceSource_coop_close();
+       // enum LDKBalanceSource BalanceSource_htlc(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BalanceSource_htlc")] public static extern BalanceSource BalanceSource_htlc();
+       // bool BalanceSource_eq(const enum LDKBalanceSource *NONNULL_PTR a, const enum LDKBalanceSource *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BalanceSource_eq")] public static extern bool BalanceSource_eq(long _a, long _b);
        // void Balance_free(struct LDKBalance this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_free")] public static extern void Balance_free(long _this_ptr);
        // uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_clone_ptr")] public static extern long Balance_clone_ptr(long _arg);
        // struct LDKBalance Balance_clone(const struct LDKBalance *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_clone")] public static extern long Balance_clone(long _orig);
-       // struct LDKBalance Balance_claimable_on_channel_close(uint64_t amount_satoshis);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_claimable_on_channel_close")] public static extern long Balance_claimable_on_channel_close(long _amount_satoshis);
-       // struct LDKBalance Balance_claimable_awaiting_confirmations(uint64_t amount_satoshis, uint32_t confirmation_height);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_claimable_awaiting_confirmations")] public static extern long Balance_claimable_awaiting_confirmations(long _amount_satoshis, int _confirmation_height);
+       // struct LDKBalance Balance_claimable_on_channel_close(uint64_t amount_satoshis, uint64_t transaction_fee_satoshis, uint64_t outbound_payment_htlc_rounded_msat, uint64_t outbound_forwarded_htlc_rounded_msat, uint64_t inbound_claiming_htlc_rounded_msat, uint64_t inbound_htlc_rounded_msat);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_claimable_on_channel_close")] public static extern long Balance_claimable_on_channel_close(long _amount_satoshis, long _transaction_fee_satoshis, long _outbound_payment_htlc_rounded_msat, long _outbound_forwarded_htlc_rounded_msat, long _inbound_claiming_htlc_rounded_msat, long _inbound_htlc_rounded_msat);
+       // struct LDKBalance Balance_claimable_awaiting_confirmations(uint64_t amount_satoshis, uint32_t confirmation_height, enum LDKBalanceSource source);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_claimable_awaiting_confirmations")] public static extern long Balance_claimable_awaiting_confirmations(long _amount_satoshis, int _confirmation_height, BalanceSource _source);
        // struct LDKBalance Balance_contentious_claimable(uint64_t amount_satoshis, uint32_t timeout_height, struct LDKThirtyTwoBytes payment_hash, struct LDKThirtyTwoBytes payment_preimage);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_contentious_claimable")] public static extern long Balance_contentious_claimable(long _amount_satoshis, int _timeout_height, long _payment_hash, long _payment_preimage);
-       // struct LDKBalance Balance_maybe_timeout_claimable_htlc(uint64_t amount_satoshis, uint32_t claimable_height, struct LDKThirtyTwoBytes payment_hash);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_maybe_timeout_claimable_htlc")] public static extern long Balance_maybe_timeout_claimable_htlc(long _amount_satoshis, int _claimable_height, long _payment_hash);
+       // struct LDKBalance Balance_maybe_timeout_claimable_htlc(uint64_t amount_satoshis, uint32_t claimable_height, struct LDKThirtyTwoBytes payment_hash, bool outbound_payment);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_maybe_timeout_claimable_htlc")] public static extern long Balance_maybe_timeout_claimable_htlc(long _amount_satoshis, int _claimable_height, long _payment_hash, bool _outbound_payment);
        // struct LDKBalance Balance_maybe_preimage_claimable_htlc(uint64_t amount_satoshis, uint32_t expiry_height, struct LDKThirtyTwoBytes payment_hash);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Balance_maybe_preimage_claimable_htlc")] public static extern long Balance_maybe_preimage_claimable_htlc(long _amount_satoshis, int _expiry_height, long _payment_hash);
        // struct LDKBalance Balance_counterparty_revoked_output_claimable(uint64_t amount_satoshis);
@@ -7446,8 +7783,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_load_outputs_to_watch")] public static extern void ChannelMonitor_load_outputs_to_watch(long _this_arg, long _filter, long _logger);
        // MUST_USE_RES struct LDKCVec_MonitorEventZ ChannelMonitor_get_and_clear_pending_monitor_events(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_get_and_clear_pending_monitor_events")] public static extern long ChannelMonitor_get_and_clear_pending_monitor_events(long _this_arg);
-       // void ChannelMonitor_process_pending_events(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKEventHandler *NONNULL_PTR handler);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_process_pending_events")] public static extern void ChannelMonitor_process_pending_events(long _this_arg, long _handler);
+       // MUST_USE_RES struct LDKCResult_NoneReplayEventZ ChannelMonitor_process_pending_events(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKEventHandler *NONNULL_PTR handler);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_process_pending_events")] public static extern long ChannelMonitor_process_pending_events(long _this_arg, long _handler);
        // MUST_USE_RES struct LDKCommitmentTransaction ChannelMonitor_initial_counterparty_commitment_tx(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_initial_counterparty_commitment_tx")] public static extern long ChannelMonitor_initial_counterparty_commitment_tx(long _this_arg);
        // MUST_USE_RES struct LDKCVec_CommitmentTransactionZ ChannelMonitor_counterparty_commitment_txs_from_update(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKChannelMonitorUpdate *NONNULL_PTR update);
@@ -7474,6 +7811,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_current_best_block")] public static extern long ChannelMonitor_current_best_block(long _this_arg);
        // void ChannelMonitor_rebroadcast_pending_claims(const struct LDKChannelMonitor *NONNULL_PTR this_arg, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, const struct LDKLogger *NONNULL_PTR logger);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_rebroadcast_pending_claims")] public static extern void ChannelMonitor_rebroadcast_pending_claims(long _this_arg, long _broadcaster, long _fee_estimator, long _logger);
+       // MUST_USE_RES bool ChannelMonitor_has_pending_claims(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_has_pending_claims")] public static extern bool ChannelMonitor_has_pending_claims(long _this_arg);
        // void ChannelMonitor_signer_unblocked(const struct LDKChannelMonitor *NONNULL_PTR this_arg, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, const struct LDKLogger *NONNULL_PTR logger);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelMonitor_signer_unblocked")] public static extern void ChannelMonitor_signer_unblocked(long _this_arg, long _broadcaster, long _fee_estimator, long _logger);
        // MUST_USE_RES struct LDKCVec_SpendableOutputDescriptorZ ChannelMonitor_get_spendable_outputs(const struct LDKChannelMonitor *NONNULL_PTR this_arg, struct LDKTransaction tx, uint32_t confirmation_height);
@@ -7534,7 +7873,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InboundHTLCErr_hash")] public static extern long InboundHTLCErr_hash(long _o);
        // bool InboundHTLCErr_eq(const struct LDKInboundHTLCErr *NONNULL_PTR a, const struct LDKInboundHTLCErr *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InboundHTLCErr_eq")] public static extern bool InboundHTLCErr_eq(long _a, long _b);
-       // struct LDKCResult_PendingHTLCInfoInboundHTLCErrZ peel_payment_onion(const struct LDKUpdateAddHTLC *NONNULL_PTR msg, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKLogger *NONNULL_PTR logger, uint32_t cur_height, bool accept_mpp_keysend, bool allow_skimmed_fees);
+       // struct LDKCResult_PendingHTLCInfoInboundHTLCErrZ peel_payment_onion(const struct LDKUpdateAddHTLC *NONNULL_PTR msg, struct LDKNodeSigner node_signer, struct LDKLogger logger, uint32_t cur_height, bool accept_mpp_keysend, bool allow_skimmed_fees);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_peel_payment_onion")] public static extern long peel_payment_onion(long _msg, long _node_signer, long _logger, int _cur_height, bool _accept_mpp_keysend, bool _allow_skimmed_fees);
        // void PendingHTLCRouting_free(struct LDKPendingHTLCRouting this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PendingHTLCRouting_free")] public static extern void PendingHTLCRouting_free(long _this_ptr);
@@ -7558,8 +7897,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_get_failure")] public static extern BlindedFailure BlindedForward_get_failure(long _this_ptr);
        // void BlindedForward_set_failure(struct LDKBlindedForward *NONNULL_PTR this_ptr, enum LDKBlindedFailure val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_set_failure")] public static extern void BlindedForward_set_failure(long _this_ptr, BlindedFailure _val);
-       // MUST_USE_RES struct LDKBlindedForward BlindedForward_new(struct LDKPublicKey inbound_blinding_point_arg, enum LDKBlindedFailure failure_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_new")] public static extern long BlindedForward_new(long _inbound_blinding_point_arg, BlindedFailure _failure_arg);
+       // struct LDKPublicKey BlindedForward_get_next_blinding_override(const struct LDKBlindedForward *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_get_next_blinding_override")] public static extern long BlindedForward_get_next_blinding_override(long _this_ptr);
+       // void BlindedForward_set_next_blinding_override(struct LDKBlindedForward *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_set_next_blinding_override")] public static extern void BlindedForward_set_next_blinding_override(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKBlindedForward BlindedForward_new(struct LDKPublicKey inbound_blinding_point_arg, enum LDKBlindedFailure failure_arg, struct LDKPublicKey next_blinding_override_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_new")] public static extern long BlindedForward_new(long _inbound_blinding_point_arg, BlindedFailure _failure_arg, long _next_blinding_override_arg);
        // uint64_t BlindedForward_clone_ptr(LDKBlindedForward *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedForward_clone_ptr")] public static extern long BlindedForward_clone_ptr(long _arg);
        // struct LDKBlindedForward BlindedForward_clone(const struct LDKBlindedForward *NONNULL_PTR orig);
@@ -7698,15 +8041,15 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_close_channel")] public static extern long ChannelManager_close_channel(long _this_arg, long _channel_id, long _counterparty_node_id);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_close_channel_with_feerate_and_script(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR channel_id, struct LDKPublicKey counterparty_node_id, struct LDKCOption_u32Z target_feerate_sats_per_1000_weight, struct LDKShutdownScript shutdown_script);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_close_channel_with_feerate_and_script")] public static extern long ChannelManager_close_channel_with_feerate_and_script(long _this_arg, long _channel_id, long _counterparty_node_id, long _target_feerate_sats_per_1000_weight, long _shutdown_script);
-       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_force_close_broadcasting_latest_txn(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR channel_id, struct LDKPublicKey counterparty_node_id);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_broadcasting_latest_txn")] public static extern long ChannelManager_force_close_broadcasting_latest_txn(long _this_arg, long _channel_id, long _counterparty_node_id);
-       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_force_close_without_broadcasting_txn(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR channel_id, struct LDKPublicKey counterparty_node_id);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_without_broadcasting_txn")] public static extern long ChannelManager_force_close_without_broadcasting_txn(long _this_arg, long _channel_id, long _counterparty_node_id);
-       // void ChannelManager_force_close_all_channels_broadcasting_latest_txn(const struct LDKChannelManager *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_all_channels_broadcasting_latest_txn")] public static extern void ChannelManager_force_close_all_channels_broadcasting_latest_txn(long _this_arg);
-       // void ChannelManager_force_close_all_channels_without_broadcasting_txn(const struct LDKChannelManager *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_all_channels_without_broadcasting_txn")] public static extern void ChannelManager_force_close_all_channels_without_broadcasting_txn(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NonePaymentSendFailureZ ChannelManager_send_payment_with_route(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKRoute *NONNULL_PTR route, struct LDKThirtyTwoBytes payment_hash, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id);
+       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_force_close_broadcasting_latest_txn(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR channel_id, struct LDKPublicKey counterparty_node_id, struct LDKStr error_message);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_broadcasting_latest_txn")] public static extern long ChannelManager_force_close_broadcasting_latest_txn(long _this_arg, long _channel_id, long _counterparty_node_id, long _error_message);
+       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_force_close_without_broadcasting_txn(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR channel_id, struct LDKPublicKey counterparty_node_id, struct LDKStr error_message);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_without_broadcasting_txn")] public static extern long ChannelManager_force_close_without_broadcasting_txn(long _this_arg, long _channel_id, long _counterparty_node_id, long _error_message);
+       // void ChannelManager_force_close_all_channels_broadcasting_latest_txn(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKStr error_message);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_all_channels_broadcasting_latest_txn")] public static extern void ChannelManager_force_close_all_channels_broadcasting_latest_txn(long _this_arg, long _error_message);
+       // void ChannelManager_force_close_all_channels_without_broadcasting_txn(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKStr error_message);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_force_close_all_channels_without_broadcasting_txn")] public static extern void ChannelManager_force_close_all_channels_without_broadcasting_txn(long _this_arg, long _error_message);
+       // MUST_USE_RES struct LDKCResult_NonePaymentSendFailureZ ChannelManager_send_payment_with_route(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKRoute route, struct LDKThirtyTwoBytes payment_hash, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_send_payment_with_route")] public static extern long ChannelManager_send_payment_with_route(long _this_arg, long _route, long _payment_hash, long _recipient_onion, long _payment_id);
        // MUST_USE_RES struct LDKCResult_NoneRetryableSendFailureZ ChannelManager_send_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_hash, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id, struct LDKRouteParameters route_params, struct LDKRetry retry_strategy);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_send_payment")] public static extern long ChannelManager_send_payment(long _this_arg, long _payment_hash, long _recipient_onion, long _payment_id, long _route_params, long _retry_strategy);
@@ -7722,8 +8065,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_send_spontaneous_preflight_probes")] public static extern long ChannelManager_send_spontaneous_preflight_probes(long _this_arg, long _node_id, long _amount_msat, int _final_cltv_expiry_delta, long _liquidity_limit_multiplier);
        // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ChannelManager_send_preflight_probes(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKRouteParameters route_params, struct LDKCOption_u64Z liquidity_limit_multiplier);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_send_preflight_probes")] public static extern long ChannelManager_send_preflight_probes(long _this_arg, long _route_params, long _liquidity_limit_multiplier);
-       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_funding_transaction_generated(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR temporary_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKTransaction funding_transaction);
+       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_funding_transaction_generated(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKChannelId temporary_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKTransaction funding_transaction);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_funding_transaction_generated")] public static extern long ChannelManager_funding_transaction_generated(long _this_arg, long _temporary_channel_id, long _counterparty_node_id, long _funding_transaction);
+       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_unsafe_manual_funding_transaction_generated(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKChannelId temporary_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKOutPoint funding);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_unsafe_manual_funding_transaction_generated")] public static extern long ChannelManager_unsafe_manual_funding_transaction_generated(long _this_arg, long _temporary_channel_id, long _counterparty_node_id, long _funding);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_batch_funding_transaction_generated(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_ChannelIdPublicKeyZZ temporary_channels, struct LDKTransaction funding_transaction);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_batch_funding_transaction_generated")] public static extern long ChannelManager_batch_funding_transaction_generated(long _this_arg, long _temporary_channels, long _funding_transaction);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_update_partial_channel_config(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey counterparty_node_id, struct LDKCVec_ChannelIdZ channel_ids, const struct LDKChannelConfigUpdate *NONNULL_PTR config_update);
@@ -7752,8 +8097,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_accept_inbound_channel")] public static extern long ChannelManager_accept_inbound_channel(long _this_arg, long _temporary_channel_id, long _counterparty_node_id, long _user_channel_id);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_accept_inbound_channel_from_trusted_peer_0conf(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKChannelId *NONNULL_PTR temporary_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKU128 user_channel_id);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_accept_inbound_channel_from_trusted_peer_0conf")] public static extern long ChannelManager_accept_inbound_channel_from_trusted_peer_0conf(long _this_arg, long _temporary_channel_id, long _counterparty_node_id, long _user_channel_id);
-       // MUST_USE_RES struct LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ ChannelManager_create_offer_builder(const struct LDKChannelManager *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_create_offer_builder")] public static extern long ChannelManager_create_offer_builder(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ ChannelManager_create_offer_builder(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCOption_u64Z absolute_expiry);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_create_offer_builder")] public static extern long ChannelManager_create_offer_builder(long _this_arg, long _absolute_expiry);
        // MUST_USE_RES struct LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ ChannelManager_create_refund_builder(const struct LDKChannelManager *NONNULL_PTR this_arg, uint64_t amount_msats, uint64_t absolute_expiry, struct LDKThirtyTwoBytes payment_id, struct LDKRetry retry_strategy, struct LDKCOption_u64Z max_total_routing_fee_msat);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_create_refund_builder")] public static extern long ChannelManager_create_refund_builder(long _this_arg, long _amount_msats, long _absolute_expiry, long _payment_id, long _retry_strategy, long _max_total_routing_fee_msat);
        // MUST_USE_RES struct LDKCResult_NoneBolt12SemanticErrorZ ChannelManager_pay_for_offer(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKOffer *NONNULL_PTR offer, struct LDKCOption_u64Z quantity, struct LDKCOption_u64Z amount_msats, struct LDKCOption_StrZ payer_note, struct LDKThirtyTwoBytes payment_id, struct LDKRetry retry_strategy, struct LDKCOption_u64Z max_total_routing_fee_msat);
@@ -7800,6 +8145,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_as_ChannelMessageHandler")] public static extern long ChannelManager_as_ChannelMessageHandler(long _this_arg);
        // struct LDKOffersMessageHandler ChannelManager_as_OffersMessageHandler(const struct LDKChannelManager *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_as_OffersMessageHandler")] public static extern long ChannelManager_as_OffersMessageHandler(long _this_arg);
+       // struct LDKAsyncPaymentsMessageHandler ChannelManager_as_AsyncPaymentsMessageHandler(const struct LDKChannelManager *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_as_AsyncPaymentsMessageHandler")] public static extern long ChannelManager_as_AsyncPaymentsMessageHandler(long _this_arg);
        // struct LDKNodeIdLookUp ChannelManager_as_NodeIdLookUp(const struct LDKChannelManager *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelManager_as_NodeIdLookUp")] public static extern long ChannelManager_as_NodeIdLookUp(long _this_arg);
        // struct LDKInitFeatures provided_init_features(const struct LDKUserConfig *NONNULL_PTR config);
@@ -8270,10 +8617,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_get_is_usable")] public static extern bool ChannelDetails_get_is_usable(long _this_ptr);
        // void ChannelDetails_set_is_usable(struct LDKChannelDetails *NONNULL_PTR this_ptr, bool val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_set_is_usable")] public static extern void ChannelDetails_set_is_usable(long _this_ptr, bool _val);
-       // bool ChannelDetails_get_is_public(const struct LDKChannelDetails *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_get_is_public")] public static extern bool ChannelDetails_get_is_public(long _this_ptr);
-       // void ChannelDetails_set_is_public(struct LDKChannelDetails *NONNULL_PTR this_ptr, bool val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_set_is_public")] public static extern void ChannelDetails_set_is_public(long _this_ptr, bool _val);
+       // bool ChannelDetails_get_is_announced(const struct LDKChannelDetails *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_get_is_announced")] public static extern bool ChannelDetails_get_is_announced(long _this_ptr);
+       // void ChannelDetails_set_is_announced(struct LDKChannelDetails *NONNULL_PTR this_ptr, bool val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_set_is_announced")] public static extern void ChannelDetails_set_is_announced(long _this_ptr, bool _val);
        // struct LDKCOption_u64Z ChannelDetails_get_inbound_htlc_minimum_msat(const struct LDKChannelDetails *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_get_inbound_htlc_minimum_msat")] public static extern long ChannelDetails_get_inbound_htlc_minimum_msat(long _this_ptr);
        // void ChannelDetails_set_inbound_htlc_minimum_msat(struct LDKChannelDetails *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
@@ -8294,8 +8641,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_get_pending_outbound_htlcs")] public static extern long ChannelDetails_get_pending_outbound_htlcs(long _this_ptr);
        // void ChannelDetails_set_pending_outbound_htlcs(struct LDKChannelDetails *NONNULL_PTR this_ptr, struct LDKCVec_OutboundHTLCDetailsZ val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_set_pending_outbound_htlcs")] public static extern void ChannelDetails_set_pending_outbound_htlcs(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKChannelDetails ChannelDetails_new(struct LDKChannelId channel_id_arg, struct LDKChannelCounterparty counterparty_arg, struct LDKOutPoint funding_txo_arg, struct LDKChannelTypeFeatures channel_type_arg, struct LDKCOption_u64Z short_channel_id_arg, struct LDKCOption_u64Z outbound_scid_alias_arg, struct LDKCOption_u64Z inbound_scid_alias_arg, uint64_t channel_value_satoshis_arg, struct LDKCOption_u64Z unspendable_punishment_reserve_arg, struct LDKU128 user_channel_id_arg, struct LDKCOption_u32Z feerate_sat_per_1000_weight_arg, uint64_t balance_msat_arg, uint64_t outbound_capacity_msat_arg, uint64_t next_outbound_htlc_limit_msat_arg, uint64_t next_outbound_htlc_minimum_msat_arg, uint64_t inbound_capacity_msat_arg, struct LDKCOption_u32Z confirmations_required_arg, struct LDKCOption_u32Z confirmations_arg, struct LDKCOption_u16Z force_close_spend_delay_arg, bool is_outbound_arg, bool is_channel_ready_arg, struct LDKCOption_ChannelShutdownStateZ channel_shutdown_state_arg, bool is_usable_arg, bool is_public_arg, struct LDKCOption_u64Z inbound_htlc_minimum_msat_arg, struct LDKCOption_u64Z inbound_htlc_maximum_msat_arg, struct LDKChannelConfig config_arg, struct LDKCVec_InboundHTLCDetailsZ pending_inbound_htlcs_arg, struct LDKCVec_OutboundHTLCDetailsZ pending_outbound_htlcs_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_new")] public static extern long ChannelDetails_new(long _channel_id_arg, long _counterparty_arg, long _funding_txo_arg, long _channel_type_arg, long _short_channel_id_arg, long _outbound_scid_alias_arg, long _inbound_scid_alias_arg, long _channel_value_satoshis_arg, long _unspendable_punishment_reserve_arg, long _user_channel_id_arg, long _feerate_sat_per_1000_weight_arg, long _balance_msat_arg, long _outbound_capacity_msat_arg, long _next_outbound_htlc_limit_msat_arg, long _next_outbound_htlc_minimum_msat_arg, long _inbound_capacity_msat_arg, long _confirmations_required_arg, long _confirmations_arg, long _force_close_spend_delay_arg, bool _is_outbound_arg, bool _is_channel_ready_arg, long _channel_shutdown_state_arg, bool _is_usable_arg, bool _is_public_arg, long _inbound_htlc_minimum_msat_arg, long _inbound_htlc_maximum_msat_arg, long _config_arg, long _pending_inbound_htlcs_arg, long _pending_outbound_htlcs_arg);
+       // MUST_USE_RES struct LDKChannelDetails ChannelDetails_new(struct LDKChannelId channel_id_arg, struct LDKChannelCounterparty counterparty_arg, struct LDKOutPoint funding_txo_arg, struct LDKChannelTypeFeatures channel_type_arg, struct LDKCOption_u64Z short_channel_id_arg, struct LDKCOption_u64Z outbound_scid_alias_arg, struct LDKCOption_u64Z inbound_scid_alias_arg, uint64_t channel_value_satoshis_arg, struct LDKCOption_u64Z unspendable_punishment_reserve_arg, struct LDKU128 user_channel_id_arg, struct LDKCOption_u32Z feerate_sat_per_1000_weight_arg, uint64_t balance_msat_arg, uint64_t outbound_capacity_msat_arg, uint64_t next_outbound_htlc_limit_msat_arg, uint64_t next_outbound_htlc_minimum_msat_arg, uint64_t inbound_capacity_msat_arg, struct LDKCOption_u32Z confirmations_required_arg, struct LDKCOption_u32Z confirmations_arg, struct LDKCOption_u16Z force_close_spend_delay_arg, bool is_outbound_arg, bool is_channel_ready_arg, struct LDKCOption_ChannelShutdownStateZ channel_shutdown_state_arg, bool is_usable_arg, bool is_announced_arg, struct LDKCOption_u64Z inbound_htlc_minimum_msat_arg, struct LDKCOption_u64Z inbound_htlc_maximum_msat_arg, struct LDKChannelConfig config_arg, struct LDKCVec_InboundHTLCDetailsZ pending_inbound_htlcs_arg, struct LDKCVec_OutboundHTLCDetailsZ pending_outbound_htlcs_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_new")] public static extern long ChannelDetails_new(long _channel_id_arg, long _counterparty_arg, long _funding_txo_arg, long _channel_type_arg, long _short_channel_id_arg, long _outbound_scid_alias_arg, long _inbound_scid_alias_arg, long _channel_value_satoshis_arg, long _unspendable_punishment_reserve_arg, long _user_channel_id_arg, long _feerate_sat_per_1000_weight_arg, long _balance_msat_arg, long _outbound_capacity_msat_arg, long _next_outbound_htlc_limit_msat_arg, long _next_outbound_htlc_minimum_msat_arg, long _inbound_capacity_msat_arg, long _confirmations_required_arg, long _confirmations_arg, long _force_close_spend_delay_arg, bool _is_outbound_arg, bool _is_channel_ready_arg, long _channel_shutdown_state_arg, bool _is_usable_arg, bool _is_announced_arg, long _inbound_htlc_minimum_msat_arg, long _inbound_htlc_maximum_msat_arg, long _config_arg, long _pending_inbound_htlcs_arg, long _pending_outbound_htlcs_arg);
        // uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelDetails_clone_ptr")] public static extern long ChannelDetails_clone_ptr(long _arg);
        // struct LDKChannelDetails ChannelDetails_clone(const struct LDKChannelDetails *NONNULL_PTR orig);
@@ -8544,6 +8891,44 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommonOpenChannelFields_hash")] public static extern long CommonOpenChannelFields_hash(long _o);
        // bool CommonOpenChannelFields_eq(const struct LDKCommonOpenChannelFields *NONNULL_PTR a, const struct LDKCommonOpenChannelFields *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommonOpenChannelFields_eq")] public static extern bool CommonOpenChannelFields_eq(long _a, long _b);
+       // MUST_USE_RES struct LDKChannelParameters CommonOpenChannelFields_channel_parameters(const struct LDKCommonOpenChannelFields *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommonOpenChannelFields_channel_parameters")] public static extern long CommonOpenChannelFields_channel_parameters(long _this_arg);
+       // void ChannelParameters_free(struct LDKChannelParameters this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_free")] public static extern void ChannelParameters_free(long _this_obj);
+       // uint64_t ChannelParameters_get_dust_limit_satoshis(const struct LDKChannelParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_get_dust_limit_satoshis")] public static extern long ChannelParameters_get_dust_limit_satoshis(long _this_ptr);
+       // void ChannelParameters_set_dust_limit_satoshis(struct LDKChannelParameters *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_set_dust_limit_satoshis")] public static extern void ChannelParameters_set_dust_limit_satoshis(long _this_ptr, long _val);
+       // uint64_t ChannelParameters_get_max_htlc_value_in_flight_msat(const struct LDKChannelParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_get_max_htlc_value_in_flight_msat")] public static extern long ChannelParameters_get_max_htlc_value_in_flight_msat(long _this_ptr);
+       // void ChannelParameters_set_max_htlc_value_in_flight_msat(struct LDKChannelParameters *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_set_max_htlc_value_in_flight_msat")] public static extern void ChannelParameters_set_max_htlc_value_in_flight_msat(long _this_ptr, long _val);
+       // uint64_t ChannelParameters_get_htlc_minimum_msat(const struct LDKChannelParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_get_htlc_minimum_msat")] public static extern long ChannelParameters_get_htlc_minimum_msat(long _this_ptr);
+       // void ChannelParameters_set_htlc_minimum_msat(struct LDKChannelParameters *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_set_htlc_minimum_msat")] public static extern void ChannelParameters_set_htlc_minimum_msat(long _this_ptr, long _val);
+       // uint32_t ChannelParameters_get_commitment_feerate_sat_per_1000_weight(const struct LDKChannelParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_get_commitment_feerate_sat_per_1000_weight")] public static extern int ChannelParameters_get_commitment_feerate_sat_per_1000_weight(long _this_ptr);
+       // void ChannelParameters_set_commitment_feerate_sat_per_1000_weight(struct LDKChannelParameters *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_set_commitment_feerate_sat_per_1000_weight")] public static extern void ChannelParameters_set_commitment_feerate_sat_per_1000_weight(long _this_ptr, int _val);
+       // uint16_t ChannelParameters_get_to_self_delay(const struct LDKChannelParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_get_to_self_delay")] public static extern short ChannelParameters_get_to_self_delay(long _this_ptr);
+       // void ChannelParameters_set_to_self_delay(struct LDKChannelParameters *NONNULL_PTR this_ptr, uint16_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_set_to_self_delay")] public static extern void ChannelParameters_set_to_self_delay(long _this_ptr, short _val);
+       // uint16_t ChannelParameters_get_max_accepted_htlcs(const struct LDKChannelParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_get_max_accepted_htlcs")] public static extern short ChannelParameters_get_max_accepted_htlcs(long _this_ptr);
+       // void ChannelParameters_set_max_accepted_htlcs(struct LDKChannelParameters *NONNULL_PTR this_ptr, uint16_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_set_max_accepted_htlcs")] public static extern void ChannelParameters_set_max_accepted_htlcs(long _this_ptr, short _val);
+       // MUST_USE_RES struct LDKChannelParameters ChannelParameters_new(uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t htlc_minimum_msat_arg, uint32_t commitment_feerate_sat_per_1000_weight_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_new")] public static extern long ChannelParameters_new(long _dust_limit_satoshis_arg, long _max_htlc_value_in_flight_msat_arg, long _htlc_minimum_msat_arg, int _commitment_feerate_sat_per_1000_weight_arg, short _to_self_delay_arg, short _max_accepted_htlcs_arg);
+       // uint64_t ChannelParameters_clone_ptr(LDKChannelParameters *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_clone_ptr")] public static extern long ChannelParameters_clone_ptr(long _arg);
+       // struct LDKChannelParameters ChannelParameters_clone(const struct LDKChannelParameters *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_clone")] public static extern long ChannelParameters_clone(long _orig);
+       // uint64_t ChannelParameters_hash(const struct LDKChannelParameters *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_hash")] public static extern long ChannelParameters_hash(long _o);
+       // bool ChannelParameters_eq(const struct LDKChannelParameters *NONNULL_PTR a, const struct LDKChannelParameters *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelParameters_eq")] public static extern bool ChannelParameters_eq(long _a, long _b);
        // void OpenChannel_free(struct LDKOpenChannel this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OpenChannel_free")] public static extern void OpenChannel_free(long _this_obj);
        // struct LDKCommonOpenChannelFields OpenChannel_get_common_fields(const struct LDKOpenChannel *NONNULL_PTR this_ptr);
@@ -8810,60 +9195,60 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Stfu_clone")] public static extern long Stfu_clone(long _orig);
        // bool Stfu_eq(const struct LDKStfu *NONNULL_PTR a, const struct LDKStfu *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Stfu_eq")] public static extern bool Stfu_eq(long _a, long _b);
-       // void Splice_free(struct LDKSplice this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_free")] public static extern void Splice_free(long _this_obj);
-       // struct LDKChannelId Splice_get_channel_id(const struct LDKSplice *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_get_channel_id")] public static extern long Splice_get_channel_id(long _this_ptr);
-       // void Splice_set_channel_id(struct LDKSplice *NONNULL_PTR this_ptr, struct LDKChannelId val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_set_channel_id")] public static extern void Splice_set_channel_id(long _this_ptr, long _val);
-       // const uint8_t (*Splice_get_chain_hash(const struct LDKSplice *NONNULL_PTR this_ptr))[32];
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_get_chain_hash")] public static extern long Splice_get_chain_hash(long _this_ptr);
-       // void Splice_set_chain_hash(struct LDKSplice *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_set_chain_hash")] public static extern void Splice_set_chain_hash(long _this_ptr, long _val);
-       // int64_t Splice_get_relative_satoshis(const struct LDKSplice *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_get_relative_satoshis")] public static extern long Splice_get_relative_satoshis(long _this_ptr);
-       // void Splice_set_relative_satoshis(struct LDKSplice *NONNULL_PTR this_ptr, int64_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_set_relative_satoshis")] public static extern void Splice_set_relative_satoshis(long _this_ptr, long _val);
-       // uint32_t Splice_get_funding_feerate_perkw(const struct LDKSplice *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_get_funding_feerate_perkw")] public static extern int Splice_get_funding_feerate_perkw(long _this_ptr);
-       // void Splice_set_funding_feerate_perkw(struct LDKSplice *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_set_funding_feerate_perkw")] public static extern void Splice_set_funding_feerate_perkw(long _this_ptr, int _val);
-       // uint32_t Splice_get_locktime(const struct LDKSplice *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_get_locktime")] public static extern int Splice_get_locktime(long _this_ptr);
-       // void Splice_set_locktime(struct LDKSplice *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_set_locktime")] public static extern void Splice_set_locktime(long _this_ptr, int _val);
-       // struct LDKPublicKey Splice_get_funding_pubkey(const struct LDKSplice *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_get_funding_pubkey")] public static extern long Splice_get_funding_pubkey(long _this_ptr);
-       // void Splice_set_funding_pubkey(struct LDKSplice *NONNULL_PTR this_ptr, struct LDKPublicKey val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_set_funding_pubkey")] public static extern void Splice_set_funding_pubkey(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKSplice Splice_new(struct LDKChannelId channel_id_arg, struct LDKThirtyTwoBytes chain_hash_arg, int64_t relative_satoshis_arg, uint32_t funding_feerate_perkw_arg, uint32_t locktime_arg, struct LDKPublicKey funding_pubkey_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_new")] public static extern long Splice_new(long _channel_id_arg, long _chain_hash_arg, long _relative_satoshis_arg, int _funding_feerate_perkw_arg, int _locktime_arg, long _funding_pubkey_arg);
-       // uint64_t Splice_clone_ptr(LDKSplice *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_clone_ptr")] public static extern long Splice_clone_ptr(long _arg);
-       // struct LDKSplice Splice_clone(const struct LDKSplice *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_clone")] public static extern long Splice_clone(long _orig);
-       // bool Splice_eq(const struct LDKSplice *NONNULL_PTR a, const struct LDKSplice *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_eq")] public static extern bool Splice_eq(long _a, long _b);
+       // void SpliceInit_free(struct LDKSpliceInit this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_free")] public static extern void SpliceInit_free(long _this_obj);
+       // struct LDKChannelId SpliceInit_get_channel_id(const struct LDKSpliceInit *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_get_channel_id")] public static extern long SpliceInit_get_channel_id(long _this_ptr);
+       // void SpliceInit_set_channel_id(struct LDKSpliceInit *NONNULL_PTR this_ptr, struct LDKChannelId val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_set_channel_id")] public static extern void SpliceInit_set_channel_id(long _this_ptr, long _val);
+       // int64_t SpliceInit_get_funding_contribution_satoshis(const struct LDKSpliceInit *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_get_funding_contribution_satoshis")] public static extern long SpliceInit_get_funding_contribution_satoshis(long _this_ptr);
+       // void SpliceInit_set_funding_contribution_satoshis(struct LDKSpliceInit *NONNULL_PTR this_ptr, int64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_set_funding_contribution_satoshis")] public static extern void SpliceInit_set_funding_contribution_satoshis(long _this_ptr, long _val);
+       // uint32_t SpliceInit_get_funding_feerate_perkw(const struct LDKSpliceInit *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_get_funding_feerate_perkw")] public static extern int SpliceInit_get_funding_feerate_perkw(long _this_ptr);
+       // void SpliceInit_set_funding_feerate_perkw(struct LDKSpliceInit *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_set_funding_feerate_perkw")] public static extern void SpliceInit_set_funding_feerate_perkw(long _this_ptr, int _val);
+       // uint32_t SpliceInit_get_locktime(const struct LDKSpliceInit *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_get_locktime")] public static extern int SpliceInit_get_locktime(long _this_ptr);
+       // void SpliceInit_set_locktime(struct LDKSpliceInit *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_set_locktime")] public static extern void SpliceInit_set_locktime(long _this_ptr, int _val);
+       // struct LDKPublicKey SpliceInit_get_funding_pubkey(const struct LDKSpliceInit *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_get_funding_pubkey")] public static extern long SpliceInit_get_funding_pubkey(long _this_ptr);
+       // void SpliceInit_set_funding_pubkey(struct LDKSpliceInit *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_set_funding_pubkey")] public static extern void SpliceInit_set_funding_pubkey(long _this_ptr, long _val);
+       // enum LDKCOption_NoneZ SpliceInit_get_require_confirmed_inputs(const struct LDKSpliceInit *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_get_require_confirmed_inputs")] public static extern COption_NoneZ SpliceInit_get_require_confirmed_inputs(long _this_ptr);
+       // void SpliceInit_set_require_confirmed_inputs(struct LDKSpliceInit *NONNULL_PTR this_ptr, enum LDKCOption_NoneZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_set_require_confirmed_inputs")] public static extern void SpliceInit_set_require_confirmed_inputs(long _this_ptr, COption_NoneZ _val);
+       // MUST_USE_RES struct LDKSpliceInit SpliceInit_new(struct LDKChannelId channel_id_arg, int64_t funding_contribution_satoshis_arg, uint32_t funding_feerate_perkw_arg, uint32_t locktime_arg, struct LDKPublicKey funding_pubkey_arg, enum LDKCOption_NoneZ require_confirmed_inputs_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_new")] public static extern long SpliceInit_new(long _channel_id_arg, long _funding_contribution_satoshis_arg, int _funding_feerate_perkw_arg, int _locktime_arg, long _funding_pubkey_arg, COption_NoneZ _require_confirmed_inputs_arg);
+       // uint64_t SpliceInit_clone_ptr(LDKSpliceInit *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_clone_ptr")] public static extern long SpliceInit_clone_ptr(long _arg);
+       // struct LDKSpliceInit SpliceInit_clone(const struct LDKSpliceInit *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_clone")] public static extern long SpliceInit_clone(long _orig);
+       // bool SpliceInit_eq(const struct LDKSpliceInit *NONNULL_PTR a, const struct LDKSpliceInit *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_eq")] public static extern bool SpliceInit_eq(long _a, long _b);
        // void SpliceAck_free(struct LDKSpliceAck this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_free")] public static extern void SpliceAck_free(long _this_obj);
        // struct LDKChannelId SpliceAck_get_channel_id(const struct LDKSpliceAck *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_get_channel_id")] public static extern long SpliceAck_get_channel_id(long _this_ptr);
        // void SpliceAck_set_channel_id(struct LDKSpliceAck *NONNULL_PTR this_ptr, struct LDKChannelId val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_set_channel_id")] public static extern void SpliceAck_set_channel_id(long _this_ptr, long _val);
-       // const uint8_t (*SpliceAck_get_chain_hash(const struct LDKSpliceAck *NONNULL_PTR this_ptr))[32];
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_get_chain_hash")] public static extern long SpliceAck_get_chain_hash(long _this_ptr);
-       // void SpliceAck_set_chain_hash(struct LDKSpliceAck *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_set_chain_hash")] public static extern void SpliceAck_set_chain_hash(long _this_ptr, long _val);
-       // int64_t SpliceAck_get_relative_satoshis(const struct LDKSpliceAck *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_get_relative_satoshis")] public static extern long SpliceAck_get_relative_satoshis(long _this_ptr);
-       // void SpliceAck_set_relative_satoshis(struct LDKSpliceAck *NONNULL_PTR this_ptr, int64_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_set_relative_satoshis")] public static extern void SpliceAck_set_relative_satoshis(long _this_ptr, long _val);
+       // int64_t SpliceAck_get_funding_contribution_satoshis(const struct LDKSpliceAck *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_get_funding_contribution_satoshis")] public static extern long SpliceAck_get_funding_contribution_satoshis(long _this_ptr);
+       // void SpliceAck_set_funding_contribution_satoshis(struct LDKSpliceAck *NONNULL_PTR this_ptr, int64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_set_funding_contribution_satoshis")] public static extern void SpliceAck_set_funding_contribution_satoshis(long _this_ptr, long _val);
        // struct LDKPublicKey SpliceAck_get_funding_pubkey(const struct LDKSpliceAck *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_get_funding_pubkey")] public static extern long SpliceAck_get_funding_pubkey(long _this_ptr);
        // void SpliceAck_set_funding_pubkey(struct LDKSpliceAck *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_set_funding_pubkey")] public static extern void SpliceAck_set_funding_pubkey(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKSpliceAck SpliceAck_new(struct LDKChannelId channel_id_arg, struct LDKThirtyTwoBytes chain_hash_arg, int64_t relative_satoshis_arg, struct LDKPublicKey funding_pubkey_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_new")] public static extern long SpliceAck_new(long _channel_id_arg, long _chain_hash_arg, long _relative_satoshis_arg, long _funding_pubkey_arg);
+       // enum LDKCOption_NoneZ SpliceAck_get_require_confirmed_inputs(const struct LDKSpliceAck *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_get_require_confirmed_inputs")] public static extern COption_NoneZ SpliceAck_get_require_confirmed_inputs(long _this_ptr);
+       // void SpliceAck_set_require_confirmed_inputs(struct LDKSpliceAck *NONNULL_PTR this_ptr, enum LDKCOption_NoneZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_set_require_confirmed_inputs")] public static extern void SpliceAck_set_require_confirmed_inputs(long _this_ptr, COption_NoneZ _val);
+       // MUST_USE_RES struct LDKSpliceAck SpliceAck_new(struct LDKChannelId channel_id_arg, int64_t funding_contribution_satoshis_arg, struct LDKPublicKey funding_pubkey_arg, enum LDKCOption_NoneZ require_confirmed_inputs_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_new")] public static extern long SpliceAck_new(long _channel_id_arg, long _funding_contribution_satoshis_arg, long _funding_pubkey_arg, COption_NoneZ _require_confirmed_inputs_arg);
        // uint64_t SpliceAck_clone_ptr(LDKSpliceAck *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_clone_ptr")] public static extern long SpliceAck_clone_ptr(long _arg);
        // struct LDKSpliceAck SpliceAck_clone(const struct LDKSpliceAck *NONNULL_PTR orig);
@@ -8876,8 +9261,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_get_channel_id")] public static extern long SpliceLocked_get_channel_id(long _this_ptr);
        // void SpliceLocked_set_channel_id(struct LDKSpliceLocked *NONNULL_PTR this_ptr, struct LDKChannelId val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_set_channel_id")] public static extern void SpliceLocked_set_channel_id(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKSpliceLocked SpliceLocked_new(struct LDKChannelId channel_id_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_new")] public static extern long SpliceLocked_new(long _channel_id_arg);
+       // const uint8_t (*SpliceLocked_get_splice_txid(const struct LDKSpliceLocked *NONNULL_PTR this_ptr))[32];
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_get_splice_txid")] public static extern long SpliceLocked_get_splice_txid(long _this_ptr);
+       // void SpliceLocked_set_splice_txid(struct LDKSpliceLocked *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_set_splice_txid")] public static extern void SpliceLocked_set_splice_txid(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKSpliceLocked SpliceLocked_new(struct LDKChannelId channel_id_arg, struct LDKThirtyTwoBytes splice_txid_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_new")] public static extern long SpliceLocked_new(long _channel_id_arg, long _splice_txid_arg);
        // uint64_t SpliceLocked_clone_ptr(LDKSpliceLocked *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceLocked_clone_ptr")] public static extern long SpliceLocked_clone_ptr(long _arg);
        // struct LDKSpliceLocked SpliceLocked_clone(const struct LDKSpliceLocked *NONNULL_PTR orig);
@@ -8906,8 +9295,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_get_sequence")] public static extern int TxAddInput_get_sequence(long _this_ptr);
        // void TxAddInput_set_sequence(struct LDKTxAddInput *NONNULL_PTR this_ptr, uint32_t val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_set_sequence")] public static extern void TxAddInput_set_sequence(long _this_ptr, int _val);
-       // MUST_USE_RES struct LDKTxAddInput TxAddInput_new(struct LDKChannelId channel_id_arg, uint64_t serial_id_arg, struct LDKTransactionU16LenLimited prevtx_arg, uint32_t prevtx_out_arg, uint32_t sequence_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_new")] public static extern long TxAddInput_new(long _channel_id_arg, long _serial_id_arg, long _prevtx_arg, int _prevtx_out_arg, int _sequence_arg);
+       // struct LDKCOption_ThirtyTwoBytesZ TxAddInput_get_shared_input_txid(const struct LDKTxAddInput *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_get_shared_input_txid")] public static extern long TxAddInput_get_shared_input_txid(long _this_ptr);
+       // void TxAddInput_set_shared_input_txid(struct LDKTxAddInput *NONNULL_PTR this_ptr, struct LDKCOption_ThirtyTwoBytesZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_set_shared_input_txid")] public static extern void TxAddInput_set_shared_input_txid(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKTxAddInput TxAddInput_new(struct LDKChannelId channel_id_arg, uint64_t serial_id_arg, struct LDKTransactionU16LenLimited prevtx_arg, uint32_t prevtx_out_arg, uint32_t sequence_arg, struct LDKCOption_ThirtyTwoBytesZ shared_input_txid_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_new")] public static extern long TxAddInput_new(long _channel_id_arg, long _serial_id_arg, long _prevtx_arg, int _prevtx_out_arg, int _sequence_arg, long _shared_input_txid_arg);
        // uint64_t TxAddInput_clone_ptr(LDKTxAddInput *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxAddInput_clone_ptr")] public static extern long TxAddInput_clone_ptr(long _arg);
        // struct LDKTxAddInput TxAddInput_clone(const struct LDKTxAddInput *NONNULL_PTR orig);
@@ -9014,12 +9407,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_get_witnesses")] public static extern long TxSignatures_get_witnesses(long _this_ptr);
        // void TxSignatures_set_witnesses(struct LDKTxSignatures *NONNULL_PTR this_ptr, struct LDKCVec_WitnessZ val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_set_witnesses")] public static extern void TxSignatures_set_witnesses(long _this_ptr, long _val);
-       // struct LDKCOption_ECDSASignatureZ TxSignatures_get_funding_outpoint_sig(const struct LDKTxSignatures *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_get_funding_outpoint_sig")] public static extern long TxSignatures_get_funding_outpoint_sig(long _this_ptr);
-       // void TxSignatures_set_funding_outpoint_sig(struct LDKTxSignatures *NONNULL_PTR this_ptr, struct LDKCOption_ECDSASignatureZ val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_set_funding_outpoint_sig")] public static extern void TxSignatures_set_funding_outpoint_sig(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKTxSignatures TxSignatures_new(struct LDKChannelId channel_id_arg, struct LDKThirtyTwoBytes tx_hash_arg, struct LDKCVec_WitnessZ witnesses_arg, struct LDKCOption_ECDSASignatureZ funding_outpoint_sig_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_new")] public static extern long TxSignatures_new(long _channel_id_arg, long _tx_hash_arg, long _witnesses_arg, long _funding_outpoint_sig_arg);
+       // struct LDKCOption_ECDSASignatureZ TxSignatures_get_shared_input_signature(const struct LDKTxSignatures *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_get_shared_input_signature")] public static extern long TxSignatures_get_shared_input_signature(long _this_ptr);
+       // void TxSignatures_set_shared_input_signature(struct LDKTxSignatures *NONNULL_PTR this_ptr, struct LDKCOption_ECDSASignatureZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_set_shared_input_signature")] public static extern void TxSignatures_set_shared_input_signature(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKTxSignatures TxSignatures_new(struct LDKChannelId channel_id_arg, struct LDKThirtyTwoBytes tx_hash_arg, struct LDKCVec_WitnessZ witnesses_arg, struct LDKCOption_ECDSASignatureZ shared_input_signature_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_new")] public static extern long TxSignatures_new(long _channel_id_arg, long _tx_hash_arg, long _witnesses_arg, long _shared_input_signature_arg);
        // uint64_t TxSignatures_clone_ptr(LDKTxSignatures *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TxSignatures_clone_ptr")] public static extern long TxSignatures_clone_ptr(long _arg);
        // struct LDKTxSignatures TxSignatures_clone(const struct LDKTxSignatures *NONNULL_PTR orig);
@@ -9292,6 +9685,26 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UpdateFailMalformedHTLC_hash")] public static extern long UpdateFailMalformedHTLC_hash(long _o);
        // bool UpdateFailMalformedHTLC_eq(const struct LDKUpdateFailMalformedHTLC *NONNULL_PTR a, const struct LDKUpdateFailMalformedHTLC *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UpdateFailMalformedHTLC_eq")] public static extern bool UpdateFailMalformedHTLC_eq(long _a, long _b);
+       // void CommitmentSignedBatch_free(struct LDKCommitmentSignedBatch this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_free")] public static extern void CommitmentSignedBatch_free(long _this_obj);
+       // uint16_t CommitmentSignedBatch_get_batch_size(const struct LDKCommitmentSignedBatch *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_get_batch_size")] public static extern short CommitmentSignedBatch_get_batch_size(long _this_ptr);
+       // void CommitmentSignedBatch_set_batch_size(struct LDKCommitmentSignedBatch *NONNULL_PTR this_ptr, uint16_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_set_batch_size")] public static extern void CommitmentSignedBatch_set_batch_size(long _this_ptr, short _val);
+       // const uint8_t (*CommitmentSignedBatch_get_funding_txid(const struct LDKCommitmentSignedBatch *NONNULL_PTR this_ptr))[32];
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_get_funding_txid")] public static extern long CommitmentSignedBatch_get_funding_txid(long _this_ptr);
+       // void CommitmentSignedBatch_set_funding_txid(struct LDKCommitmentSignedBatch *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_set_funding_txid")] public static extern void CommitmentSignedBatch_set_funding_txid(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKCommitmentSignedBatch CommitmentSignedBatch_new(uint16_t batch_size_arg, struct LDKThirtyTwoBytes funding_txid_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_new")] public static extern long CommitmentSignedBatch_new(short _batch_size_arg, long _funding_txid_arg);
+       // uint64_t CommitmentSignedBatch_clone_ptr(LDKCommitmentSignedBatch *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_clone_ptr")] public static extern long CommitmentSignedBatch_clone_ptr(long _arg);
+       // struct LDKCommitmentSignedBatch CommitmentSignedBatch_clone(const struct LDKCommitmentSignedBatch *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_clone")] public static extern long CommitmentSignedBatch_clone(long _orig);
+       // uint64_t CommitmentSignedBatch_hash(const struct LDKCommitmentSignedBatch *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_hash")] public static extern long CommitmentSignedBatch_hash(long _o);
+       // bool CommitmentSignedBatch_eq(const struct LDKCommitmentSignedBatch *NONNULL_PTR a, const struct LDKCommitmentSignedBatch *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_eq")] public static extern bool CommitmentSignedBatch_eq(long _a, long _b);
        // void CommitmentSigned_free(struct LDKCommitmentSigned this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_free")] public static extern void CommitmentSigned_free(long _this_obj);
        // struct LDKChannelId CommitmentSigned_get_channel_id(const struct LDKCommitmentSigned *NONNULL_PTR this_ptr);
@@ -9306,8 +9719,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_get_htlc_signatures")] public static extern long CommitmentSigned_get_htlc_signatures(long _this_ptr);
        // void CommitmentSigned_set_htlc_signatures(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKCVec_ECDSASignatureZ val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_set_htlc_signatures")] public static extern void CommitmentSigned_set_htlc_signatures(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKCommitmentSigned CommitmentSigned_new(struct LDKChannelId channel_id_arg, struct LDKECDSASignature signature_arg, struct LDKCVec_ECDSASignatureZ htlc_signatures_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_new")] public static extern long CommitmentSigned_new(long _channel_id_arg, long _signature_arg, long _htlc_signatures_arg);
+       // struct LDKCommitmentSignedBatch CommitmentSigned_get_batch(const struct LDKCommitmentSigned *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_get_batch")] public static extern long CommitmentSigned_get_batch(long _this_ptr);
+       // void CommitmentSigned_set_batch(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKCommitmentSignedBatch val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_set_batch")] public static extern void CommitmentSigned_set_batch(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKCommitmentSigned CommitmentSigned_new(struct LDKChannelId channel_id_arg, struct LDKECDSASignature signature_arg, struct LDKCVec_ECDSASignatureZ htlc_signatures_arg, struct LDKCommitmentSignedBatch batch_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_new")] public static extern long CommitmentSigned_new(long _channel_id_arg, long _signature_arg, long _htlc_signatures_arg, long _batch_arg);
        // uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_clone_ptr")] public static extern long CommitmentSigned_clone_ptr(long _arg);
        // struct LDKCommitmentSigned CommitmentSigned_clone(const struct LDKCommitmentSigned *NONNULL_PTR orig);
@@ -9638,10 +10055,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_get_timestamp")] public static extern int UnsignedChannelUpdate_get_timestamp(long _this_ptr);
        // void UnsignedChannelUpdate_set_timestamp(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint32_t val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_set_timestamp")] public static extern void UnsignedChannelUpdate_set_timestamp(long _this_ptr, int _val);
-       // uint8_t UnsignedChannelUpdate_get_flags(const struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_get_flags")] public static extern byte UnsignedChannelUpdate_get_flags(long _this_ptr);
-       // void UnsignedChannelUpdate_set_flags(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint8_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_set_flags")] public static extern void UnsignedChannelUpdate_set_flags(long _this_ptr, byte _val);
+       // uint8_t UnsignedChannelUpdate_get_message_flags(const struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_get_message_flags")] public static extern byte UnsignedChannelUpdate_get_message_flags(long _this_ptr);
+       // void UnsignedChannelUpdate_set_message_flags(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint8_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_set_message_flags")] public static extern void UnsignedChannelUpdate_set_message_flags(long _this_ptr, byte _val);
+       // uint8_t UnsignedChannelUpdate_get_channel_flags(const struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_get_channel_flags")] public static extern byte UnsignedChannelUpdate_get_channel_flags(long _this_ptr);
+       // void UnsignedChannelUpdate_set_channel_flags(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint8_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_set_channel_flags")] public static extern void UnsignedChannelUpdate_set_channel_flags(long _this_ptr, byte _val);
        // uint16_t UnsignedChannelUpdate_get_cltv_expiry_delta(const struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_get_cltv_expiry_delta")] public static extern short UnsignedChannelUpdate_get_cltv_expiry_delta(long _this_ptr);
        // void UnsignedChannelUpdate_set_cltv_expiry_delta(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint16_t val);
@@ -9666,8 +10087,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_get_excess_data")] public static extern long UnsignedChannelUpdate_get_excess_data(long _this_ptr);
        // void UnsignedChannelUpdate_set_excess_data(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_set_excess_data")] public static extern void UnsignedChannelUpdate_set_excess_data(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKUnsignedChannelUpdate UnsignedChannelUpdate_new(struct LDKThirtyTwoBytes chain_hash_arg, uint64_t short_channel_id_arg, uint32_t timestamp_arg, uint8_t flags_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, uint32_t fee_base_msat_arg, uint32_t fee_proportional_millionths_arg, struct LDKCVec_u8Z excess_data_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_new")] public static extern long UnsignedChannelUpdate_new(long _chain_hash_arg, long _short_channel_id_arg, int _timestamp_arg, byte _flags_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg, int _fee_base_msat_arg, int _fee_proportional_millionths_arg, long _excess_data_arg);
+       // MUST_USE_RES struct LDKUnsignedChannelUpdate UnsignedChannelUpdate_new(struct LDKThirtyTwoBytes chain_hash_arg, uint64_t short_channel_id_arg, uint32_t timestamp_arg, uint8_t message_flags_arg, uint8_t channel_flags_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, uint32_t fee_base_msat_arg, uint32_t fee_proportional_millionths_arg, struct LDKCVec_u8Z excess_data_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_new")] public static extern long UnsignedChannelUpdate_new(long _chain_hash_arg, long _short_channel_id_arg, int _timestamp_arg, byte _message_flags_arg, byte _channel_flags_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg, int _fee_base_msat_arg, int _fee_proportional_millionths_arg, long _excess_data_arg);
        // uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedChannelUpdate_clone_ptr")] public static extern long UnsignedChannelUpdate_clone_ptr(long _arg);
        // struct LDKUnsignedChannelUpdate UnsignedChannelUpdate_clone(const struct LDKUnsignedChannelUpdate *NONNULL_PTR orig);
@@ -9978,10 +10399,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Stfu_write")] public static extern long Stfu_write(long _obj);
        // struct LDKCResult_StfuDecodeErrorZ Stfu_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Stfu_read")] public static extern long Stfu_read(long _ser);
-       // struct LDKCVec_u8Z Splice_write(const struct LDKSplice *NONNULL_PTR obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_write")] public static extern long Splice_write(long _obj);
-       // struct LDKCResult_SpliceDecodeErrorZ Splice_read(struct LDKu8slice ser);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Splice_read")] public static extern long Splice_read(long _ser);
+       // struct LDKCVec_u8Z SpliceInit_write(const struct LDKSpliceInit *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_write")] public static extern long SpliceInit_write(long _obj);
+       // struct LDKCResult_SpliceInitDecodeErrorZ SpliceInit_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceInit_read")] public static extern long SpliceInit_read(long _ser);
        // struct LDKCVec_u8Z SpliceAck_write(const struct LDKSpliceAck *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SpliceAck_write")] public static extern long SpliceAck_write(long _obj);
        // struct LDKCResult_SpliceAckDecodeErrorZ SpliceAck_read(struct LDKu8slice ser);
@@ -10042,6 +10463,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosingSignedFeeRange_write")] public static extern long ClosingSignedFeeRange_write(long _obj);
        // struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ ClosingSignedFeeRange_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosingSignedFeeRange_read")] public static extern long ClosingSignedFeeRange_read(long _ser);
+       // struct LDKCVec_u8Z CommitmentSignedBatch_write(const struct LDKCommitmentSignedBatch *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_write")] public static extern long CommitmentSignedBatch_write(long _obj);
+       // struct LDKCResult_CommitmentSignedBatchDecodeErrorZ CommitmentSignedBatch_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSignedBatch_read")] public static extern long CommitmentSignedBatch_read(long _ser);
        // struct LDKCVec_u8Z CommitmentSigned_write(const struct LDKCommitmentSigned *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_CommitmentSigned_write")] public static extern long CommitmentSigned_write(long _obj);
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CommitmentSigned_read(struct LDKu8slice ser);
@@ -10178,8 +10603,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_free")] public static extern void IgnoringMessageHandler_free(long _this_obj);
        // MUST_USE_RES struct LDKIgnoringMessageHandler IgnoringMessageHandler_new(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_new")] public static extern long IgnoringMessageHandler_new();
-       // struct LDKEventsProvider IgnoringMessageHandler_as_EventsProvider(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_as_EventsProvider")] public static extern long IgnoringMessageHandler_as_EventsProvider(long _this_arg);
        // struct LDKMessageSendEventsProvider IgnoringMessageHandler_as_MessageSendEventsProvider(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_as_MessageSendEventsProvider")] public static extern long IgnoringMessageHandler_as_MessageSendEventsProvider(long _this_arg);
        // struct LDKRoutingMessageHandler IgnoringMessageHandler_as_RoutingMessageHandler(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
@@ -10188,6 +10611,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_as_OnionMessageHandler")] public static extern long IgnoringMessageHandler_as_OnionMessageHandler(long _this_arg);
        // struct LDKOffersMessageHandler IgnoringMessageHandler_as_OffersMessageHandler(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_as_OffersMessageHandler")] public static extern long IgnoringMessageHandler_as_OffersMessageHandler(long _this_arg);
+       // struct LDKAsyncPaymentsMessageHandler IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_as_AsyncPaymentsMessageHandler")] public static extern long IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(long _this_arg);
        // struct LDKCustomOnionMessageHandler IgnoringMessageHandler_as_CustomOnionMessageHandler(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IgnoringMessageHandler_as_CustomOnionMessageHandler")] public static extern long IgnoringMessageHandler_as_CustomOnionMessageHandler(long _this_arg);
        // struct LDKCustomMessageReader IgnoringMessageHandler_as_CustomMessageReader(const struct LDKIgnoringMessageHandler *NONNULL_PTR this_arg);
@@ -10440,6 +10865,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCOutputInCommitment_clone")] public static extern long HTLCOutputInCommitment_clone(long _orig);
        // bool HTLCOutputInCommitment_eq(const struct LDKHTLCOutputInCommitment *NONNULL_PTR a, const struct LDKHTLCOutputInCommitment *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCOutputInCommitment_eq")] public static extern bool HTLCOutputInCommitment_eq(long _a, long _b);
+       // MUST_USE_RES uint64_t HTLCOutputInCommitment_to_bitcoin_amount(const struct LDKHTLCOutputInCommitment *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCOutputInCommitment_to_bitcoin_amount")] public static extern long HTLCOutputInCommitment_to_bitcoin_amount(long _this_arg);
        // struct LDKCVec_u8Z HTLCOutputInCommitment_write(const struct LDKHTLCOutputInCommitment *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCOutputInCommitment_write")] public static extern long HTLCOutputInCommitment_write(long _obj);
        // struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ HTLCOutputInCommitment_read(struct LDKu8slice ser);
@@ -10662,222 +11089,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_TrustedCommitmentTransaction_build_to_local_justice_tx")] public static extern long TrustedCommitmentTransaction_build_to_local_justice_tx(long _this_arg, long _feerate_per_kw, long _destination_script);
        // uint64_t get_commitment_transaction_number_obscure_factor(struct LDKPublicKey broadcaster_payment_basepoint, struct LDKPublicKey countersignatory_payment_basepoint, bool outbound_from_broadcaster);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_get_commitment_transaction_number_obscure_factor")] public static extern long get_commitment_transaction_number_obscure_factor(long _broadcaster_payment_basepoint, long _countersignatory_payment_basepoint, bool _outbound_from_broadcaster);
-       // bool InitFeatures_eq(const struct LDKInitFeatures *NONNULL_PTR a, const struct LDKInitFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_eq")] public static extern bool InitFeatures_eq(long _a, long _b);
-       // bool NodeFeatures_eq(const struct LDKNodeFeatures *NONNULL_PTR a, const struct LDKNodeFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_eq")] public static extern bool NodeFeatures_eq(long _a, long _b);
-       // bool ChannelFeatures_eq(const struct LDKChannelFeatures *NONNULL_PTR a, const struct LDKChannelFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_eq")] public static extern bool ChannelFeatures_eq(long _a, long _b);
-       // bool Bolt11InvoiceFeatures_eq(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR a, const struct LDKBolt11InvoiceFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_eq")] public static extern bool Bolt11InvoiceFeatures_eq(long _a, long _b);
-       // bool OfferFeatures_eq(const struct LDKOfferFeatures *NONNULL_PTR a, const struct LDKOfferFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_eq")] public static extern bool OfferFeatures_eq(long _a, long _b);
-       // bool InvoiceRequestFeatures_eq(const struct LDKInvoiceRequestFeatures *NONNULL_PTR a, const struct LDKInvoiceRequestFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_eq")] public static extern bool InvoiceRequestFeatures_eq(long _a, long _b);
-       // bool Bolt12InvoiceFeatures_eq(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR a, const struct LDKBolt12InvoiceFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_eq")] public static extern bool Bolt12InvoiceFeatures_eq(long _a, long _b);
-       // bool BlindedHopFeatures_eq(const struct LDKBlindedHopFeatures *NONNULL_PTR a, const struct LDKBlindedHopFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_eq")] public static extern bool BlindedHopFeatures_eq(long _a, long _b);
-       // bool ChannelTypeFeatures_eq(const struct LDKChannelTypeFeatures *NONNULL_PTR a, const struct LDKChannelTypeFeatures *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_eq")] public static extern bool ChannelTypeFeatures_eq(long _a, long _b);
-       // uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clone_ptr")] public static extern long InitFeatures_clone_ptr(long _arg);
-       // struct LDKInitFeatures InitFeatures_clone(const struct LDKInitFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clone")] public static extern long InitFeatures_clone(long _orig);
-       // uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clone_ptr")] public static extern long NodeFeatures_clone_ptr(long _arg);
-       // struct LDKNodeFeatures NodeFeatures_clone(const struct LDKNodeFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clone")] public static extern long NodeFeatures_clone(long _orig);
-       // uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_clone_ptr")] public static extern long ChannelFeatures_clone_ptr(long _arg);
-       // struct LDKChannelFeatures ChannelFeatures_clone(const struct LDKChannelFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_clone")] public static extern long ChannelFeatures_clone(long _orig);
-       // uint64_t Bolt11InvoiceFeatures_clone_ptr(LDKBolt11InvoiceFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_clone_ptr")] public static extern long Bolt11InvoiceFeatures_clone_ptr(long _arg);
-       // struct LDKBolt11InvoiceFeatures Bolt11InvoiceFeatures_clone(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_clone")] public static extern long Bolt11InvoiceFeatures_clone(long _orig);
-       // uint64_t OfferFeatures_clone_ptr(LDKOfferFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_clone_ptr")] public static extern long OfferFeatures_clone_ptr(long _arg);
-       // struct LDKOfferFeatures OfferFeatures_clone(const struct LDKOfferFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_clone")] public static extern long OfferFeatures_clone(long _orig);
-       // uint64_t InvoiceRequestFeatures_clone_ptr(LDKInvoiceRequestFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_clone_ptr")] public static extern long InvoiceRequestFeatures_clone_ptr(long _arg);
-       // struct LDKInvoiceRequestFeatures InvoiceRequestFeatures_clone(const struct LDKInvoiceRequestFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_clone")] public static extern long InvoiceRequestFeatures_clone(long _orig);
-       // uint64_t Bolt12InvoiceFeatures_clone_ptr(LDKBolt12InvoiceFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_clone_ptr")] public static extern long Bolt12InvoiceFeatures_clone_ptr(long _arg);
-       // struct LDKBolt12InvoiceFeatures Bolt12InvoiceFeatures_clone(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_clone")] public static extern long Bolt12InvoiceFeatures_clone(long _orig);
-       // uint64_t BlindedHopFeatures_clone_ptr(LDKBlindedHopFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_clone_ptr")] public static extern long BlindedHopFeatures_clone_ptr(long _arg);
-       // struct LDKBlindedHopFeatures BlindedHopFeatures_clone(const struct LDKBlindedHopFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_clone")] public static extern long BlindedHopFeatures_clone(long _orig);
-       // uint64_t ChannelTypeFeatures_clone_ptr(LDKChannelTypeFeatures *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_clone_ptr")] public static extern long ChannelTypeFeatures_clone_ptr(long _arg);
-       // struct LDKChannelTypeFeatures ChannelTypeFeatures_clone(const struct LDKChannelTypeFeatures *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_clone")] public static extern long ChannelTypeFeatures_clone(long _orig);
-       // uint64_t InitFeatures_hash(const struct LDKInitFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_hash")] public static extern long InitFeatures_hash(long _o);
-       // uint64_t NodeFeatures_hash(const struct LDKNodeFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_hash")] public static extern long NodeFeatures_hash(long _o);
-       // uint64_t ChannelFeatures_hash(const struct LDKChannelFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_hash")] public static extern long ChannelFeatures_hash(long _o);
-       // uint64_t Bolt11InvoiceFeatures_hash(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_hash")] public static extern long Bolt11InvoiceFeatures_hash(long _o);
-       // uint64_t OfferFeatures_hash(const struct LDKOfferFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_hash")] public static extern long OfferFeatures_hash(long _o);
-       // uint64_t InvoiceRequestFeatures_hash(const struct LDKInvoiceRequestFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_hash")] public static extern long InvoiceRequestFeatures_hash(long _o);
-       // uint64_t Bolt12InvoiceFeatures_hash(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_hash")] public static extern long Bolt12InvoiceFeatures_hash(long _o);
-       // uint64_t BlindedHopFeatures_hash(const struct LDKBlindedHopFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_hash")] public static extern long BlindedHopFeatures_hash(long _o);
-       // uint64_t ChannelTypeFeatures_hash(const struct LDKChannelTypeFeatures *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_hash")] public static extern long ChannelTypeFeatures_hash(long _o);
-       // void InitFeatures_free(struct LDKInitFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_free")] public static extern void InitFeatures_free(long _this_obj);
-       // void NodeFeatures_free(struct LDKNodeFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_free")] public static extern void NodeFeatures_free(long _this_obj);
-       // void ChannelFeatures_free(struct LDKChannelFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_free")] public static extern void ChannelFeatures_free(long _this_obj);
-       // void Bolt11InvoiceFeatures_free(struct LDKBolt11InvoiceFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_free")] public static extern void Bolt11InvoiceFeatures_free(long _this_obj);
-       // void OfferFeatures_free(struct LDKOfferFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_free")] public static extern void OfferFeatures_free(long _this_obj);
-       // void InvoiceRequestFeatures_free(struct LDKInvoiceRequestFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_free")] public static extern void InvoiceRequestFeatures_free(long _this_obj);
-       // void Bolt12InvoiceFeatures_free(struct LDKBolt12InvoiceFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_free")] public static extern void Bolt12InvoiceFeatures_free(long _this_obj);
-       // void BlindedHopFeatures_free(struct LDKBlindedHopFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_free")] public static extern void BlindedHopFeatures_free(long _this_obj);
-       // void ChannelTypeFeatures_free(struct LDKChannelTypeFeatures this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_free")] public static extern void ChannelTypeFeatures_free(long _this_obj);
-       // MUST_USE_RES struct LDKInitFeatures InitFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_empty")] public static extern long InitFeatures_empty();
-       // MUST_USE_RES bool InitFeatures_requires_unknown_bits_from(const struct LDKInitFeatures *NONNULL_PTR this_arg, const struct LDKInitFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_unknown_bits_from")] public static extern bool InitFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool InitFeatures_requires_unknown_bits(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_unknown_bits")] public static extern bool InitFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_required_feature_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_required_feature_bit")] public static extern long InitFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_optional_feature_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_optional_feature_bit")] public static extern long InitFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_required_custom_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_required_custom_bit")] public static extern long InitFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_optional_custom_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_optional_custom_bit")] public static extern long InitFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKNodeFeatures NodeFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_empty")] public static extern long NodeFeatures_empty();
-       // MUST_USE_RES bool NodeFeatures_requires_unknown_bits_from(const struct LDKNodeFeatures *NONNULL_PTR this_arg, const struct LDKNodeFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_unknown_bits_from")] public static extern bool NodeFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool NodeFeatures_requires_unknown_bits(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_unknown_bits")] public static extern bool NodeFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_required_feature_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_required_feature_bit")] public static extern long NodeFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_optional_feature_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_optional_feature_bit")] public static extern long NodeFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_required_custom_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_required_custom_bit")] public static extern long NodeFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_optional_custom_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_optional_custom_bit")] public static extern long NodeFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKChannelFeatures ChannelFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_empty")] public static extern long ChannelFeatures_empty();
-       // MUST_USE_RES bool ChannelFeatures_requires_unknown_bits_from(const struct LDKChannelFeatures *NONNULL_PTR this_arg, const struct LDKChannelFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_requires_unknown_bits_from")] public static extern bool ChannelFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool ChannelFeatures_requires_unknown_bits(const struct LDKChannelFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_requires_unknown_bits")] public static extern bool ChannelFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_required_feature_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_required_feature_bit")] public static extern long ChannelFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_optional_feature_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_optional_feature_bit")] public static extern long ChannelFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_required_custom_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_required_custom_bit")] public static extern long ChannelFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_optional_custom_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_optional_custom_bit")] public static extern long ChannelFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKBolt11InvoiceFeatures Bolt11InvoiceFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_empty")] public static extern long Bolt11InvoiceFeatures_empty();
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_unknown_bits_from(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, const struct LDKBolt11InvoiceFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits_from")] public static extern bool Bolt11InvoiceFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_unknown_bits(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits")] public static extern bool Bolt11InvoiceFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_required_feature_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_required_feature_bit")] public static extern long Bolt11InvoiceFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_optional_feature_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_optional_feature_bit")] public static extern long Bolt11InvoiceFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_required_custom_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_required_custom_bit")] public static extern long Bolt11InvoiceFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_optional_custom_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_optional_custom_bit")] public static extern long Bolt11InvoiceFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKOfferFeatures OfferFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_empty")] public static extern long OfferFeatures_empty();
-       // MUST_USE_RES bool OfferFeatures_requires_unknown_bits_from(const struct LDKOfferFeatures *NONNULL_PTR this_arg, const struct LDKOfferFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_requires_unknown_bits_from")] public static extern bool OfferFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool OfferFeatures_requires_unknown_bits(const struct LDKOfferFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_requires_unknown_bits")] public static extern bool OfferFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_required_feature_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_required_feature_bit")] public static extern long OfferFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_optional_feature_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_optional_feature_bit")] public static extern long OfferFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_required_custom_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_required_custom_bit")] public static extern long OfferFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_optional_custom_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_optional_custom_bit")] public static extern long OfferFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKInvoiceRequestFeatures InvoiceRequestFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_empty")] public static extern long InvoiceRequestFeatures_empty();
-       // MUST_USE_RES bool InvoiceRequestFeatures_requires_unknown_bits_from(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, const struct LDKInvoiceRequestFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_requires_unknown_bits_from")] public static extern bool InvoiceRequestFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool InvoiceRequestFeatures_requires_unknown_bits(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_requires_unknown_bits")] public static extern bool InvoiceRequestFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_required_feature_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_required_feature_bit")] public static extern long InvoiceRequestFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_optional_feature_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_optional_feature_bit")] public static extern long InvoiceRequestFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_required_custom_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_required_custom_bit")] public static extern long InvoiceRequestFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_optional_custom_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_optional_custom_bit")] public static extern long InvoiceRequestFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKBolt12InvoiceFeatures Bolt12InvoiceFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_empty")] public static extern long Bolt12InvoiceFeatures_empty();
-       // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_unknown_bits_from(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, const struct LDKBolt12InvoiceFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits_from")] public static extern bool Bolt12InvoiceFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_unknown_bits(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits")] public static extern bool Bolt12InvoiceFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_required_feature_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_required_feature_bit")] public static extern long Bolt12InvoiceFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_optional_feature_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_optional_feature_bit")] public static extern long Bolt12InvoiceFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_required_custom_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_required_custom_bit")] public static extern long Bolt12InvoiceFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_optional_custom_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_optional_custom_bit")] public static extern long Bolt12InvoiceFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKBlindedHopFeatures BlindedHopFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_empty")] public static extern long BlindedHopFeatures_empty();
-       // MUST_USE_RES bool BlindedHopFeatures_requires_unknown_bits_from(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, const struct LDKBlindedHopFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_requires_unknown_bits_from")] public static extern bool BlindedHopFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool BlindedHopFeatures_requires_unknown_bits(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_requires_unknown_bits")] public static extern bool BlindedHopFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_required_feature_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_required_feature_bit")] public static extern long BlindedHopFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_optional_feature_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_optional_feature_bit")] public static extern long BlindedHopFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_required_custom_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_required_custom_bit")] public static extern long BlindedHopFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_optional_custom_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_optional_custom_bit")] public static extern long BlindedHopFeatures_set_optional_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKChannelTypeFeatures ChannelTypeFeatures_empty(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_empty")] public static extern long ChannelTypeFeatures_empty();
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_unknown_bits_from(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, const struct LDKChannelTypeFeatures *NONNULL_PTR other);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_unknown_bits_from")] public static extern bool ChannelTypeFeatures_requires_unknown_bits_from(long _this_arg, long _other);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_unknown_bits(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_unknown_bits")] public static extern bool ChannelTypeFeatures_requires_unknown_bits(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_required_feature_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_required_feature_bit")] public static extern long ChannelTypeFeatures_set_required_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_optional_feature_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_optional_feature_bit")] public static extern long ChannelTypeFeatures_set_optional_feature_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_required_custom_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_required_custom_bit")] public static extern long ChannelTypeFeatures_set_required_custom_bit(long _this_arg, long _bit);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_optional_custom_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_optional_custom_bit")] public static extern long ChannelTypeFeatures_set_optional_custom_bit(long _this_arg, long _bit);
        // struct LDKCVec_u8Z InitFeatures_write(const struct LDKInitFeatures *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_write")] public static extern long InitFeatures_write(long _obj);
        // struct LDKCResult_InitFeaturesDecodeErrorZ InitFeatures_read(struct LDKu8slice ser);
@@ -10906,404 +11117,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_write")] public static extern long ChannelTypeFeatures_write(long _obj);
        // struct LDKCResult_ChannelTypeFeaturesDecodeErrorZ ChannelTypeFeatures_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_read")] public static extern long ChannelTypeFeatures_read(long _ser);
-       // void InitFeatures_set_data_loss_protect_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_data_loss_protect_optional")] public static extern void InitFeatures_set_data_loss_protect_optional(long _this_arg);
-       // void InitFeatures_set_data_loss_protect_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_data_loss_protect_required")] public static extern void InitFeatures_set_data_loss_protect_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_data_loss_protect(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_data_loss_protect")] public static extern bool InitFeatures_supports_data_loss_protect(long _this_arg);
-       // void NodeFeatures_set_data_loss_protect_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_data_loss_protect_optional")] public static extern void NodeFeatures_set_data_loss_protect_optional(long _this_arg);
-       // void NodeFeatures_set_data_loss_protect_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_data_loss_protect_required")] public static extern void NodeFeatures_set_data_loss_protect_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_data_loss_protect(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_data_loss_protect")] public static extern bool NodeFeatures_supports_data_loss_protect(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_data_loss_protect(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_data_loss_protect")] public static extern bool InitFeatures_requires_data_loss_protect(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_data_loss_protect(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_data_loss_protect")] public static extern bool NodeFeatures_requires_data_loss_protect(long _this_arg);
-       // void InitFeatures_set_initial_routing_sync_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_initial_routing_sync_optional")] public static extern void InitFeatures_set_initial_routing_sync_optional(long _this_arg);
-       // void InitFeatures_set_initial_routing_sync_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_initial_routing_sync_required")] public static extern void InitFeatures_set_initial_routing_sync_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_initial_routing_sync(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_initial_routing_sync")] public static extern bool InitFeatures_initial_routing_sync(long _this_arg);
-       // void InitFeatures_set_upfront_shutdown_script_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_upfront_shutdown_script_optional")] public static extern void InitFeatures_set_upfront_shutdown_script_optional(long _this_arg);
-       // void InitFeatures_set_upfront_shutdown_script_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_upfront_shutdown_script_required")] public static extern void InitFeatures_set_upfront_shutdown_script_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_upfront_shutdown_script(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_upfront_shutdown_script")] public static extern bool InitFeatures_supports_upfront_shutdown_script(long _this_arg);
-       // void NodeFeatures_set_upfront_shutdown_script_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_upfront_shutdown_script_optional")] public static extern void NodeFeatures_set_upfront_shutdown_script_optional(long _this_arg);
-       // void NodeFeatures_set_upfront_shutdown_script_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_upfront_shutdown_script_required")] public static extern void NodeFeatures_set_upfront_shutdown_script_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_upfront_shutdown_script(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_upfront_shutdown_script")] public static extern bool NodeFeatures_supports_upfront_shutdown_script(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_upfront_shutdown_script(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_upfront_shutdown_script")] public static extern bool InitFeatures_requires_upfront_shutdown_script(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_upfront_shutdown_script(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_upfront_shutdown_script")] public static extern bool NodeFeatures_requires_upfront_shutdown_script(long _this_arg);
-       // void InitFeatures_set_gossip_queries_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_gossip_queries_optional")] public static extern void InitFeatures_set_gossip_queries_optional(long _this_arg);
-       // void InitFeatures_set_gossip_queries_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_gossip_queries_required")] public static extern void InitFeatures_set_gossip_queries_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_gossip_queries(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_gossip_queries")] public static extern bool InitFeatures_supports_gossip_queries(long _this_arg);
-       // void NodeFeatures_set_gossip_queries_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_gossip_queries_optional")] public static extern void NodeFeatures_set_gossip_queries_optional(long _this_arg);
-       // void NodeFeatures_set_gossip_queries_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_gossip_queries_required")] public static extern void NodeFeatures_set_gossip_queries_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_gossip_queries(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_gossip_queries")] public static extern bool NodeFeatures_supports_gossip_queries(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_gossip_queries(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_gossip_queries")] public static extern bool InitFeatures_requires_gossip_queries(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_gossip_queries(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_gossip_queries")] public static extern bool NodeFeatures_requires_gossip_queries(long _this_arg);
-       // void InitFeatures_set_variable_length_onion_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_variable_length_onion_optional")] public static extern void InitFeatures_set_variable_length_onion_optional(long _this_arg);
-       // void InitFeatures_set_variable_length_onion_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_variable_length_onion_required")] public static extern void InitFeatures_set_variable_length_onion_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_variable_length_onion(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_variable_length_onion")] public static extern bool InitFeatures_supports_variable_length_onion(long _this_arg);
-       // void NodeFeatures_set_variable_length_onion_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_variable_length_onion_optional")] public static extern void NodeFeatures_set_variable_length_onion_optional(long _this_arg);
-       // void NodeFeatures_set_variable_length_onion_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_variable_length_onion_required")] public static extern void NodeFeatures_set_variable_length_onion_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_variable_length_onion(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_variable_length_onion")] public static extern bool NodeFeatures_supports_variable_length_onion(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_variable_length_onion_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_optional")] public static extern void Bolt11InvoiceFeatures_set_variable_length_onion_optional(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_variable_length_onion_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_required")] public static extern void Bolt11InvoiceFeatures_set_variable_length_onion_required(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_variable_length_onion(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_variable_length_onion")] public static extern bool Bolt11InvoiceFeatures_supports_variable_length_onion(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_variable_length_onion(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_variable_length_onion")] public static extern bool InitFeatures_requires_variable_length_onion(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_variable_length_onion(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_variable_length_onion")] public static extern bool NodeFeatures_requires_variable_length_onion(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_variable_length_onion(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_variable_length_onion")] public static extern bool Bolt11InvoiceFeatures_requires_variable_length_onion(long _this_arg);
-       // void InitFeatures_set_static_remote_key_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_static_remote_key_optional")] public static extern void InitFeatures_set_static_remote_key_optional(long _this_arg);
-       // void InitFeatures_set_static_remote_key_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_static_remote_key_required")] public static extern void InitFeatures_set_static_remote_key_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_static_remote_key(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_static_remote_key")] public static extern bool InitFeatures_supports_static_remote_key(long _this_arg);
-       // void NodeFeatures_set_static_remote_key_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_static_remote_key_optional")] public static extern void NodeFeatures_set_static_remote_key_optional(long _this_arg);
-       // void NodeFeatures_set_static_remote_key_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_static_remote_key_required")] public static extern void NodeFeatures_set_static_remote_key_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_static_remote_key(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_static_remote_key")] public static extern bool NodeFeatures_supports_static_remote_key(long _this_arg);
-       // void ChannelTypeFeatures_set_static_remote_key_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_static_remote_key_optional")] public static extern void ChannelTypeFeatures_set_static_remote_key_optional(long _this_arg);
-       // void ChannelTypeFeatures_set_static_remote_key_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_static_remote_key_required")] public static extern void ChannelTypeFeatures_set_static_remote_key_required(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_supports_static_remote_key(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_static_remote_key")] public static extern bool ChannelTypeFeatures_supports_static_remote_key(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_static_remote_key(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_static_remote_key")] public static extern bool InitFeatures_requires_static_remote_key(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_static_remote_key(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_static_remote_key")] public static extern bool NodeFeatures_requires_static_remote_key(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_static_remote_key(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_static_remote_key")] public static extern bool ChannelTypeFeatures_requires_static_remote_key(long _this_arg);
-       // void InitFeatures_set_payment_secret_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_payment_secret_optional")] public static extern void InitFeatures_set_payment_secret_optional(long _this_arg);
-       // void InitFeatures_set_payment_secret_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_payment_secret_required")] public static extern void InitFeatures_set_payment_secret_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_payment_secret(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_payment_secret")] public static extern bool InitFeatures_supports_payment_secret(long _this_arg);
-       // void NodeFeatures_set_payment_secret_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_payment_secret_optional")] public static extern void NodeFeatures_set_payment_secret_optional(long _this_arg);
-       // void NodeFeatures_set_payment_secret_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_payment_secret_required")] public static extern void NodeFeatures_set_payment_secret_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_payment_secret(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_payment_secret")] public static extern bool NodeFeatures_supports_payment_secret(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_payment_secret_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_optional")] public static extern void Bolt11InvoiceFeatures_set_payment_secret_optional(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_payment_secret_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_required")] public static extern void Bolt11InvoiceFeatures_set_payment_secret_required(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_payment_secret(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_payment_secret")] public static extern bool Bolt11InvoiceFeatures_supports_payment_secret(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_payment_secret(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_payment_secret")] public static extern bool InitFeatures_requires_payment_secret(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_payment_secret(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_payment_secret")] public static extern bool NodeFeatures_requires_payment_secret(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_payment_secret(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_payment_secret")] public static extern bool Bolt11InvoiceFeatures_requires_payment_secret(long _this_arg);
-       // void InitFeatures_set_basic_mpp_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_basic_mpp_optional")] public static extern void InitFeatures_set_basic_mpp_optional(long _this_arg);
-       // void InitFeatures_set_basic_mpp_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_basic_mpp_required")] public static extern void InitFeatures_set_basic_mpp_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_basic_mpp(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_basic_mpp")] public static extern bool InitFeatures_supports_basic_mpp(long _this_arg);
-       // void NodeFeatures_set_basic_mpp_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_basic_mpp_optional")] public static extern void NodeFeatures_set_basic_mpp_optional(long _this_arg);
-       // void NodeFeatures_set_basic_mpp_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_basic_mpp_required")] public static extern void NodeFeatures_set_basic_mpp_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_basic_mpp(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_basic_mpp")] public static extern bool NodeFeatures_supports_basic_mpp(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_basic_mpp_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_optional")] public static extern void Bolt11InvoiceFeatures_set_basic_mpp_optional(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_basic_mpp_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_required")] public static extern void Bolt11InvoiceFeatures_set_basic_mpp_required(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_basic_mpp(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_basic_mpp")] public static extern bool Bolt11InvoiceFeatures_supports_basic_mpp(long _this_arg);
-       // void Bolt12InvoiceFeatures_set_basic_mpp_optional(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_optional")] public static extern void Bolt12InvoiceFeatures_set_basic_mpp_optional(long _this_arg);
-       // void Bolt12InvoiceFeatures_set_basic_mpp_required(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_required")] public static extern void Bolt12InvoiceFeatures_set_basic_mpp_required(long _this_arg);
-       // MUST_USE_RES bool Bolt12InvoiceFeatures_supports_basic_mpp(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_supports_basic_mpp")] public static extern bool Bolt12InvoiceFeatures_supports_basic_mpp(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_basic_mpp(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_basic_mpp")] public static extern bool InitFeatures_requires_basic_mpp(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_basic_mpp(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_basic_mpp")] public static extern bool NodeFeatures_requires_basic_mpp(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_basic_mpp(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_basic_mpp")] public static extern bool Bolt11InvoiceFeatures_requires_basic_mpp(long _this_arg);
-       // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_basic_mpp(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_requires_basic_mpp")] public static extern bool Bolt12InvoiceFeatures_requires_basic_mpp(long _this_arg);
-       // void InitFeatures_set_wumbo_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_wumbo_optional")] public static extern void InitFeatures_set_wumbo_optional(long _this_arg);
-       // void InitFeatures_set_wumbo_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_wumbo_required")] public static extern void InitFeatures_set_wumbo_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_wumbo(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_wumbo")] public static extern bool InitFeatures_supports_wumbo(long _this_arg);
-       // void NodeFeatures_set_wumbo_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_wumbo_optional")] public static extern void NodeFeatures_set_wumbo_optional(long _this_arg);
-       // void NodeFeatures_set_wumbo_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_wumbo_required")] public static extern void NodeFeatures_set_wumbo_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_wumbo(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_wumbo")] public static extern bool NodeFeatures_supports_wumbo(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_wumbo(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_wumbo")] public static extern bool InitFeatures_requires_wumbo(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_wumbo(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_wumbo")] public static extern bool NodeFeatures_requires_wumbo(long _this_arg);
-       // void InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional")] public static extern void InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(long _this_arg);
-       // void InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_required")] public static extern void InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_anchors_nonzero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_anchors_nonzero_fee_htlc_tx")] public static extern bool InitFeatures_supports_anchors_nonzero_fee_htlc_tx(long _this_arg);
-       // void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional")] public static extern void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(long _this_arg);
-       // void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required")] public static extern void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_anchors_nonzero_fee_htlc_tx")] public static extern bool NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(long _this_arg);
-       // void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional")] public static extern void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(long _this_arg);
-       // void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required")] public static extern void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_anchors_nonzero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_anchors_nonzero_fee_htlc_tx")] public static extern bool InitFeatures_requires_anchors_nonzero_fee_htlc_tx(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_anchors_nonzero_fee_htlc_tx")] public static extern bool NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(long _this_arg);
-       // void InitFeatures_set_anchors_zero_fee_htlc_tx_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_optional")] public static extern void InitFeatures_set_anchors_zero_fee_htlc_tx_optional(long _this_arg);
-       // void InitFeatures_set_anchors_zero_fee_htlc_tx_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_required")] public static extern void InitFeatures_set_anchors_zero_fee_htlc_tx_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_anchors_zero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_anchors_zero_fee_htlc_tx")] public static extern bool InitFeatures_supports_anchors_zero_fee_htlc_tx(long _this_arg);
-       // void NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_optional")] public static extern void NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(long _this_arg);
-       // void NodeFeatures_set_anchors_zero_fee_htlc_tx_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_required")] public static extern void NodeFeatures_set_anchors_zero_fee_htlc_tx_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_anchors_zero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_anchors_zero_fee_htlc_tx")] public static extern bool NodeFeatures_supports_anchors_zero_fee_htlc_tx(long _this_arg);
-       // void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional")] public static extern void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(long _this_arg);
-       // void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required")] public static extern void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_anchors_zero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_anchors_zero_fee_htlc_tx")] public static extern bool InitFeatures_requires_anchors_zero_fee_htlc_tx(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_anchors_zero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_anchors_zero_fee_htlc_tx")] public static extern bool NodeFeatures_requires_anchors_zero_fee_htlc_tx(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(long _this_arg);
-       // void InitFeatures_set_route_blinding_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_route_blinding_optional")] public static extern void InitFeatures_set_route_blinding_optional(long _this_arg);
-       // void InitFeatures_set_route_blinding_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_route_blinding_required")] public static extern void InitFeatures_set_route_blinding_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_route_blinding(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_route_blinding")] public static extern bool InitFeatures_supports_route_blinding(long _this_arg);
-       // void NodeFeatures_set_route_blinding_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_route_blinding_optional")] public static extern void NodeFeatures_set_route_blinding_optional(long _this_arg);
-       // void NodeFeatures_set_route_blinding_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_route_blinding_required")] public static extern void NodeFeatures_set_route_blinding_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_route_blinding(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_route_blinding")] public static extern bool NodeFeatures_supports_route_blinding(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_route_blinding(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_route_blinding")] public static extern bool InitFeatures_requires_route_blinding(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_route_blinding(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_route_blinding")] public static extern bool NodeFeatures_requires_route_blinding(long _this_arg);
-       // void InitFeatures_set_shutdown_any_segwit_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_shutdown_any_segwit_optional")] public static extern void InitFeatures_set_shutdown_any_segwit_optional(long _this_arg);
-       // void InitFeatures_set_shutdown_any_segwit_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_shutdown_any_segwit_required")] public static extern void InitFeatures_set_shutdown_any_segwit_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_shutdown_anysegwit(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_shutdown_anysegwit")] public static extern bool InitFeatures_supports_shutdown_anysegwit(long _this_arg);
-       // void NodeFeatures_set_shutdown_any_segwit_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_shutdown_any_segwit_optional")] public static extern void NodeFeatures_set_shutdown_any_segwit_optional(long _this_arg);
-       // void NodeFeatures_set_shutdown_any_segwit_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_shutdown_any_segwit_required")] public static extern void NodeFeatures_set_shutdown_any_segwit_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_shutdown_anysegwit(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_shutdown_anysegwit")] public static extern bool NodeFeatures_supports_shutdown_anysegwit(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_shutdown_anysegwit(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_shutdown_anysegwit")] public static extern bool InitFeatures_requires_shutdown_anysegwit(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_shutdown_anysegwit(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_shutdown_anysegwit")] public static extern bool NodeFeatures_requires_shutdown_anysegwit(long _this_arg);
-       // void InitFeatures_set_taproot_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_taproot_optional")] public static extern void InitFeatures_set_taproot_optional(long _this_arg);
-       // void InitFeatures_set_taproot_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_taproot_required")] public static extern void InitFeatures_set_taproot_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_taproot(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_taproot")] public static extern bool InitFeatures_supports_taproot(long _this_arg);
-       // void NodeFeatures_set_taproot_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_taproot_optional")] public static extern void NodeFeatures_set_taproot_optional(long _this_arg);
-       // void NodeFeatures_set_taproot_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_taproot_required")] public static extern void NodeFeatures_set_taproot_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_taproot(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_taproot")] public static extern bool NodeFeatures_supports_taproot(long _this_arg);
-       // void ChannelTypeFeatures_set_taproot_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_taproot_optional")] public static extern void ChannelTypeFeatures_set_taproot_optional(long _this_arg);
-       // void ChannelTypeFeatures_set_taproot_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_taproot_required")] public static extern void ChannelTypeFeatures_set_taproot_required(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_supports_taproot(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_taproot")] public static extern bool ChannelTypeFeatures_supports_taproot(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_taproot(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_taproot")] public static extern bool InitFeatures_requires_taproot(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_taproot(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_taproot")] public static extern bool NodeFeatures_requires_taproot(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_taproot(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_taproot")] public static extern bool ChannelTypeFeatures_requires_taproot(long _this_arg);
-       // void InitFeatures_set_onion_messages_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_onion_messages_optional")] public static extern void InitFeatures_set_onion_messages_optional(long _this_arg);
-       // void InitFeatures_set_onion_messages_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_onion_messages_required")] public static extern void InitFeatures_set_onion_messages_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_onion_messages(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_onion_messages")] public static extern bool InitFeatures_supports_onion_messages(long _this_arg);
-       // void NodeFeatures_set_onion_messages_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_onion_messages_optional")] public static extern void NodeFeatures_set_onion_messages_optional(long _this_arg);
-       // void NodeFeatures_set_onion_messages_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_onion_messages_required")] public static extern void NodeFeatures_set_onion_messages_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_onion_messages(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_onion_messages")] public static extern bool NodeFeatures_supports_onion_messages(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_onion_messages(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_onion_messages")] public static extern bool InitFeatures_requires_onion_messages(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_onion_messages(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_onion_messages")] public static extern bool NodeFeatures_requires_onion_messages(long _this_arg);
-       // void InitFeatures_set_channel_type_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_channel_type_optional")] public static extern void InitFeatures_set_channel_type_optional(long _this_arg);
-       // void InitFeatures_set_channel_type_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_channel_type_required")] public static extern void InitFeatures_set_channel_type_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_channel_type(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_channel_type")] public static extern bool InitFeatures_supports_channel_type(long _this_arg);
-       // void NodeFeatures_set_channel_type_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_channel_type_optional")] public static extern void NodeFeatures_set_channel_type_optional(long _this_arg);
-       // void NodeFeatures_set_channel_type_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_channel_type_required")] public static extern void NodeFeatures_set_channel_type_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_channel_type(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_channel_type")] public static extern bool NodeFeatures_supports_channel_type(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_channel_type(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_channel_type")] public static extern bool InitFeatures_requires_channel_type(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_channel_type(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_channel_type")] public static extern bool NodeFeatures_requires_channel_type(long _this_arg);
-       // void InitFeatures_set_scid_privacy_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_scid_privacy_optional")] public static extern void InitFeatures_set_scid_privacy_optional(long _this_arg);
-       // void InitFeatures_set_scid_privacy_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_scid_privacy_required")] public static extern void InitFeatures_set_scid_privacy_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_scid_privacy(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_scid_privacy")] public static extern bool InitFeatures_supports_scid_privacy(long _this_arg);
-       // void NodeFeatures_set_scid_privacy_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_scid_privacy_optional")] public static extern void NodeFeatures_set_scid_privacy_optional(long _this_arg);
-       // void NodeFeatures_set_scid_privacy_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_scid_privacy_required")] public static extern void NodeFeatures_set_scid_privacy_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_scid_privacy(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_scid_privacy")] public static extern bool NodeFeatures_supports_scid_privacy(long _this_arg);
-       // void ChannelTypeFeatures_set_scid_privacy_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_scid_privacy_optional")] public static extern void ChannelTypeFeatures_set_scid_privacy_optional(long _this_arg);
-       // void ChannelTypeFeatures_set_scid_privacy_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_scid_privacy_required")] public static extern void ChannelTypeFeatures_set_scid_privacy_required(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_supports_scid_privacy(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_scid_privacy")] public static extern bool ChannelTypeFeatures_supports_scid_privacy(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_scid_privacy(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_scid_privacy")] public static extern bool InitFeatures_requires_scid_privacy(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_scid_privacy(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_scid_privacy")] public static extern bool NodeFeatures_requires_scid_privacy(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_scid_privacy(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_scid_privacy")] public static extern bool ChannelTypeFeatures_requires_scid_privacy(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_payment_metadata_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_optional")] public static extern void Bolt11InvoiceFeatures_set_payment_metadata_optional(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_payment_metadata_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_required")] public static extern void Bolt11InvoiceFeatures_set_payment_metadata_required(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_payment_metadata(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_payment_metadata")] public static extern bool Bolt11InvoiceFeatures_supports_payment_metadata(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_payment_metadata(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_payment_metadata")] public static extern bool Bolt11InvoiceFeatures_requires_payment_metadata(long _this_arg);
-       // void InitFeatures_set_zero_conf_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_zero_conf_optional")] public static extern void InitFeatures_set_zero_conf_optional(long _this_arg);
-       // void InitFeatures_set_zero_conf_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_zero_conf_required")] public static extern void InitFeatures_set_zero_conf_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_zero_conf(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_zero_conf")] public static extern bool InitFeatures_supports_zero_conf(long _this_arg);
-       // void NodeFeatures_set_zero_conf_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_zero_conf_optional")] public static extern void NodeFeatures_set_zero_conf_optional(long _this_arg);
-       // void NodeFeatures_set_zero_conf_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_zero_conf_required")] public static extern void NodeFeatures_set_zero_conf_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_zero_conf(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_zero_conf")] public static extern bool NodeFeatures_supports_zero_conf(long _this_arg);
-       // void ChannelTypeFeatures_set_zero_conf_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_zero_conf_optional")] public static extern void ChannelTypeFeatures_set_zero_conf_optional(long _this_arg);
-       // void ChannelTypeFeatures_set_zero_conf_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_zero_conf_required")] public static extern void ChannelTypeFeatures_set_zero_conf_required(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_supports_zero_conf(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_zero_conf")] public static extern bool ChannelTypeFeatures_supports_zero_conf(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_zero_conf(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_zero_conf")] public static extern bool InitFeatures_requires_zero_conf(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_zero_conf(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_zero_conf")] public static extern bool NodeFeatures_requires_zero_conf(long _this_arg);
-       // MUST_USE_RES bool ChannelTypeFeatures_requires_zero_conf(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_zero_conf")] public static extern bool ChannelTypeFeatures_requires_zero_conf(long _this_arg);
-       // void NodeFeatures_set_keysend_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_keysend_optional")] public static extern void NodeFeatures_set_keysend_optional(long _this_arg);
-       // void NodeFeatures_set_keysend_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_keysend_required")] public static extern void NodeFeatures_set_keysend_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_keysend(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_keysend")] public static extern bool NodeFeatures_supports_keysend(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_keysend(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_keysend")] public static extern bool NodeFeatures_requires_keysend(long _this_arg);
-       // void InitFeatures_set_trampoline_routing_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_trampoline_routing_optional")] public static extern void InitFeatures_set_trampoline_routing_optional(long _this_arg);
-       // void InitFeatures_set_trampoline_routing_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_trampoline_routing_required")] public static extern void InitFeatures_set_trampoline_routing_required(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_supports_trampoline_routing(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_trampoline_routing")] public static extern bool InitFeatures_supports_trampoline_routing(long _this_arg);
-       // void NodeFeatures_set_trampoline_routing_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_trampoline_routing_optional")] public static extern void NodeFeatures_set_trampoline_routing_optional(long _this_arg);
-       // void NodeFeatures_set_trampoline_routing_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_trampoline_routing_required")] public static extern void NodeFeatures_set_trampoline_routing_required(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_supports_trampoline_routing(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_trampoline_routing")] public static extern bool NodeFeatures_supports_trampoline_routing(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_trampoline_routing_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_optional")] public static extern void Bolt11InvoiceFeatures_set_trampoline_routing_optional(long _this_arg);
-       // void Bolt11InvoiceFeatures_set_trampoline_routing_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_required")] public static extern void Bolt11InvoiceFeatures_set_trampoline_routing_required(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_trampoline_routing(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_trampoline_routing")] public static extern bool Bolt11InvoiceFeatures_supports_trampoline_routing(long _this_arg);
-       // MUST_USE_RES bool InitFeatures_requires_trampoline_routing(const struct LDKInitFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_trampoline_routing")] public static extern bool InitFeatures_requires_trampoline_routing(long _this_arg);
-       // MUST_USE_RES bool NodeFeatures_requires_trampoline_routing(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_trampoline_routing")] public static extern bool NodeFeatures_requires_trampoline_routing(long _this_arg);
-       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_trampoline_routing(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_trampoline_routing")] public static extern bool Bolt11InvoiceFeatures_requires_trampoline_routing(long _this_arg);
        // void ShutdownScript_free(struct LDKShutdownScript this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ShutdownScript_free")] public static extern void ShutdownScript_free(long _this_obj);
        // uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg);
@@ -11380,6 +11193,24 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelId_read")] public static extern long ChannelId_read(long _ser);
        // struct LDKStr ChannelId_to_str(const struct LDKChannelId *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelId_to_str")] public static extern long ChannelId_to_str(long _o);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(struct LDKCOption_u64Z amt_msat, struct LDKCOption_ThirtyTwoBytesZ payment_hash, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_phantom_invoice")] public static extern long create_phantom_invoice(long _amt_msat, long _payment_hash, long _description, int _invoice_expiry_delta_secs, long _phantom_route_hints, long _entropy_source, long _node_signer, long _logger, Currency _network, long _min_final_cltv_expiry_delta, long _duration_since_epoch);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(struct LDKCOption_u64Z amt_msat, struct LDKCOption_ThirtyTwoBytesZ payment_hash, uint32_t invoice_expiry_delta_secs, struct LDKSha256 description_hash, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_phantom_invoice_with_description_hash")] public static extern long create_phantom_invoice_with_description_hash(long _amt_msat, long _payment_hash, int _invoice_expiry_delta_secs, long _description_hash, long _phantom_route_hints, long _entropy_source, long _node_signer, long _logger, Currency _network, long _min_final_cltv_expiry_delta, long _duration_since_epoch);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager")] public static extern long create_invoice_from_channelmanager(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKSha256 description_hash, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_with_description_hash")] public static extern long create_invoice_from_channelmanager_with_description_hash(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description_hash, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKSha256 description_hash, uint64_t duration_since_epoch, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch")] public static extern long create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description_hash, long _duration_since_epoch, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint64_t duration_since_epoch, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch")] public static extern long create_invoice_from_channelmanager_and_duration_since_epoch(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description, long _duration_since_epoch, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint64_t duration_since_epoch, uint32_t invoice_expiry_delta_secs, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash")] public static extern long create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description, long _duration_since_epoch, int _invoice_expiry_delta_secs, long _payment_hash, long _min_final_cltv_expiry_delta);
+       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ payment_parameters_from_zero_amount_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, uint64_t amount_msat);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_payment_parameters_from_zero_amount_invoice")] public static extern long payment_parameters_from_zero_amount_invoice(long _invoice, long _amount_msat);
+       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ payment_parameters_from_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_payment_parameters_from_invoice")] public static extern long payment_parameters_from_invoice(long _invoice);
        // void Retry_free(struct LDKRetry this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Retry_free")] public static extern void Retry_free(long _this_ptr);
        // uint64_t Retry_clone_ptr(LDKRetry *NONNULL_PTR arg);
@@ -11406,6 +11237,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RetryableSendFailure_route_not_found")] public static extern RetryableSendFailure RetryableSendFailure_route_not_found();
        // enum LDKRetryableSendFailure RetryableSendFailure_duplicate_payment(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RetryableSendFailure_duplicate_payment")] public static extern RetryableSendFailure RetryableSendFailure_duplicate_payment();
+       // enum LDKRetryableSendFailure RetryableSendFailure_onion_packet_size_exceeded(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RetryableSendFailure_onion_packet_size_exceeded")] public static extern RetryableSendFailure RetryableSendFailure_onion_packet_size_exceeded();
        // bool RetryableSendFailure_eq(const enum LDKRetryableSendFailure *NONNULL_PTR a, const enum LDKRetryableSendFailure *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RetryableSendFailure_eq")] public static extern bool RetryableSendFailure_eq(long _a, long _b);
        // void PaymentSendFailure_free(struct LDKPaymentSendFailure this_ptr);
@@ -11426,6 +11259,22 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentSendFailure_partial_failure")] public static extern long PaymentSendFailure_partial_failure(long _results, long _failed_paths_retry, long _payment_id);
        // bool PaymentSendFailure_eq(const struct LDKPaymentSendFailure *NONNULL_PTR a, const struct LDKPaymentSendFailure *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentSendFailure_eq")] public static extern bool PaymentSendFailure_eq(long _a, long _b);
+       // void Bolt12PaymentError_free(struct LDKBolt12PaymentError this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_free")] public static extern void Bolt12PaymentError_free(long _this_ptr);
+       // uint64_t Bolt12PaymentError_clone_ptr(LDKBolt12PaymentError *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_clone_ptr")] public static extern long Bolt12PaymentError_clone_ptr(long _arg);
+       // struct LDKBolt12PaymentError Bolt12PaymentError_clone(const struct LDKBolt12PaymentError *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_clone")] public static extern long Bolt12PaymentError_clone(long _orig);
+       // struct LDKBolt12PaymentError Bolt12PaymentError_unexpected_invoice(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_unexpected_invoice")] public static extern long Bolt12PaymentError_unexpected_invoice();
+       // struct LDKBolt12PaymentError Bolt12PaymentError_duplicate_invoice(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_duplicate_invoice")] public static extern long Bolt12PaymentError_duplicate_invoice();
+       // struct LDKBolt12PaymentError Bolt12PaymentError_unknown_required_features(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_unknown_required_features")] public static extern long Bolt12PaymentError_unknown_required_features();
+       // struct LDKBolt12PaymentError Bolt12PaymentError_sending_failed(enum LDKRetryableSendFailure a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_sending_failed")] public static extern long Bolt12PaymentError_sending_failed(RetryableSendFailure _a);
+       // bool Bolt12PaymentError_eq(const struct LDKBolt12PaymentError *NONNULL_PTR a, const struct LDKBolt12PaymentError *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12PaymentError_eq")] public static extern bool Bolt12PaymentError_eq(long _a, long _b);
        // void ProbeSendFailure_free(struct LDKProbeSendFailure this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ProbeSendFailure_free")] public static extern void ProbeSendFailure_free(long _this_ptr);
        // uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg);
@@ -11518,14 +11367,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithExplicitMetadataBuilder_description")] public static extern void OfferWithExplicitMetadataBuilder_description(long _this_arg, long _description);
        // MUST_USE_RES void OfferWithExplicitMetadataBuilder_issuer(struct LDKOfferWithExplicitMetadataBuilder this_arg, struct LDKStr issuer);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithExplicitMetadataBuilder_issuer")] public static extern void OfferWithExplicitMetadataBuilder_issuer(long _this_arg, long _issuer);
-       // MUST_USE_RES void OfferWithExplicitMetadataBuilder_path(struct LDKOfferWithExplicitMetadataBuilder this_arg, struct LDKBlindedPath path);
+       // MUST_USE_RES void OfferWithExplicitMetadataBuilder_path(struct LDKOfferWithExplicitMetadataBuilder this_arg, struct LDKBlindedMessagePath path);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithExplicitMetadataBuilder_path")] public static extern void OfferWithExplicitMetadataBuilder_path(long _this_arg, long _path);
        // MUST_USE_RES void OfferWithExplicitMetadataBuilder_supported_quantity(struct LDKOfferWithExplicitMetadataBuilder this_arg, struct LDKQuantity quantity);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithExplicitMetadataBuilder_supported_quantity")] public static extern void OfferWithExplicitMetadataBuilder_supported_quantity(long _this_arg, long _quantity);
        // MUST_USE_RES struct LDKCResult_OfferBolt12SemanticErrorZ OfferWithExplicitMetadataBuilder_build(struct LDKOfferWithExplicitMetadataBuilder this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithExplicitMetadataBuilder_build")] public static extern long OfferWithExplicitMetadataBuilder_build(long _this_arg);
-       // MUST_USE_RES struct LDKOfferWithDerivedMetadataBuilder OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(struct LDKPublicKey node_id, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKEntropySource entropy_source);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_deriving_signing_pubkey")] public static extern long OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(long _node_id, long _expanded_key, long _entropy_source);
+       // MUST_USE_RES struct LDKOfferWithDerivedMetadataBuilder OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(struct LDKPublicKey node_id, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKNonce nonce);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_deriving_signing_pubkey")] public static extern long OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(long _node_id, long _expanded_key, long _nonce);
        // MUST_USE_RES void OfferWithDerivedMetadataBuilder_chain(struct LDKOfferWithDerivedMetadataBuilder this_arg, enum LDKNetwork network);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_chain")] public static extern void OfferWithDerivedMetadataBuilder_chain(long _this_arg, Network _network);
        // MUST_USE_RES void OfferWithDerivedMetadataBuilder_amount_msats(struct LDKOfferWithDerivedMetadataBuilder this_arg, uint64_t amount_msats);
@@ -11536,7 +11385,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_description")] public static extern void OfferWithDerivedMetadataBuilder_description(long _this_arg, long _description);
        // MUST_USE_RES void OfferWithDerivedMetadataBuilder_issuer(struct LDKOfferWithDerivedMetadataBuilder this_arg, struct LDKStr issuer);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_issuer")] public static extern void OfferWithDerivedMetadataBuilder_issuer(long _this_arg, long _issuer);
-       // MUST_USE_RES void OfferWithDerivedMetadataBuilder_path(struct LDKOfferWithDerivedMetadataBuilder this_arg, struct LDKBlindedPath path);
+       // MUST_USE_RES void OfferWithDerivedMetadataBuilder_path(struct LDKOfferWithDerivedMetadataBuilder this_arg, struct LDKBlindedMessagePath path);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_path")] public static extern void OfferWithDerivedMetadataBuilder_path(long _this_arg, long _path);
        // MUST_USE_RES void OfferWithDerivedMetadataBuilder_supported_quantity(struct LDKOfferWithDerivedMetadataBuilder this_arg, struct LDKQuantity quantity);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferWithDerivedMetadataBuilder_supported_quantity")] public static extern void OfferWithDerivedMetadataBuilder_supported_quantity(long _this_arg, long _quantity);
@@ -11562,7 +11411,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_absolute_expiry")] public static extern long Offer_absolute_expiry(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString Offer_issuer(const struct LDKOffer *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_issuer")] public static extern long Offer_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ Offer_paths(const struct LDKOffer *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ Offer_paths(const struct LDKOffer *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_paths")] public static extern long Offer_paths(long _this_arg);
        // MUST_USE_RES struct LDKQuantity Offer_supported_quantity(const struct LDKOffer *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_supported_quantity")] public static extern long Offer_supported_quantity(long _this_arg);
@@ -11580,14 +11429,16 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_is_valid_quantity")] public static extern bool Offer_is_valid_quantity(long _this_arg, long _quantity);
        // MUST_USE_RES bool Offer_expects_quantity(const struct LDKOffer *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_expects_quantity")] public static extern bool Offer_expects_quantity(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ Offer_request_invoice_deriving_payer_id(const struct LDKOffer *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKEntropySource entropy_source, struct LDKThirtyTwoBytes payment_id);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_request_invoice_deriving_payer_id")] public static extern long Offer_request_invoice_deriving_payer_id(long _this_arg, long _expanded_key, long _entropy_source, long _payment_id);
-       // MUST_USE_RES struct LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ Offer_request_invoice_deriving_metadata(const struct LDKOffer *NONNULL_PTR this_arg, struct LDKPublicKey payer_id, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKEntropySource entropy_source, struct LDKThirtyTwoBytes payment_id);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_request_invoice_deriving_metadata")] public static extern long Offer_request_invoice_deriving_metadata(long _this_arg, long _payer_id, long _expanded_key, long _entropy_source, long _payment_id);
+       // MUST_USE_RES struct LDKCResult_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ Offer_request_invoice_deriving_payer_id(const struct LDKOffer *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKNonce nonce, struct LDKThirtyTwoBytes payment_id);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_request_invoice_deriving_payer_id")] public static extern long Offer_request_invoice_deriving_payer_id(long _this_arg, long _expanded_key, long _nonce, long _payment_id);
+       // MUST_USE_RES struct LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ Offer_request_invoice_deriving_metadata(const struct LDKOffer *NONNULL_PTR this_arg, struct LDKPublicKey payer_id, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKNonce nonce, struct LDKThirtyTwoBytes payment_id);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_request_invoice_deriving_metadata")] public static extern long Offer_request_invoice_deriving_metadata(long _this_arg, long _payer_id, long _expanded_key, long _nonce, long _payment_id);
        // MUST_USE_RES struct LDKCResult_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ Offer_request_invoice(const struct LDKOffer *NONNULL_PTR this_arg, struct LDKCVec_u8Z metadata, struct LDKPublicKey payer_id);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_request_invoice")] public static extern long Offer_request_invoice(long _this_arg, long _metadata, long _payer_id);
        // uint64_t Offer_hash(const struct LDKOffer *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_hash")] public static extern long Offer_hash(long _o);
+       // struct LDKCResult_OfferDecodeErrorZ Offer_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_read")] public static extern long Offer_read(long _ser);
        // struct LDKCVec_u8Z Offer_write(const struct LDKOffer *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Offer_write")] public static extern long Offer_write(long _obj);
        // void Amount_free(struct LDKAmount this_ptr);
@@ -11660,6 +11511,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_clone_ptr")] public static extern long Bolt12Invoice_clone_ptr(long _arg);
        // struct LDKBolt12Invoice Bolt12Invoice_clone(const struct LDKBolt12Invoice *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_clone")] public static extern long Bolt12Invoice_clone(long _orig);
+       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_created_at(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_created_at")] public static extern long UnsignedBolt12Invoice_created_at(long _this_arg);
+       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_relative_expiry(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_relative_expiry")] public static extern long UnsignedBolt12Invoice_relative_expiry(long _this_arg);
+       // MUST_USE_RES bool UnsignedBolt12Invoice_is_expired(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_is_expired")] public static extern bool UnsignedBolt12Invoice_is_expired(long _this_arg);
+       // MUST_USE_RES struct LDKCVec_StrZ UnsignedBolt12Invoice_fallbacks(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_fallbacks")] public static extern long UnsignedBolt12Invoice_fallbacks(long _this_arg);
+       // MUST_USE_RES struct LDKBolt12InvoiceFeatures UnsignedBolt12Invoice_invoice_features(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_invoice_features")] public static extern long UnsignedBolt12Invoice_invoice_features(long _this_arg);
+       // MUST_USE_RES struct LDKPublicKey UnsignedBolt12Invoice_signing_pubkey(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_signing_pubkey")] public static extern long UnsignedBolt12Invoice_signing_pubkey(long _this_arg);
        // MUST_USE_RES struct LDKCOption_CVec_ThirtyTwoBytesZZ UnsignedBolt12Invoice_offer_chains(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_offer_chains")] public static extern long UnsignedBolt12Invoice_offer_chains(long _this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes UnsignedBolt12Invoice_chain(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
@@ -11676,7 +11539,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_absolute_expiry")] public static extern long UnsignedBolt12Invoice_absolute_expiry(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString UnsignedBolt12Invoice_issuer(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_issuer")] public static extern long UnsignedBolt12Invoice_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ UnsignedBolt12Invoice_message_paths(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ UnsignedBolt12Invoice_message_paths(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_message_paths")] public static extern long UnsignedBolt12Invoice_message_paths(long _this_arg);
        // MUST_USE_RES struct LDKCOption_QuantityZ UnsignedBolt12Invoice_supported_quantity(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_supported_quantity")] public static extern long UnsignedBolt12Invoice_supported_quantity(long _this_arg);
@@ -11690,20 +11553,22 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_payer_id")] public static extern long UnsignedBolt12Invoice_payer_id(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString UnsignedBolt12Invoice_payer_note(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_payer_note")] public static extern long UnsignedBolt12Invoice_payer_note(long _this_arg);
-       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_created_at(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_created_at")] public static extern long UnsignedBolt12Invoice_created_at(long _this_arg);
-       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_relative_expiry(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_relative_expiry")] public static extern long UnsignedBolt12Invoice_relative_expiry(long _this_arg);
-       // MUST_USE_RES bool UnsignedBolt12Invoice_is_expired(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_is_expired")] public static extern bool UnsignedBolt12Invoice_is_expired(long _this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes UnsignedBolt12Invoice_payment_hash(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_payment_hash")] public static extern long UnsignedBolt12Invoice_payment_hash(long _this_arg);
        // MUST_USE_RES uint64_t UnsignedBolt12Invoice_amount_msats(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_amount_msats")] public static extern long UnsignedBolt12Invoice_amount_msats(long _this_arg);
-       // MUST_USE_RES struct LDKBolt12InvoiceFeatures UnsignedBolt12Invoice_invoice_features(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_invoice_features")] public static extern long UnsignedBolt12Invoice_invoice_features(long _this_arg);
-       // MUST_USE_RES struct LDKPublicKey UnsignedBolt12Invoice_signing_pubkey(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_signing_pubkey")] public static extern long UnsignedBolt12Invoice_signing_pubkey(long _this_arg);
+       // MUST_USE_RES uint64_t Bolt12Invoice_created_at(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_created_at")] public static extern long Bolt12Invoice_created_at(long _this_arg);
+       // MUST_USE_RES uint64_t Bolt12Invoice_relative_expiry(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_relative_expiry")] public static extern long Bolt12Invoice_relative_expiry(long _this_arg);
+       // MUST_USE_RES bool Bolt12Invoice_is_expired(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_is_expired")] public static extern bool Bolt12Invoice_is_expired(long _this_arg);
+       // MUST_USE_RES struct LDKCVec_StrZ Bolt12Invoice_fallbacks(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_fallbacks")] public static extern long Bolt12Invoice_fallbacks(long _this_arg);
+       // MUST_USE_RES struct LDKBolt12InvoiceFeatures Bolt12Invoice_invoice_features(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_invoice_features")] public static extern long Bolt12Invoice_invoice_features(long _this_arg);
+       // MUST_USE_RES struct LDKPublicKey Bolt12Invoice_signing_pubkey(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_signing_pubkey")] public static extern long Bolt12Invoice_signing_pubkey(long _this_arg);
        // MUST_USE_RES struct LDKCOption_CVec_ThirtyTwoBytesZZ Bolt12Invoice_offer_chains(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_offer_chains")] public static extern long Bolt12Invoice_offer_chains(long _this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes Bolt12Invoice_chain(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
@@ -11720,7 +11585,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_absolute_expiry")] public static extern long Bolt12Invoice_absolute_expiry(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString Bolt12Invoice_issuer(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_issuer")] public static extern long Bolt12Invoice_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ Bolt12Invoice_message_paths(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ Bolt12Invoice_message_paths(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_message_paths")] public static extern long Bolt12Invoice_message_paths(long _this_arg);
        // MUST_USE_RES struct LDKCOption_QuantityZ Bolt12Invoice_supported_quantity(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_supported_quantity")] public static extern long Bolt12Invoice_supported_quantity(long _this_arg);
@@ -11734,72 +11599,26 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_payer_id")] public static extern long Bolt12Invoice_payer_id(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString Bolt12Invoice_payer_note(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_payer_note")] public static extern long Bolt12Invoice_payer_note(long _this_arg);
-       // MUST_USE_RES uint64_t Bolt12Invoice_created_at(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_created_at")] public static extern long Bolt12Invoice_created_at(long _this_arg);
-       // MUST_USE_RES uint64_t Bolt12Invoice_relative_expiry(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_relative_expiry")] public static extern long Bolt12Invoice_relative_expiry(long _this_arg);
-       // MUST_USE_RES bool Bolt12Invoice_is_expired(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_is_expired")] public static extern bool Bolt12Invoice_is_expired(long _this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes Bolt12Invoice_payment_hash(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_payment_hash")] public static extern long Bolt12Invoice_payment_hash(long _this_arg);
        // MUST_USE_RES uint64_t Bolt12Invoice_amount_msats(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_amount_msats")] public static extern long Bolt12Invoice_amount_msats(long _this_arg);
-       // MUST_USE_RES struct LDKBolt12InvoiceFeatures Bolt12Invoice_invoice_features(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_invoice_features")] public static extern long Bolt12Invoice_invoice_features(long _this_arg);
-       // MUST_USE_RES struct LDKPublicKey Bolt12Invoice_signing_pubkey(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_signing_pubkey")] public static extern long Bolt12Invoice_signing_pubkey(long _this_arg);
        // MUST_USE_RES struct LDKSchnorrSignature Bolt12Invoice_signature(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_signature")] public static extern long Bolt12Invoice_signature(long _this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes Bolt12Invoice_signable_hash(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_signable_hash")] public static extern long Bolt12Invoice_signable_hash(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesNoneZ Bolt12Invoice_verify(const struct LDKBolt12Invoice *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_verify")] public static extern long Bolt12Invoice_verify(long _this_arg, long _key);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesNoneZ Bolt12Invoice_verify_using_metadata(const struct LDKBolt12Invoice *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_verify_using_metadata")] public static extern long Bolt12Invoice_verify_using_metadata(long _this_arg, long _key);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesNoneZ Bolt12Invoice_verify_using_payer_data(const struct LDKBolt12Invoice *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_id, struct LDKNonce nonce, const struct LDKExpandedKey *NONNULL_PTR key);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_verify_using_payer_data")] public static extern long Bolt12Invoice_verify_using_payer_data(long _this_arg, long _payment_id, long _nonce, long _key);
        // uint64_t Bolt12Invoice_hash(const struct LDKBolt12Invoice *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_hash")] public static extern long Bolt12Invoice_hash(long _o);
        // struct LDKCVec_u8Z UnsignedBolt12Invoice_write(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedBolt12Invoice_write")] public static extern long UnsignedBolt12Invoice_write(long _obj);
        // struct LDKCVec_u8Z Bolt12Invoice_write(const struct LDKBolt12Invoice *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_write")] public static extern long Bolt12Invoice_write(long _obj);
-       // void BlindedPayInfo_free(struct LDKBlindedPayInfo this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_free")] public static extern void BlindedPayInfo_free(long _this_obj);
-       // uint32_t BlindedPayInfo_get_fee_base_msat(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_fee_base_msat")] public static extern int BlindedPayInfo_get_fee_base_msat(long _this_ptr);
-       // void BlindedPayInfo_set_fee_base_msat(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_fee_base_msat")] public static extern void BlindedPayInfo_set_fee_base_msat(long _this_ptr, int _val);
-       // uint32_t BlindedPayInfo_get_fee_proportional_millionths(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_fee_proportional_millionths")] public static extern int BlindedPayInfo_get_fee_proportional_millionths(long _this_ptr);
-       // void BlindedPayInfo_set_fee_proportional_millionths(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_fee_proportional_millionths")] public static extern void BlindedPayInfo_set_fee_proportional_millionths(long _this_ptr, int _val);
-       // uint16_t BlindedPayInfo_get_cltv_expiry_delta(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_cltv_expiry_delta")] public static extern short BlindedPayInfo_get_cltv_expiry_delta(long _this_ptr);
-       // void BlindedPayInfo_set_cltv_expiry_delta(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint16_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_cltv_expiry_delta")] public static extern void BlindedPayInfo_set_cltv_expiry_delta(long _this_ptr, short _val);
-       // uint64_t BlindedPayInfo_get_htlc_minimum_msat(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_htlc_minimum_msat")] public static extern long BlindedPayInfo_get_htlc_minimum_msat(long _this_ptr);
-       // void BlindedPayInfo_set_htlc_minimum_msat(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint64_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_htlc_minimum_msat")] public static extern void BlindedPayInfo_set_htlc_minimum_msat(long _this_ptr, long _val);
-       // uint64_t BlindedPayInfo_get_htlc_maximum_msat(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_htlc_maximum_msat")] public static extern long BlindedPayInfo_get_htlc_maximum_msat(long _this_ptr);
-       // void BlindedPayInfo_set_htlc_maximum_msat(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint64_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_htlc_maximum_msat")] public static extern void BlindedPayInfo_set_htlc_maximum_msat(long _this_ptr, long _val);
-       // struct LDKBlindedHopFeatures BlindedPayInfo_get_features(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_features")] public static extern long BlindedPayInfo_get_features(long _this_ptr);
-       // void BlindedPayInfo_set_features(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, struct LDKBlindedHopFeatures val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_features")] public static extern void BlindedPayInfo_set_features(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKBlindedPayInfo BlindedPayInfo_new(uint32_t fee_base_msat_arg, uint32_t fee_proportional_millionths_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, struct LDKBlindedHopFeatures features_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_new")] public static extern long BlindedPayInfo_new(int _fee_base_msat_arg, int _fee_proportional_millionths_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg, long _features_arg);
-       // uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_clone_ptr")] public static extern long BlindedPayInfo_clone_ptr(long _arg);
-       // struct LDKBlindedPayInfo BlindedPayInfo_clone(const struct LDKBlindedPayInfo *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_clone")] public static extern long BlindedPayInfo_clone(long _orig);
-       // uint64_t BlindedPayInfo_hash(const struct LDKBlindedPayInfo *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_hash")] public static extern long BlindedPayInfo_hash(long _o);
-       // bool BlindedPayInfo_eq(const struct LDKBlindedPayInfo *NONNULL_PTR a, const struct LDKBlindedPayInfo *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_eq")] public static extern bool BlindedPayInfo_eq(long _a, long _b);
-       // struct LDKCVec_u8Z BlindedPayInfo_write(const struct LDKBlindedPayInfo *NONNULL_PTR obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_write")] public static extern long BlindedPayInfo_write(long _obj);
-       // struct LDKCResult_BlindedPayInfoDecodeErrorZ BlindedPayInfo_read(struct LDKu8slice ser);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_read")] public static extern long BlindedPayInfo_read(long _ser);
+       // struct LDKCResult_Bolt12InvoiceDecodeErrorZ Bolt12Invoice_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12Invoice_read")] public static extern long Bolt12Invoice_read(long _ser);
        // void InvoiceError_free(struct LDKInvoiceError this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceError_free")] public static extern void InvoiceError_free(long _this_obj);
        // struct LDKErroneousField InvoiceError_get_erroneous_field(const struct LDKInvoiceError *NONNULL_PTR this_ptr);
@@ -11886,10 +11705,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_get_offer_id")] public static extern long VerifiedInvoiceRequest_get_offer_id(long _this_ptr);
        // void VerifiedInvoiceRequest_set_offer_id(struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_ptr, struct LDKOfferId val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_set_offer_id")] public static extern void VerifiedInvoiceRequest_set_offer_id(long _this_ptr, long _val);
-       // struct LDKCOption_SecretKeyZ VerifiedInvoiceRequest_get_keys(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_get_keys")] public static extern long VerifiedInvoiceRequest_get_keys(long _this_ptr);
-       // void VerifiedInvoiceRequest_set_keys(struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_ptr, struct LDKCOption_SecretKeyZ val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_set_keys")] public static extern void VerifiedInvoiceRequest_set_keys(long _this_ptr, long _val);
        // uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_clone_ptr")] public static extern long VerifiedInvoiceRequest_clone_ptr(long _arg);
        // struct LDKVerifiedInvoiceRequest VerifiedInvoiceRequest_clone(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR orig);
@@ -11908,7 +11723,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedInvoiceRequest_absolute_expiry")] public static extern long UnsignedInvoiceRequest_absolute_expiry(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString UnsignedInvoiceRequest_issuer(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedInvoiceRequest_issuer")] public static extern long UnsignedInvoiceRequest_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ UnsignedInvoiceRequest_paths(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ UnsignedInvoiceRequest_paths(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedInvoiceRequest_paths")] public static extern long UnsignedInvoiceRequest_paths(long _this_arg);
        // MUST_USE_RES struct LDKQuantity UnsignedInvoiceRequest_supported_quantity(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedInvoiceRequest_supported_quantity")] public static extern long UnsignedInvoiceRequest_supported_quantity(long _this_arg);
@@ -11942,7 +11757,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_absolute_expiry")] public static extern long InvoiceRequest_absolute_expiry(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString InvoiceRequest_issuer(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_issuer")] public static extern long InvoiceRequest_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ InvoiceRequest_paths(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ InvoiceRequest_paths(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_paths")] public static extern long InvoiceRequest_paths(long _this_arg);
        // MUST_USE_RES struct LDKQuantity InvoiceRequest_supported_quantity(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_supported_quantity")] public static extern long InvoiceRequest_supported_quantity(long _this_arg);
@@ -11962,12 +11777,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_payer_id")] public static extern long InvoiceRequest_payer_id(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString InvoiceRequest_payer_note(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_payer_note")] public static extern long InvoiceRequest_payer_note(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ InvoiceRequest_respond_with(const struct LDKInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths, struct LDKThirtyTwoBytes payment_hash);
+       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ InvoiceRequest_respond_with(const struct LDKInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_BlindedPaymentPathZ payment_paths, struct LDKThirtyTwoBytes payment_hash);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_respond_with")] public static extern long InvoiceRequest_respond_with(long _this_arg, long _payment_paths, long _payment_hash);
-       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ InvoiceRequest_respond_with_no_std(const struct LDKInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths, struct LDKThirtyTwoBytes payment_hash, uint64_t created_at);
+       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ InvoiceRequest_respond_with_no_std(const struct LDKInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_BlindedPaymentPathZ payment_paths, struct LDKThirtyTwoBytes payment_hash, uint64_t created_at);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_respond_with_no_std")] public static extern long InvoiceRequest_respond_with_no_std(long _this_arg, long _payment_paths, long _payment_hash, long _created_at);
-       // MUST_USE_RES struct LDKCResult_VerifiedInvoiceRequestNoneZ InvoiceRequest_verify(struct LDKInvoiceRequest this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_verify")] public static extern long InvoiceRequest_verify(long _this_arg, long _key);
+       // MUST_USE_RES struct LDKCResult_VerifiedInvoiceRequestNoneZ InvoiceRequest_verify_using_metadata(struct LDKInvoiceRequest this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_verify_using_metadata")] public static extern long InvoiceRequest_verify_using_metadata(long _this_arg, long _key);
+       // MUST_USE_RES struct LDKCResult_VerifiedInvoiceRequestNoneZ InvoiceRequest_verify_using_recipient_data(struct LDKInvoiceRequest this_arg, struct LDKNonce nonce, const struct LDKExpandedKey *NONNULL_PTR key);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_verify_using_recipient_data")] public static extern long InvoiceRequest_verify_using_recipient_data(long _this_arg, long _nonce, long _key);
        // MUST_USE_RES struct LDKSchnorrSignature InvoiceRequest_signature(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequest_signature")] public static extern long InvoiceRequest_signature(long _this_arg);
        // MUST_USE_RES struct LDKCVec_ThirtyTwoBytesZ VerifiedInvoiceRequest_chains(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
@@ -11984,7 +11801,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_absolute_expiry")] public static extern long VerifiedInvoiceRequest_absolute_expiry(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString VerifiedInvoiceRequest_issuer(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_issuer")] public static extern long VerifiedInvoiceRequest_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ VerifiedInvoiceRequest_paths(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ VerifiedInvoiceRequest_paths(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_paths")] public static extern long VerifiedInvoiceRequest_paths(long _this_arg);
        // MUST_USE_RES struct LDKQuantity VerifiedInvoiceRequest_supported_quantity(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_supported_quantity")] public static extern long VerifiedInvoiceRequest_supported_quantity(long _this_arg);
@@ -12004,13 +11821,13 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_payer_id")] public static extern long VerifiedInvoiceRequest_payer_id(long _this_arg);
        // MUST_USE_RES struct LDKPrintableString VerifiedInvoiceRequest_payer_note(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_payer_note")] public static extern long VerifiedInvoiceRequest_payer_note(long _this_arg);
-       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_with(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths, struct LDKThirtyTwoBytes payment_hash);
+       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_with(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_BlindedPaymentPathZ payment_paths, struct LDKThirtyTwoBytes payment_hash);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_respond_with")] public static extern long VerifiedInvoiceRequest_respond_with(long _this_arg, long _payment_paths, long _payment_hash);
-       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_with_no_std(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths, struct LDKThirtyTwoBytes payment_hash, uint64_t created_at);
+       // MUST_USE_RES struct LDKCResult_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_with_no_std(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_BlindedPaymentPathZ payment_paths, struct LDKThirtyTwoBytes payment_hash, uint64_t created_at);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_respond_with_no_std")] public static extern long VerifiedInvoiceRequest_respond_with_no_std(long _this_arg, long _payment_paths, long _payment_hash, long _created_at);
-       // MUST_USE_RES struct LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_using_derived_keys(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths, struct LDKThirtyTwoBytes payment_hash);
+       // MUST_USE_RES struct LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_using_derived_keys(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_BlindedPaymentPathZ payment_paths, struct LDKThirtyTwoBytes payment_hash);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys")] public static extern long VerifiedInvoiceRequest_respond_using_derived_keys(long _this_arg, long _payment_paths, long _payment_hash);
-       // MUST_USE_RES struct LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_using_derived_keys_no_std(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ payment_paths, struct LDKThirtyTwoBytes payment_hash, uint64_t created_at);
+       // MUST_USE_RES struct LDKCResult_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ VerifiedInvoiceRequest_respond_using_derived_keys_no_std(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg, struct LDKCVec_BlindedPaymentPathZ payment_paths, struct LDKThirtyTwoBytes payment_hash, uint64_t created_at);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_VerifiedInvoiceRequest_respond_using_derived_keys_no_std")] public static extern long VerifiedInvoiceRequest_respond_using_derived_keys_no_std(long _this_arg, long _payment_paths, long _payment_hash, long _created_at);
        // struct LDKCVec_u8Z UnsignedInvoiceRequest_write(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UnsignedInvoiceRequest_write")] public static extern long UnsignedInvoiceRequest_write(long _obj);
@@ -12064,6 +11881,22 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignError_signing")] public static extern long SignError_signing();
        // struct LDKSignError SignError_verification(enum LDKSecp256k1Error a);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignError_verification")] public static extern long SignError_verification(Secp256k1Error _a);
+       // void Nonce_free(struct LDKNonce this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_free")] public static extern void Nonce_free(long _this_obj);
+       // uint64_t Nonce_clone_ptr(LDKNonce *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_clone_ptr")] public static extern long Nonce_clone_ptr(long _arg);
+       // struct LDKNonce Nonce_clone(const struct LDKNonce *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_clone")] public static extern long Nonce_clone(long _orig);
+       // bool Nonce_eq(const struct LDKNonce *NONNULL_PTR a, const struct LDKNonce *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_eq")] public static extern bool Nonce_eq(long _a, long _b);
+       // MUST_USE_RES struct LDKNonce Nonce_from_entropy_source(struct LDKEntropySource entropy_source);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_from_entropy_source")] public static extern long Nonce_from_entropy_source(long _entropy_source);
+       // MUST_USE_RES struct LDKu8slice Nonce_as_slice(const struct LDKNonce *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_as_slice")] public static extern long Nonce_as_slice(long _this_arg);
+       // struct LDKCVec_u8Z Nonce_write(const struct LDKNonce *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_write")] public static extern long Nonce_write(long _obj);
+       // struct LDKCResult_NonceDecodeErrorZ Nonce_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Nonce_read")] public static extern long Nonce_read(long _ser);
        // void Bolt12ParseError_free(struct LDKBolt12ParseError this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12ParseError_free")] public static extern void Bolt12ParseError_free(long _this_obj);
        // uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg);
@@ -12126,6 +11959,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12SemanticError_missing_creation_time")] public static extern Bolt12SemanticError Bolt12SemanticError_missing_creation_time();
        // enum LDKBolt12SemanticError Bolt12SemanticError_missing_payment_hash(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12SemanticError_missing_payment_hash")] public static extern Bolt12SemanticError Bolt12SemanticError_missing_payment_hash();
+       // enum LDKBolt12SemanticError Bolt12SemanticError_unexpected_payment_hash(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12SemanticError_unexpected_payment_hash")] public static extern Bolt12SemanticError Bolt12SemanticError_unexpected_payment_hash();
        // enum LDKBolt12SemanticError Bolt12SemanticError_missing_signature(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12SemanticError_missing_signature")] public static extern Bolt12SemanticError Bolt12SemanticError_missing_signature();
        // void RefundMaybeWithDerivedMetadataBuilder_free(struct LDKRefundMaybeWithDerivedMetadataBuilder this_obj);
@@ -12136,15 +11971,15 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_clone")] public static extern long RefundMaybeWithDerivedMetadataBuilder_clone(long _orig);
        // MUST_USE_RES struct LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ RefundMaybeWithDerivedMetadataBuilder_new(struct LDKCVec_u8Z metadata, struct LDKPublicKey payer_id, uint64_t amount_msats);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_new")] public static extern long RefundMaybeWithDerivedMetadataBuilder_new(long _metadata, long _payer_id, long _amount_msats);
-       // MUST_USE_RES struct LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(struct LDKPublicKey node_id, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKEntropySource entropy_source, uint64_t amount_msats, struct LDKThirtyTwoBytes payment_id);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id")] public static extern long RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(long _node_id, long _expanded_key, long _entropy_source, long _amount_msats, long _payment_id);
+       // MUST_USE_RES struct LDKCResult_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(struct LDKPublicKey node_id, const struct LDKExpandedKey *NONNULL_PTR expanded_key, struct LDKNonce nonce, uint64_t amount_msats, struct LDKThirtyTwoBytes payment_id);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id")] public static extern long RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(long _node_id, long _expanded_key, long _nonce, long _amount_msats, long _payment_id);
        // MUST_USE_RES void RefundMaybeWithDerivedMetadataBuilder_description(struct LDKRefundMaybeWithDerivedMetadataBuilder this_arg, struct LDKStr description);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_description")] public static extern void RefundMaybeWithDerivedMetadataBuilder_description(long _this_arg, long _description);
        // MUST_USE_RES void RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(struct LDKRefundMaybeWithDerivedMetadataBuilder this_arg, uint64_t absolute_expiry);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_absolute_expiry")] public static extern void RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(long _this_arg, long _absolute_expiry);
        // MUST_USE_RES void RefundMaybeWithDerivedMetadataBuilder_issuer(struct LDKRefundMaybeWithDerivedMetadataBuilder this_arg, struct LDKStr issuer);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_issuer")] public static extern void RefundMaybeWithDerivedMetadataBuilder_issuer(long _this_arg, long _issuer);
-       // MUST_USE_RES void RefundMaybeWithDerivedMetadataBuilder_path(struct LDKRefundMaybeWithDerivedMetadataBuilder this_arg, struct LDKBlindedPath path);
+       // MUST_USE_RES void RefundMaybeWithDerivedMetadataBuilder_path(struct LDKRefundMaybeWithDerivedMetadataBuilder this_arg, struct LDKBlindedMessagePath path);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_path")] public static extern void RefundMaybeWithDerivedMetadataBuilder_path(long _this_arg, long _path);
        // MUST_USE_RES void RefundMaybeWithDerivedMetadataBuilder_chain(struct LDKRefundMaybeWithDerivedMetadataBuilder this_arg, enum LDKNetwork network);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RefundMaybeWithDerivedMetadataBuilder_chain")] public static extern void RefundMaybeWithDerivedMetadataBuilder_chain(long _this_arg, Network _network);
@@ -12170,7 +12005,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_is_expired_no_std")] public static extern bool Refund_is_expired_no_std(long _this_arg, long _duration_since_epoch);
        // MUST_USE_RES struct LDKPrintableString Refund_issuer(const struct LDKRefund *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_issuer")] public static extern long Refund_issuer(long _this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ Refund_paths(const struct LDKRefund *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedMessagePathZ Refund_paths(const struct LDKRefund *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_paths")] public static extern long Refund_paths(long _this_arg);
        // MUST_USE_RES struct LDKu8slice Refund_payer_metadata(const struct LDKRefund *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_payer_metadata")] public static extern long Refund_payer_metadata(long _this_arg);
@@ -12188,6 +12023,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_payer_note")] public static extern long Refund_payer_note(long _this_arg);
        // uint64_t Refund_hash(const struct LDKRefund *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_hash")] public static extern long Refund_hash(long _o);
+       // struct LDKCResult_RefundDecodeErrorZ Refund_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_read")] public static extern long Refund_read(long _ser);
        // struct LDKCVec_u8Z Refund_write(const struct LDKRefund *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Refund_write")] public static extern long Refund_write(long _obj);
        // struct LDKCResult_RefundBolt12ParseErrorZ Refund_from_str(struct LDKStr s);
@@ -12230,6 +12067,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeId_clone_ptr")] public static extern long NodeId_clone_ptr(long _arg);
        // struct LDKNodeId NodeId_clone(const struct LDKNodeId *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeId_clone")] public static extern long NodeId_clone(long _orig);
+       // bool NodeId_eq(const struct LDKNodeId *NONNULL_PTR a, const struct LDKNodeId *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeId_eq")] public static extern bool NodeId_eq(long _a, long _b);
        // MUST_USE_RES struct LDKNodeId NodeId_from_pubkey(struct LDKPublicKey pubkey);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeId_from_pubkey")] public static extern long NodeId_from_pubkey(long _pubkey);
        // MUST_USE_RES struct LDKCResult_NodeIdDecodeErrorZ NodeId_from_slice(struct LDKu8slice bytes);
@@ -12258,8 +12097,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NetworkUpdate_clone_ptr")] public static extern long NetworkUpdate_clone_ptr(long _arg);
        // struct LDKNetworkUpdate NetworkUpdate_clone(const struct LDKNetworkUpdate *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NetworkUpdate_clone")] public static extern long NetworkUpdate_clone(long _orig);
-       // struct LDKNetworkUpdate NetworkUpdate_channel_update_message(struct LDKChannelUpdate msg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NetworkUpdate_channel_update_message")] public static extern long NetworkUpdate_channel_update_message(long _msg);
        // struct LDKNetworkUpdate NetworkUpdate_channel_failure(uint64_t short_channel_id, bool is_permanent);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NetworkUpdate_channel_failure")] public static extern long NetworkUpdate_channel_failure(long _short_channel_id, bool _is_permanent);
        // struct LDKNetworkUpdate NetworkUpdate_node_failure(struct LDKPublicKey node_id, bool is_permanent);
@@ -12290,18 +12127,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_P2PGossipSync_as_MessageSendEventsProvider")] public static extern long P2PGossipSync_as_MessageSendEventsProvider(long _this_arg);
        // void ChannelUpdateInfo_free(struct LDKChannelUpdateInfo this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_free")] public static extern void ChannelUpdateInfo_free(long _this_obj);
-       // uint32_t ChannelUpdateInfo_get_last_update(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_last_update")] public static extern int ChannelUpdateInfo_get_last_update(long _this_ptr);
-       // void ChannelUpdateInfo_set_last_update(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_last_update")] public static extern void ChannelUpdateInfo_set_last_update(long _this_ptr, int _val);
-       // bool ChannelUpdateInfo_get_enabled(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_enabled")] public static extern bool ChannelUpdateInfo_get_enabled(long _this_ptr);
-       // void ChannelUpdateInfo_set_enabled(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, bool val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_enabled")] public static extern void ChannelUpdateInfo_set_enabled(long _this_ptr, bool _val);
-       // uint16_t ChannelUpdateInfo_get_cltv_expiry_delta(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_cltv_expiry_delta")] public static extern short ChannelUpdateInfo_get_cltv_expiry_delta(long _this_ptr);
-       // void ChannelUpdateInfo_set_cltv_expiry_delta(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, uint16_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_cltv_expiry_delta")] public static extern void ChannelUpdateInfo_set_cltv_expiry_delta(long _this_ptr, short _val);
        // uint64_t ChannelUpdateInfo_get_htlc_minimum_msat(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_htlc_minimum_msat")] public static extern long ChannelUpdateInfo_get_htlc_minimum_msat(long _this_ptr);
        // void ChannelUpdateInfo_set_htlc_minimum_msat(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, uint64_t val);
@@ -12314,12 +12139,24 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_fees")] public static extern long ChannelUpdateInfo_get_fees(long _this_ptr);
        // void ChannelUpdateInfo_set_fees(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, struct LDKRoutingFees val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_fees")] public static extern void ChannelUpdateInfo_set_fees(long _this_ptr, long _val);
+       // uint32_t ChannelUpdateInfo_get_last_update(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_last_update")] public static extern int ChannelUpdateInfo_get_last_update(long _this_ptr);
+       // void ChannelUpdateInfo_set_last_update(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_last_update")] public static extern void ChannelUpdateInfo_set_last_update(long _this_ptr, int _val);
+       // uint16_t ChannelUpdateInfo_get_cltv_expiry_delta(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_cltv_expiry_delta")] public static extern short ChannelUpdateInfo_get_cltv_expiry_delta(long _this_ptr);
+       // void ChannelUpdateInfo_set_cltv_expiry_delta(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, uint16_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_cltv_expiry_delta")] public static extern void ChannelUpdateInfo_set_cltv_expiry_delta(long _this_ptr, short _val);
+       // bool ChannelUpdateInfo_get_enabled(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_enabled")] public static extern bool ChannelUpdateInfo_get_enabled(long _this_ptr);
+       // void ChannelUpdateInfo_set_enabled(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, bool val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_enabled")] public static extern void ChannelUpdateInfo_set_enabled(long _this_ptr, bool _val);
        // struct LDKChannelUpdate ChannelUpdateInfo_get_last_update_message(const struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_get_last_update_message")] public static extern long ChannelUpdateInfo_get_last_update_message(long _this_ptr);
        // void ChannelUpdateInfo_set_last_update_message(struct LDKChannelUpdateInfo *NONNULL_PTR this_ptr, struct LDKChannelUpdate val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_set_last_update_message")] public static extern void ChannelUpdateInfo_set_last_update_message(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKChannelUpdateInfo ChannelUpdateInfo_new(uint32_t last_update_arg, bool enabled_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, struct LDKRoutingFees fees_arg, struct LDKChannelUpdate last_update_message_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_new")] public static extern long ChannelUpdateInfo_new(int _last_update_arg, bool _enabled_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg, long _fees_arg, long _last_update_message_arg);
+       // MUST_USE_RES struct LDKChannelUpdateInfo ChannelUpdateInfo_new(uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, struct LDKRoutingFees fees_arg, uint32_t last_update_arg, uint16_t cltv_expiry_delta_arg, bool enabled_arg, struct LDKChannelUpdate last_update_message_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_new")] public static extern long ChannelUpdateInfo_new(long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg, long _fees_arg, int _last_update_arg, short _cltv_expiry_delta_arg, bool _enabled_arg, long _last_update_message_arg);
        // uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelUpdateInfo_clone_ptr")] public static extern long ChannelUpdateInfo_clone_ptr(long _arg);
        // struct LDKChannelUpdateInfo ChannelUpdateInfo_clone(const struct LDKChannelUpdateInfo *NONNULL_PTR orig);
@@ -12342,22 +12179,22 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_node_one")] public static extern long ChannelInfo_get_node_one(long _this_ptr);
        // void ChannelInfo_set_node_one(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKNodeId val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_node_one")] public static extern void ChannelInfo_set_node_one(long _this_ptr, long _val);
-       // struct LDKChannelUpdateInfo ChannelInfo_get_one_to_two(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_one_to_two")] public static extern long ChannelInfo_get_one_to_two(long _this_ptr);
-       // void ChannelInfo_set_one_to_two(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKChannelUpdateInfo val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_one_to_two")] public static extern void ChannelInfo_set_one_to_two(long _this_ptr, long _val);
        // struct LDKNodeId ChannelInfo_get_node_two(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_node_two")] public static extern long ChannelInfo_get_node_two(long _this_ptr);
        // void ChannelInfo_set_node_two(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKNodeId val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_node_two")] public static extern void ChannelInfo_set_node_two(long _this_ptr, long _val);
-       // struct LDKChannelUpdateInfo ChannelInfo_get_two_to_one(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_two_to_one")] public static extern long ChannelInfo_get_two_to_one(long _this_ptr);
-       // void ChannelInfo_set_two_to_one(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKChannelUpdateInfo val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_two_to_one")] public static extern void ChannelInfo_set_two_to_one(long _this_ptr, long _val);
        // struct LDKCOption_u64Z ChannelInfo_get_capacity_sats(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_capacity_sats")] public static extern long ChannelInfo_get_capacity_sats(long _this_ptr);
        // void ChannelInfo_set_capacity_sats(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_capacity_sats")] public static extern void ChannelInfo_set_capacity_sats(long _this_ptr, long _val);
+       // struct LDKChannelUpdateInfo ChannelInfo_get_one_to_two(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_one_to_two")] public static extern long ChannelInfo_get_one_to_two(long _this_ptr);
+       // void ChannelInfo_set_one_to_two(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKChannelUpdateInfo val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_one_to_two")] public static extern void ChannelInfo_set_one_to_two(long _this_ptr, long _val);
+       // struct LDKChannelUpdateInfo ChannelInfo_get_two_to_one(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_two_to_one")] public static extern long ChannelInfo_get_two_to_one(long _this_ptr);
+       // void ChannelInfo_set_two_to_one(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKChannelUpdateInfo val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_set_two_to_one")] public static extern void ChannelInfo_set_two_to_one(long _this_ptr, long _val);
        // struct LDKChannelAnnouncement ChannelInfo_get_announcement_message(const struct LDKChannelInfo *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelInfo_get_announcement_message")] public static extern long ChannelInfo_get_announcement_message(long _this_ptr);
        // void ChannelInfo_set_announcement_message(struct LDKChannelInfo *NONNULL_PTR this_ptr, struct LDKChannelAnnouncement val);
@@ -12410,62 +12247,64 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EffectiveCapacity_unknown")] public static extern long EffectiveCapacity_unknown();
        // MUST_USE_RES uint64_t EffectiveCapacity_as_msat(const struct LDKEffectiveCapacity *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EffectiveCapacity_as_msat")] public static extern long EffectiveCapacity_as_msat(long _this_arg);
-       // void RoutingFees_free(struct LDKRoutingFees this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_free")] public static extern void RoutingFees_free(long _this_obj);
-       // uint32_t RoutingFees_get_base_msat(const struct LDKRoutingFees *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_get_base_msat")] public static extern int RoutingFees_get_base_msat(long _this_ptr);
-       // void RoutingFees_set_base_msat(struct LDKRoutingFees *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_set_base_msat")] public static extern void RoutingFees_set_base_msat(long _this_ptr, int _val);
-       // uint32_t RoutingFees_get_proportional_millionths(const struct LDKRoutingFees *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_get_proportional_millionths")] public static extern int RoutingFees_get_proportional_millionths(long _this_ptr);
-       // void RoutingFees_set_proportional_millionths(struct LDKRoutingFees *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_set_proportional_millionths")] public static extern void RoutingFees_set_proportional_millionths(long _this_ptr, int _val);
-       // MUST_USE_RES struct LDKRoutingFees RoutingFees_new(uint32_t base_msat_arg, uint32_t proportional_millionths_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_new")] public static extern long RoutingFees_new(int _base_msat_arg, int _proportional_millionths_arg);
-       // bool RoutingFees_eq(const struct LDKRoutingFees *NONNULL_PTR a, const struct LDKRoutingFees *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_eq")] public static extern bool RoutingFees_eq(long _a, long _b);
-       // uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_clone_ptr")] public static extern long RoutingFees_clone_ptr(long _arg);
-       // struct LDKRoutingFees RoutingFees_clone(const struct LDKRoutingFees *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_clone")] public static extern long RoutingFees_clone(long _orig);
-       // uint64_t RoutingFees_hash(const struct LDKRoutingFees *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_hash")] public static extern long RoutingFees_hash(long _o);
        // struct LDKCVec_u8Z RoutingFees_write(const struct LDKRoutingFees *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_write")] public static extern long RoutingFees_write(long _obj);
        // struct LDKCResult_RoutingFeesDecodeErrorZ RoutingFees_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_read")] public static extern long RoutingFees_read(long _ser);
-       // void NodeAnnouncementInfo_free(struct LDKNodeAnnouncementInfo this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_free")] public static extern void NodeAnnouncementInfo_free(long _this_obj);
-       // struct LDKNodeFeatures NodeAnnouncementInfo_get_features(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_get_features")] public static extern long NodeAnnouncementInfo_get_features(long _this_ptr);
-       // void NodeAnnouncementInfo_set_features(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKNodeFeatures val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_set_features")] public static extern void NodeAnnouncementInfo_set_features(long _this_ptr, long _val);
-       // uint32_t NodeAnnouncementInfo_get_last_update(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_get_last_update")] public static extern int NodeAnnouncementInfo_get_last_update(long _this_ptr);
-       // void NodeAnnouncementInfo_set_last_update(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, uint32_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_set_last_update")] public static extern void NodeAnnouncementInfo_set_last_update(long _this_ptr, int _val);
-       // const uint8_t (*NodeAnnouncementInfo_get_rgb(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr))[3];
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_get_rgb")] public static extern long NodeAnnouncementInfo_get_rgb(long _this_ptr);
-       // void NodeAnnouncementInfo_set_rgb(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKThreeBytes val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_set_rgb")] public static extern void NodeAnnouncementInfo_set_rgb(long _this_ptr, long _val);
-       // struct LDKNodeAlias NodeAnnouncementInfo_get_alias(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_get_alias")] public static extern long NodeAnnouncementInfo_get_alias(long _this_ptr);
-       // void NodeAnnouncementInfo_set_alias(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKNodeAlias val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_set_alias")] public static extern void NodeAnnouncementInfo_set_alias(long _this_ptr, long _val);
-       // struct LDKNodeAnnouncement NodeAnnouncementInfo_get_announcement_message(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_get_announcement_message")] public static extern long NodeAnnouncementInfo_get_announcement_message(long _this_ptr);
-       // void NodeAnnouncementInfo_set_announcement_message(struct LDKNodeAnnouncementInfo *NONNULL_PTR this_ptr, struct LDKNodeAnnouncement val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_set_announcement_message")] public static extern void NodeAnnouncementInfo_set_announcement_message(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_new(struct LDKNodeFeatures features_arg, uint32_t last_update_arg, struct LDKThreeBytes rgb_arg, struct LDKNodeAlias alias_arg, struct LDKNodeAnnouncement announcement_message_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_new")] public static extern long NodeAnnouncementInfo_new(long _features_arg, int _last_update_arg, long _rgb_arg, long _alias_arg, long _announcement_message_arg);
+       // void NodeAnnouncementDetails_free(struct LDKNodeAnnouncementDetails this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_free")] public static extern void NodeAnnouncementDetails_free(long _this_obj);
+       // struct LDKNodeFeatures NodeAnnouncementDetails_get_features(const struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_get_features")] public static extern long NodeAnnouncementDetails_get_features(long _this_ptr);
+       // void NodeAnnouncementDetails_set_features(struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr, struct LDKNodeFeatures val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_set_features")] public static extern void NodeAnnouncementDetails_set_features(long _this_ptr, long _val);
+       // uint32_t NodeAnnouncementDetails_get_last_update(const struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_get_last_update")] public static extern int NodeAnnouncementDetails_get_last_update(long _this_ptr);
+       // void NodeAnnouncementDetails_set_last_update(struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_set_last_update")] public static extern void NodeAnnouncementDetails_set_last_update(long _this_ptr, int _val);
+       // const uint8_t (*NodeAnnouncementDetails_get_rgb(const struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr))[3];
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_get_rgb")] public static extern long NodeAnnouncementDetails_get_rgb(long _this_ptr);
+       // void NodeAnnouncementDetails_set_rgb(struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr, struct LDKThreeBytes val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_set_rgb")] public static extern void NodeAnnouncementDetails_set_rgb(long _this_ptr, long _val);
+       // struct LDKNodeAlias NodeAnnouncementDetails_get_alias(const struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_get_alias")] public static extern long NodeAnnouncementDetails_get_alias(long _this_ptr);
+       // void NodeAnnouncementDetails_set_alias(struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr, struct LDKNodeAlias val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_set_alias")] public static extern void NodeAnnouncementDetails_set_alias(long _this_ptr, long _val);
+       // struct LDKCVec_SocketAddressZ NodeAnnouncementDetails_get_addresses(const struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_get_addresses")] public static extern long NodeAnnouncementDetails_get_addresses(long _this_ptr);
+       // void NodeAnnouncementDetails_set_addresses(struct LDKNodeAnnouncementDetails *NONNULL_PTR this_ptr, struct LDKCVec_SocketAddressZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_set_addresses")] public static extern void NodeAnnouncementDetails_set_addresses(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKNodeAnnouncementDetails NodeAnnouncementDetails_new(struct LDKNodeFeatures features_arg, uint32_t last_update_arg, struct LDKThreeBytes rgb_arg, struct LDKNodeAlias alias_arg, struct LDKCVec_SocketAddressZ addresses_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_new")] public static extern long NodeAnnouncementDetails_new(long _features_arg, int _last_update_arg, long _rgb_arg, long _alias_arg, long _addresses_arg);
+       // uint64_t NodeAnnouncementDetails_clone_ptr(LDKNodeAnnouncementDetails *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_clone_ptr")] public static extern long NodeAnnouncementDetails_clone_ptr(long _arg);
+       // struct LDKNodeAnnouncementDetails NodeAnnouncementDetails_clone(const struct LDKNodeAnnouncementDetails *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_clone")] public static extern long NodeAnnouncementDetails_clone(long _orig);
+       // bool NodeAnnouncementDetails_eq(const struct LDKNodeAnnouncementDetails *NONNULL_PTR a, const struct LDKNodeAnnouncementDetails *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementDetails_eq")] public static extern bool NodeAnnouncementDetails_eq(long _a, long _b);
+       // void NodeAnnouncementInfo_free(struct LDKNodeAnnouncementInfo this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_free")] public static extern void NodeAnnouncementInfo_free(long _this_ptr);
        // uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_clone_ptr")] public static extern long NodeAnnouncementInfo_clone_ptr(long _arg);
        // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_clone(const struct LDKNodeAnnouncementInfo *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_clone")] public static extern long NodeAnnouncementInfo_clone(long _orig);
+       // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_relayed(struct LDKNodeAnnouncement a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_relayed")] public static extern long NodeAnnouncementInfo_relayed(long _a);
+       // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_local(struct LDKNodeAnnouncementDetails a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_local")] public static extern long NodeAnnouncementInfo_local(long _a);
        // bool NodeAnnouncementInfo_eq(const struct LDKNodeAnnouncementInfo *NONNULL_PTR a, const struct LDKNodeAnnouncementInfo *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_eq")] public static extern bool NodeAnnouncementInfo_eq(long _a, long _b);
+       // MUST_USE_RES struct LDKNodeFeatures NodeAnnouncementInfo_features(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_features")] public static extern long NodeAnnouncementInfo_features(long _this_arg);
+       // MUST_USE_RES uint32_t NodeAnnouncementInfo_last_update(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_last_update")] public static extern int NodeAnnouncementInfo_last_update(long _this_arg);
+       // MUST_USE_RES struct LDKThreeBytes NodeAnnouncementInfo_rgb(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_rgb")] public static extern long NodeAnnouncementInfo_rgb(long _this_arg);
+       // MUST_USE_RES struct LDKNodeAlias NodeAnnouncementInfo_alias(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_alias")] public static extern long NodeAnnouncementInfo_alias(long _this_arg);
        // MUST_USE_RES struct LDKCVec_SocketAddressZ NodeAnnouncementInfo_addresses(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_addresses")] public static extern long NodeAnnouncementInfo_addresses(long _this_arg);
+       // MUST_USE_RES struct LDKNodeAnnouncement NodeAnnouncementInfo_announcement_message(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_announcement_message")] public static extern long NodeAnnouncementInfo_announcement_message(long _this_arg);
        // struct LDKCVec_u8Z NodeAnnouncementInfo_write(const struct LDKNodeAnnouncementInfo *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeAnnouncementInfo_write")] public static extern long NodeAnnouncementInfo_write(long _obj);
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ NodeAnnouncementInfo_read(struct LDKu8slice ser);
@@ -12498,12 +12337,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeInfo_get_channels")] public static extern long NodeInfo_get_channels(long _this_ptr);
        // void NodeInfo_set_channels(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeInfo_set_channels")] public static extern void NodeInfo_set_channels(long _this_ptr, long _val);
-       // struct LDKNodeAnnouncementInfo NodeInfo_get_announcement_info(const struct LDKNodeInfo *NONNULL_PTR this_ptr);
+       // struct LDKCOption_NodeAnnouncementInfoZ NodeInfo_get_announcement_info(const struct LDKNodeInfo *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeInfo_get_announcement_info")] public static extern long NodeInfo_get_announcement_info(long _this_ptr);
-       // void NodeInfo_set_announcement_info(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKNodeAnnouncementInfo val);
+       // void NodeInfo_set_announcement_info(struct LDKNodeInfo *NONNULL_PTR this_ptr, struct LDKCOption_NodeAnnouncementInfoZ val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeInfo_set_announcement_info")] public static extern void NodeInfo_set_announcement_info(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKNodeInfo NodeInfo_new(struct LDKCVec_u64Z channels_arg, struct LDKNodeAnnouncementInfo announcement_info_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeInfo_new")] public static extern long NodeInfo_new(long _channels_arg, long _announcement_info_arg);
        // uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeInfo_clone_ptr")] public static extern long NodeInfo_clone_ptr(long _arg);
        // struct LDKNodeInfo NodeInfo_clone(const struct LDKNodeInfo *NONNULL_PTR orig);
@@ -12760,6 +12597,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteParameters_eq")] public static extern bool RouteParameters_eq(long _a, long _b);
        // MUST_USE_RES struct LDKRouteParameters RouteParameters_from_payment_params_and_value(struct LDKPaymentParameters payment_params, uint64_t final_value_msat);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteParameters_from_payment_params_and_value")] public static extern long RouteParameters_from_payment_params_and_value(long _payment_params, long _final_value_msat);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ RouteParameters_set_max_path_length(struct LDKRouteParameters *NONNULL_PTR this_arg, const struct LDKRecipientOnionFields *NONNULL_PTR recipient_onion, bool is_keysend, uint32_t best_block_height);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteParameters_set_max_path_length")] public static extern long RouteParameters_set_max_path_length(long _this_arg, long _recipient_onion, bool _is_keysend, int _best_block_height);
        // struct LDKCVec_u8Z RouteParameters_write(const struct LDKRouteParameters *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteParameters_write")] public static extern long RouteParameters_write(long _obj);
        // struct LDKCResult_RouteParametersDecodeErrorZ RouteParameters_read(struct LDKu8slice ser);
@@ -12782,6 +12621,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_get_max_path_count")] public static extern byte PaymentParameters_get_max_path_count(long _this_ptr);
        // void PaymentParameters_set_max_path_count(struct LDKPaymentParameters *NONNULL_PTR this_ptr, uint8_t val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_set_max_path_count")] public static extern void PaymentParameters_set_max_path_count(long _this_ptr, byte _val);
+       // uint8_t PaymentParameters_get_max_path_length(const struct LDKPaymentParameters *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_get_max_path_length")] public static extern byte PaymentParameters_get_max_path_length(long _this_ptr);
+       // void PaymentParameters_set_max_path_length(struct LDKPaymentParameters *NONNULL_PTR this_ptr, uint8_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_set_max_path_length")] public static extern void PaymentParameters_set_max_path_length(long _this_ptr, byte _val);
        // uint8_t PaymentParameters_get_max_channel_saturation_power_of_half(const struct LDKPaymentParameters *NONNULL_PTR this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_get_max_channel_saturation_power_of_half")] public static extern byte PaymentParameters_get_max_channel_saturation_power_of_half(long _this_ptr);
        // void PaymentParameters_set_max_channel_saturation_power_of_half(struct LDKPaymentParameters *NONNULL_PTR this_ptr, uint8_t val);
@@ -12794,8 +12637,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_get_previously_failed_blinded_path_idxs")] public static extern long PaymentParameters_get_previously_failed_blinded_path_idxs(long _this_ptr);
        // void PaymentParameters_set_previously_failed_blinded_path_idxs(struct LDKPaymentParameters *NONNULL_PTR this_ptr, struct LDKCVec_u64Z val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_set_previously_failed_blinded_path_idxs")] public static extern void PaymentParameters_set_previously_failed_blinded_path_idxs(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_new(struct LDKPayee payee_arg, struct LDKCOption_u64Z expiry_time_arg, uint32_t max_total_cltv_expiry_delta_arg, uint8_t max_path_count_arg, uint8_t max_channel_saturation_power_of_half_arg, struct LDKCVec_u64Z previously_failed_channels_arg, struct LDKCVec_u64Z previously_failed_blinded_path_idxs_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_new")] public static extern long PaymentParameters_new(long _payee_arg, long _expiry_time_arg, int _max_total_cltv_expiry_delta_arg, byte _max_path_count_arg, byte _max_channel_saturation_power_of_half_arg, long _previously_failed_channels_arg, long _previously_failed_blinded_path_idxs_arg);
+       // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_new(struct LDKPayee payee_arg, struct LDKCOption_u64Z expiry_time_arg, uint32_t max_total_cltv_expiry_delta_arg, uint8_t max_path_count_arg, uint8_t max_path_length_arg, uint8_t max_channel_saturation_power_of_half_arg, struct LDKCVec_u64Z previously_failed_channels_arg, struct LDKCVec_u64Z previously_failed_blinded_path_idxs_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_new")] public static extern long PaymentParameters_new(long _payee_arg, long _expiry_time_arg, int _max_total_cltv_expiry_delta_arg, byte _max_path_count_arg, byte _max_path_length_arg, byte _max_channel_saturation_power_of_half_arg, long _previously_failed_channels_arg, long _previously_failed_blinded_path_idxs_arg);
        // uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_clone_ptr")] public static extern long PaymentParameters_clone_ptr(long _arg);
        // struct LDKPaymentParameters PaymentParameters_clone(const struct LDKPaymentParameters *NONNULL_PTR orig);
@@ -12814,7 +12657,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_for_keysend")] public static extern long PaymentParameters_for_keysend(long _payee_pubkey, int _final_cltv_expiry_delta, bool _allow_mpp);
        // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_from_bolt12_invoice(const struct LDKBolt12Invoice *NONNULL_PTR invoice);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_from_bolt12_invoice")] public static extern long PaymentParameters_from_bolt12_invoice(long _invoice);
-       // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_blinded(struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ blinded_route_hints);
+       // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_blinded(struct LDKCVec_BlindedPaymentPathZ blinded_route_hints);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentParameters_blinded")] public static extern long PaymentParameters_blinded(long _blinded_route_hints);
        // void Payee_free(struct LDKPayee this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_free")] public static extern void Payee_free(long _this_ptr);
@@ -12822,7 +12665,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_clone_ptr")] public static extern long Payee_clone_ptr(long _arg);
        // struct LDKPayee Payee_clone(const struct LDKPayee *NONNULL_PTR orig);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_clone")] public static extern long Payee_clone(long _orig);
-       // struct LDKPayee Payee_blinded(struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints, struct LDKBolt12InvoiceFeatures features);
+       // struct LDKPayee Payee_blinded(struct LDKCVec_BlindedPaymentPathZ route_hints, struct LDKBolt12InvoiceFeatures features);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_blinded")] public static extern long Payee_blinded(long _route_hints, long _features);
        // struct LDKPayee Payee_clear(struct LDKPublicKey node_id, struct LDKCVec_RouteHintZ route_hints, struct LDKBolt11InvoiceFeatures features, uint32_t final_cltv_expiry_delta);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_clear")] public static extern long Payee_clear(long _node_id, long _route_hints, long _features, int _final_cltv_expiry_delta);
@@ -12830,62 +12673,10 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_hash")] public static extern long Payee_hash(long _o);
        // bool Payee_eq(const struct LDKPayee *NONNULL_PTR a, const struct LDKPayee *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Payee_eq")] public static extern bool Payee_eq(long _a, long _b);
-       // void RouteHint_free(struct LDKRouteHint this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_free")] public static extern void RouteHint_free(long _this_obj);
-       // struct LDKCVec_RouteHintHopZ RouteHint_get_a(const struct LDKRouteHint *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_get_a")] public static extern long RouteHint_get_a(long _this_ptr);
-       // void RouteHint_set_a(struct LDKRouteHint *NONNULL_PTR this_ptr, struct LDKCVec_RouteHintHopZ val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_set_a")] public static extern void RouteHint_set_a(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKRouteHint RouteHint_new(struct LDKCVec_RouteHintHopZ a_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_new")] public static extern long RouteHint_new(long _a_arg);
-       // uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_clone_ptr")] public static extern long RouteHint_clone_ptr(long _arg);
-       // struct LDKRouteHint RouteHint_clone(const struct LDKRouteHint *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_clone")] public static extern long RouteHint_clone(long _orig);
-       // uint64_t RouteHint_hash(const struct LDKRouteHint *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_hash")] public static extern long RouteHint_hash(long _o);
-       // bool RouteHint_eq(const struct LDKRouteHint *NONNULL_PTR a, const struct LDKRouteHint *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_eq")] public static extern bool RouteHint_eq(long _a, long _b);
        // struct LDKCVec_u8Z RouteHint_write(const struct LDKRouteHint *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_write")] public static extern long RouteHint_write(long _obj);
        // struct LDKCResult_RouteHintDecodeErrorZ RouteHint_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_read")] public static extern long RouteHint_read(long _ser);
-       // void RouteHintHop_free(struct LDKRouteHintHop this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_free")] public static extern void RouteHintHop_free(long _this_obj);
-       // struct LDKPublicKey RouteHintHop_get_src_node_id(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_src_node_id")] public static extern long RouteHintHop_get_src_node_id(long _this_ptr);
-       // void RouteHintHop_set_src_node_id(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKPublicKey val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_src_node_id")] public static extern void RouteHintHop_set_src_node_id(long _this_ptr, long _val);
-       // uint64_t RouteHintHop_get_short_channel_id(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_short_channel_id")] public static extern long RouteHintHop_get_short_channel_id(long _this_ptr);
-       // void RouteHintHop_set_short_channel_id(struct LDKRouteHintHop *NONNULL_PTR this_ptr, uint64_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_short_channel_id")] public static extern void RouteHintHop_set_short_channel_id(long _this_ptr, long _val);
-       // struct LDKRoutingFees RouteHintHop_get_fees(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_fees")] public static extern long RouteHintHop_get_fees(long _this_ptr);
-       // void RouteHintHop_set_fees(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKRoutingFees val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_fees")] public static extern void RouteHintHop_set_fees(long _this_ptr, long _val);
-       // uint16_t RouteHintHop_get_cltv_expiry_delta(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_cltv_expiry_delta")] public static extern short RouteHintHop_get_cltv_expiry_delta(long _this_ptr);
-       // void RouteHintHop_set_cltv_expiry_delta(struct LDKRouteHintHop *NONNULL_PTR this_ptr, uint16_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_cltv_expiry_delta")] public static extern void RouteHintHop_set_cltv_expiry_delta(long _this_ptr, short _val);
-       // struct LDKCOption_u64Z RouteHintHop_get_htlc_minimum_msat(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_htlc_minimum_msat")] public static extern long RouteHintHop_get_htlc_minimum_msat(long _this_ptr);
-       // void RouteHintHop_set_htlc_minimum_msat(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_htlc_minimum_msat")] public static extern void RouteHintHop_set_htlc_minimum_msat(long _this_ptr, long _val);
-       // struct LDKCOption_u64Z RouteHintHop_get_htlc_maximum_msat(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_htlc_maximum_msat")] public static extern long RouteHintHop_get_htlc_maximum_msat(long _this_ptr);
-       // void RouteHintHop_set_htlc_maximum_msat(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_htlc_maximum_msat")] public static extern void RouteHintHop_set_htlc_maximum_msat(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKRouteHintHop RouteHintHop_new(struct LDKPublicKey src_node_id_arg, uint64_t short_channel_id_arg, struct LDKRoutingFees fees_arg, uint16_t cltv_expiry_delta_arg, struct LDKCOption_u64Z htlc_minimum_msat_arg, struct LDKCOption_u64Z htlc_maximum_msat_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_new")] public static extern long RouteHintHop_new(long _src_node_id_arg, long _short_channel_id_arg, long _fees_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg);
-       // uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_clone_ptr")] public static extern long RouteHintHop_clone_ptr(long _arg);
-       // struct LDKRouteHintHop RouteHintHop_clone(const struct LDKRouteHintHop *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_clone")] public static extern long RouteHintHop_clone(long _orig);
-       // uint64_t RouteHintHop_hash(const struct LDKRouteHintHop *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_hash")] public static extern long RouteHintHop_hash(long _o);
-       // bool RouteHintHop_eq(const struct LDKRouteHintHop *NONNULL_PTR a, const struct LDKRouteHintHop *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_eq")] public static extern bool RouteHintHop_eq(long _a, long _b);
        // struct LDKCVec_u8Z RouteHintHop_write(const struct LDKRouteHintHop *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_write")] public static extern long RouteHintHop_write(long _obj);
        // struct LDKCResult_RouteHintHopDecodeErrorZ RouteHintHop_read(struct LDKu8slice ser);
@@ -13312,7 +13103,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCDescriptor_witness_script")] public static extern long HTLCDescriptor_witness_script(long _this_arg);
        // MUST_USE_RES struct LDKWitness HTLCDescriptor_tx_input_witness(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg, struct LDKECDSASignature signature, struct LDKu8slice witness_script);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCDescriptor_tx_input_witness")] public static extern long HTLCDescriptor_tx_input_witness(long _this_arg, long _signature, long _witness_script);
-       // MUST_USE_RES struct LDKWriteableEcdsaChannelSigner HTLCDescriptor_derive_channel_signer(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
+       // MUST_USE_RES struct LDKEcdsaChannelSigner HTLCDescriptor_derive_channel_signer(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HTLCDescriptor_derive_channel_signer")] public static extern long HTLCDescriptor_derive_channel_signer(long _this_arg, long _signer_provider);
        // void ChannelSigner_free(struct LDKChannelSigner this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelSigner_free")] public static extern void ChannelSigner_free(long _this_ptr);
@@ -13388,8 +13179,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InMemorySigner_as_ChannelSigner")] public static extern long InMemorySigner_as_ChannelSigner(long _this_arg);
        // struct LDKEcdsaChannelSigner InMemorySigner_as_EcdsaChannelSigner(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InMemorySigner_as_EcdsaChannelSigner")] public static extern long InMemorySigner_as_EcdsaChannelSigner(long _this_arg);
-       // struct LDKWriteableEcdsaChannelSigner InMemorySigner_as_WriteableEcdsaChannelSigner(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InMemorySigner_as_WriteableEcdsaChannelSigner")] public static extern long InMemorySigner_as_WriteableEcdsaChannelSigner(long _this_arg);
        // struct LDKCVec_u8Z InMemorySigner_write(const struct LDKInMemorySigner *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InMemorySigner_write")] public static extern long InMemorySigner_write(long _obj);
        // struct LDKCResult_InMemorySignerDecodeErrorZ InMemorySigner_read(struct LDKu8slice ser, struct LDKEntropySource arg);
@@ -13436,16 +13225,104 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RandomBytes_new")] public static extern long RandomBytes_new(long _seed);
        // struct LDKEntropySource RandomBytes_as_EntropySource(const struct LDKRandomBytes *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RandomBytes_as_EntropySource")] public static extern long RandomBytes_as_EntropySource(long _this_arg);
+       // uint64_t EcdsaChannelSigner_clone_ptr(LDKEcdsaChannelSigner *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EcdsaChannelSigner_clone_ptr")] public static extern long EcdsaChannelSigner_clone_ptr(long _arg);
+       // struct LDKEcdsaChannelSigner EcdsaChannelSigner_clone(const struct LDKEcdsaChannelSigner *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EcdsaChannelSigner_clone")] public static extern long EcdsaChannelSigner_clone(long _orig);
        // void EcdsaChannelSigner_free(struct LDKEcdsaChannelSigner this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EcdsaChannelSigner_free")] public static extern void EcdsaChannelSigner_free(long _this_ptr);
-       // uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_WriteableEcdsaChannelSigner_clone_ptr")] public static extern long WriteableEcdsaChannelSigner_clone_ptr(long _arg);
-       // struct LDKWriteableEcdsaChannelSigner WriteableEcdsaChannelSigner_clone(const struct LDKWriteableEcdsaChannelSigner *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_WriteableEcdsaChannelSigner_clone")] public static extern long WriteableEcdsaChannelSigner_clone(long _orig);
-       // void WriteableEcdsaChannelSigner_free(struct LDKWriteableEcdsaChannelSigner this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_WriteableEcdsaChannelSigner_free")] public static extern void WriteableEcdsaChannelSigner_free(long _this_ptr);
+       // void AsyncPaymentsMessageHandler_free(struct LDKAsyncPaymentsMessageHandler this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessageHandler_free")] public static extern void AsyncPaymentsMessageHandler_free(long _this_ptr);
+       // void AsyncPaymentsMessage_free(struct LDKAsyncPaymentsMessage this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_free")] public static extern void AsyncPaymentsMessage_free(long _this_ptr);
+       // uint64_t AsyncPaymentsMessage_clone_ptr(LDKAsyncPaymentsMessage *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_clone_ptr")] public static extern long AsyncPaymentsMessage_clone_ptr(long _arg);
+       // struct LDKAsyncPaymentsMessage AsyncPaymentsMessage_clone(const struct LDKAsyncPaymentsMessage *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_clone")] public static extern long AsyncPaymentsMessage_clone(long _orig);
+       // struct LDKAsyncPaymentsMessage AsyncPaymentsMessage_held_htlc_available(struct LDKHeldHtlcAvailable a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_held_htlc_available")] public static extern long AsyncPaymentsMessage_held_htlc_available(long _a);
+       // struct LDKAsyncPaymentsMessage AsyncPaymentsMessage_release_held_htlc(struct LDKReleaseHeldHtlc a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_release_held_htlc")] public static extern long AsyncPaymentsMessage_release_held_htlc(long _a);
+       // void HeldHtlcAvailable_free(struct LDKHeldHtlcAvailable this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_free")] public static extern void HeldHtlcAvailable_free(long _this_obj);
+       // const uint8_t (*HeldHtlcAvailable_get_payment_release_secret(const struct LDKHeldHtlcAvailable *NONNULL_PTR this_ptr))[32];
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_get_payment_release_secret")] public static extern long HeldHtlcAvailable_get_payment_release_secret(long _this_ptr);
+       // void HeldHtlcAvailable_set_payment_release_secret(struct LDKHeldHtlcAvailable *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_set_payment_release_secret")] public static extern void HeldHtlcAvailable_set_payment_release_secret(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKHeldHtlcAvailable HeldHtlcAvailable_new(struct LDKThirtyTwoBytes payment_release_secret_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_new")] public static extern long HeldHtlcAvailable_new(long _payment_release_secret_arg);
+       // uint64_t HeldHtlcAvailable_clone_ptr(LDKHeldHtlcAvailable *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_clone_ptr")] public static extern long HeldHtlcAvailable_clone_ptr(long _arg);
+       // struct LDKHeldHtlcAvailable HeldHtlcAvailable_clone(const struct LDKHeldHtlcAvailable *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_clone")] public static extern long HeldHtlcAvailable_clone(long _orig);
+       // void ReleaseHeldHtlc_free(struct LDKReleaseHeldHtlc this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_free")] public static extern void ReleaseHeldHtlc_free(long _this_obj);
+       // const uint8_t (*ReleaseHeldHtlc_get_payment_release_secret(const struct LDKReleaseHeldHtlc *NONNULL_PTR this_ptr))[32];
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_get_payment_release_secret")] public static extern long ReleaseHeldHtlc_get_payment_release_secret(long _this_ptr);
+       // void ReleaseHeldHtlc_set_payment_release_secret(struct LDKReleaseHeldHtlc *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_set_payment_release_secret")] public static extern void ReleaseHeldHtlc_set_payment_release_secret(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKReleaseHeldHtlc ReleaseHeldHtlc_new(struct LDKThirtyTwoBytes payment_release_secret_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_new")] public static extern long ReleaseHeldHtlc_new(long _payment_release_secret_arg);
+       // uint64_t ReleaseHeldHtlc_clone_ptr(LDKReleaseHeldHtlc *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_clone_ptr")] public static extern long ReleaseHeldHtlc_clone_ptr(long _arg);
+       // struct LDKReleaseHeldHtlc ReleaseHeldHtlc_clone(const struct LDKReleaseHeldHtlc *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_clone")] public static extern long ReleaseHeldHtlc_clone(long _orig);
+       // struct LDKOnionMessageContents ReleaseHeldHtlc_as_OnionMessageContents(const struct LDKReleaseHeldHtlc *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_as_OnionMessageContents")] public static extern long ReleaseHeldHtlc_as_OnionMessageContents(long _this_arg);
+       // struct LDKCVec_u8Z HeldHtlcAvailable_write(const struct LDKHeldHtlcAvailable *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_write")] public static extern long HeldHtlcAvailable_write(long _obj);
+       // struct LDKCResult_HeldHtlcAvailableDecodeErrorZ HeldHtlcAvailable_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_HeldHtlcAvailable_read")] public static extern long HeldHtlcAvailable_read(long _ser);
+       // struct LDKCVec_u8Z ReleaseHeldHtlc_write(const struct LDKReleaseHeldHtlc *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_write")] public static extern long ReleaseHeldHtlc_write(long _obj);
+       // struct LDKCResult_ReleaseHeldHtlcDecodeErrorZ ReleaseHeldHtlc_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReleaseHeldHtlc_read")] public static extern long ReleaseHeldHtlc_read(long _ser);
+       // MUST_USE_RES bool AsyncPaymentsMessage_is_known_type(uint64_t tlv_type);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_is_known_type")] public static extern bool AsyncPaymentsMessage_is_known_type(long _tlv_type);
+       // struct LDKOnionMessageContents AsyncPaymentsMessage_as_OnionMessageContents(const struct LDKAsyncPaymentsMessage *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_as_OnionMessageContents")] public static extern long AsyncPaymentsMessage_as_OnionMessageContents(long _this_arg);
+       // struct LDKCVec_u8Z AsyncPaymentsMessage_write(const struct LDKAsyncPaymentsMessage *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_write")] public static extern long AsyncPaymentsMessage_write(long _obj);
+       // struct LDKCResult_AsyncPaymentsMessageDecodeErrorZ AsyncPaymentsMessage_read(struct LDKu8slice ser, uint64_t arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AsyncPaymentsMessage_read")] public static extern long AsyncPaymentsMessage_read(long _ser, long _arg);
        // void OnionMessenger_free(struct LDKOnionMessenger this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_free")] public static extern void OnionMessenger_free(long _this_obj);
+       // void Responder_free(struct LDKResponder this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_free")] public static extern void Responder_free(long _this_obj);
+       // uint64_t Responder_clone_ptr(LDKResponder *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_clone_ptr")] public static extern long Responder_clone_ptr(long _arg);
+       // struct LDKResponder Responder_clone(const struct LDKResponder *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_clone")] public static extern long Responder_clone(long _orig);
+       // bool Responder_eq(const struct LDKResponder *NONNULL_PTR a, const struct LDKResponder *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_eq")] public static extern bool Responder_eq(long _a, long _b);
+       // struct LDKCVec_u8Z Responder_write(const struct LDKResponder *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_write")] public static extern long Responder_write(long _obj);
+       // struct LDKCResult_ResponderDecodeErrorZ Responder_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_read")] public static extern long Responder_read(long _ser);
+       // MUST_USE_RES struct LDKResponseInstruction Responder_respond(struct LDKResponder this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_respond")] public static extern long Responder_respond(long _this_arg);
+       // MUST_USE_RES struct LDKResponseInstruction Responder_respond_with_reply_path(struct LDKResponder this_arg, struct LDKMessageContext context);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Responder_respond_with_reply_path")] public static extern long Responder_respond_with_reply_path(long _this_arg, long _context);
+       // void ResponseInstruction_free(struct LDKResponseInstruction this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ResponseInstruction_free")] public static extern void ResponseInstruction_free(long _this_obj);
+       // uint64_t ResponseInstruction_clone_ptr(LDKResponseInstruction *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ResponseInstruction_clone_ptr")] public static extern long ResponseInstruction_clone_ptr(long _arg);
+       // struct LDKResponseInstruction ResponseInstruction_clone(const struct LDKResponseInstruction *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ResponseInstruction_clone")] public static extern long ResponseInstruction_clone(long _orig);
+       // void MessageSendInstructions_free(struct LDKMessageSendInstructions this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_free")] public static extern void MessageSendInstructions_free(long _this_ptr);
+       // uint64_t MessageSendInstructions_clone_ptr(LDKMessageSendInstructions *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_clone_ptr")] public static extern long MessageSendInstructions_clone_ptr(long _arg);
+       // struct LDKMessageSendInstructions MessageSendInstructions_clone(const struct LDKMessageSendInstructions *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_clone")] public static extern long MessageSendInstructions_clone(long _orig);
+       // struct LDKMessageSendInstructions MessageSendInstructions_with_specified_reply_path(struct LDKDestination destination, struct LDKBlindedMessagePath reply_path);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_with_specified_reply_path")] public static extern long MessageSendInstructions_with_specified_reply_path(long _destination, long _reply_path);
+       // struct LDKMessageSendInstructions MessageSendInstructions_with_reply_path(struct LDKDestination destination, struct LDKMessageContext context);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_with_reply_path")] public static extern long MessageSendInstructions_with_reply_path(long _destination, long _context);
+       // struct LDKMessageSendInstructions MessageSendInstructions_without_reply_path(struct LDKDestination destination);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_without_reply_path")] public static extern long MessageSendInstructions_without_reply_path(long _destination);
+       // struct LDKMessageSendInstructions MessageSendInstructions_for_reply(struct LDKResponseInstruction instructions);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendInstructions_for_reply")] public static extern long MessageSendInstructions_for_reply(long _instructions);
        // void MessageRouter_free(struct LDKMessageRouter this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageRouter_free")] public static extern void MessageRouter_free(long _this_ptr);
        // void DefaultMessageRouter_free(struct LDKDefaultMessageRouter this_obj);
@@ -13484,7 +13361,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Destination_clone")] public static extern long Destination_clone(long _orig);
        // struct LDKDestination Destination_node(struct LDKPublicKey a);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Destination_node")] public static extern long Destination_node(long _a);
-       // struct LDKDestination Destination_blinded_path(struct LDKBlindedPath a);
+       // struct LDKDestination Destination_blinded_path(struct LDKBlindedMessagePath a);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Destination_blinded_path")] public static extern long Destination_blinded_path(long _a);
        // uint64_t Destination_hash(const struct LDKDestination *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Destination_hash")] public static extern long Destination_hash(long _o);
@@ -13546,18 +13423,28 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PeeledOnion_clone")] public static extern long PeeledOnion_clone(long _orig);
        // struct LDKPeeledOnion PeeledOnion_forward(struct LDKNextMessageHop a, struct LDKOnionMessage b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PeeledOnion_forward")] public static extern long PeeledOnion_forward(long _a, long _b);
-       // struct LDKPeeledOnion PeeledOnion_receive(struct LDKParsedOnionMessageContents a, struct LDKThirtyTwoBytes b, struct LDKBlindedPath c);
+       // struct LDKPeeledOnion PeeledOnion_receive(struct LDKParsedOnionMessageContents a, struct LDKCOption_MessageContextZ b, struct LDKBlindedMessagePath c);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PeeledOnion_receive")] public static extern long PeeledOnion_receive(long _a, long _b, long _c);
-       // struct LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message_resolving_destination(const struct LDKEntropySource *NONNULL_PTR entropy_source, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKNodeIdLookUp *NONNULL_PTR node_id_lookup, const struct LDKReadOnlyNetworkGraph *NONNULL_PTR network_graph, struct LDKOnionMessagePath path, struct LDKOnionMessageContents contents, struct LDKBlindedPath reply_path);
+       // struct LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message_resolving_destination(const struct LDKEntropySource *NONNULL_PTR entropy_source, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKNodeIdLookUp *NONNULL_PTR node_id_lookup, const struct LDKReadOnlyNetworkGraph *NONNULL_PTR network_graph, struct LDKOnionMessagePath path, struct LDKOnionMessageContents contents, struct LDKBlindedMessagePath reply_path);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_onion_message_resolving_destination")] public static extern long create_onion_message_resolving_destination(long _entropy_source, long _node_signer, long _node_id_lookup, long _network_graph, long _path, long _contents, long _reply_path);
-       // struct LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message(const struct LDKEntropySource *NONNULL_PTR entropy_source, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKNodeIdLookUp *NONNULL_PTR node_id_lookup, struct LDKOnionMessagePath path, struct LDKOnionMessageContents contents, struct LDKBlindedPath reply_path);
+       // struct LDKCResult_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message(const struct LDKEntropySource *NONNULL_PTR entropy_source, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKNodeIdLookUp *NONNULL_PTR node_id_lookup, struct LDKOnionMessagePath path, struct LDKOnionMessageContents contents, struct LDKBlindedMessagePath reply_path);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_onion_message")] public static extern long create_onion_message(long _entropy_source, long _node_signer, long _node_id_lookup, long _path, long _contents, long _reply_path);
        // struct LDKCResult_PeeledOnionNoneZ peel_onion_message(const struct LDKOnionMessage *NONNULL_PTR msg, struct LDKNodeSigner node_signer, struct LDKLogger logger, struct LDKCustomOnionMessageHandler custom_handler);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_peel_onion_message")] public static extern long peel_onion_message(long _msg, long _node_signer, long _logger, long _custom_handler);
-       // MUST_USE_RES struct LDKOnionMessenger OnionMessenger_new(struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, struct LDKNodeIdLookUp node_id_lookup, struct LDKMessageRouter message_router, struct LDKOffersMessageHandler offers_handler, struct LDKCustomOnionMessageHandler custom_handler);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_new")] public static extern long OnionMessenger_new(long _entropy_source, long _node_signer, long _logger, long _node_id_lookup, long _message_router, long _offers_handler, long _custom_handler);
-       // MUST_USE_RES struct LDKCResult_SendSuccessSendErrorZ OnionMessenger_send_onion_message(const struct LDKOnionMessenger *NONNULL_PTR this_arg, struct LDKOnionMessageContents contents, struct LDKDestination destination, struct LDKBlindedPath reply_path);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_send_onion_message")] public static extern long OnionMessenger_send_onion_message(long _this_arg, long _contents, long _destination, long _reply_path);
+       // MUST_USE_RES struct LDKOnionMessenger OnionMessenger_new(struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, struct LDKNodeIdLookUp node_id_lookup, struct LDKMessageRouter message_router, struct LDKOffersMessageHandler offers_handler, struct LDKAsyncPaymentsMessageHandler async_payments_handler, struct LDKCustomOnionMessageHandler custom_handler);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_new")] public static extern long OnionMessenger_new(long _entropy_source, long _node_signer, long _logger, long _node_id_lookup, long _message_router, long _offers_handler, long _async_payments_handler, long _custom_handler);
+       // MUST_USE_RES struct LDKOnionMessenger OnionMessenger_new_with_offline_peer_interception(struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, struct LDKNodeIdLookUp node_id_lookup, struct LDKMessageRouter message_router, struct LDKOffersMessageHandler offers_handler, struct LDKAsyncPaymentsMessageHandler async_payments_handler, struct LDKCustomOnionMessageHandler custom_handler);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_new_with_offline_peer_interception")] public static extern long OnionMessenger_new_with_offline_peer_interception(long _entropy_source, long _node_signer, long _logger, long _node_id_lookup, long _message_router, long _offers_handler, long _async_payments_handler, long _custom_handler);
+       // MUST_USE_RES struct LDKCResult_SendSuccessSendErrorZ OnionMessenger_send_onion_message(const struct LDKOnionMessenger *NONNULL_PTR this_arg, struct LDKOnionMessageContents contents, struct LDKMessageSendInstructions instructions);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_send_onion_message")] public static extern long OnionMessenger_send_onion_message(long _this_arg, long _contents, long _instructions);
+       // MUST_USE_RES struct LDKCResult_NoneSendErrorZ OnionMessenger_forward_onion_message(const struct LDKOnionMessenger *NONNULL_PTR this_arg, struct LDKOnionMessage message, struct LDKPublicKey peer_node_id);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_forward_onion_message")] public static extern long OnionMessenger_forward_onion_message(long _this_arg, long _message, long _peer_node_id);
+       // MUST_USE_RES struct LDKCResult_SendSuccessSendErrorZ OnionMessenger_handle_onion_message_response(const struct LDKOnionMessenger *NONNULL_PTR this_arg, struct LDKOnionMessageContents response, struct LDKResponseInstruction instructions);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_handle_onion_message_response")] public static extern long OnionMessenger_handle_onion_message_response(long _this_arg, long _response, long _instructions);
+       // MUST_USE_RES struct LDKFuture OnionMessenger_get_update_future(const struct LDKOnionMessenger *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_get_update_future")] public static extern long OnionMessenger_get_update_future(long _this_arg);
+       // struct LDKEventsProvider OnionMessenger_as_EventsProvider(const struct LDKOnionMessenger *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_as_EventsProvider")] public static extern long OnionMessenger_as_EventsProvider(long _this_arg);
        // struct LDKOnionMessageHandler OnionMessenger_as_OnionMessageHandler(const struct LDKOnionMessenger *NONNULL_PTR this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessenger_as_OnionMessageHandler")] public static extern long OnionMessenger_as_OnionMessageHandler(long _this_arg);
        // void OffersMessageHandler_free(struct LDKOffersMessageHandler this_ptr);
@@ -13632,44 +13519,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageContents_clone")] public static extern long OnionMessageContents_clone(long _orig);
        // void OnionMessageContents_free(struct LDKOnionMessageContents this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OnionMessageContents_free")] public static extern void OnionMessageContents_free(long _this_ptr);
-       // void NextMessageHop_free(struct LDKNextMessageHop this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_free")] public static extern void NextMessageHop_free(long _this_ptr);
-       // uint64_t NextMessageHop_clone_ptr(LDKNextMessageHop *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_clone_ptr")] public static extern long NextMessageHop_clone_ptr(long _arg);
-       // struct LDKNextMessageHop NextMessageHop_clone(const struct LDKNextMessageHop *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_clone")] public static extern long NextMessageHop_clone(long _orig);
-       // struct LDKNextMessageHop NextMessageHop_node_id(struct LDKPublicKey a);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_node_id")] public static extern long NextMessageHop_node_id(long _a);
-       // struct LDKNextMessageHop NextMessageHop_short_channel_id(uint64_t a);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_short_channel_id")] public static extern long NextMessageHop_short_channel_id(long _a);
-       // uint64_t NextMessageHop_hash(const struct LDKNextMessageHop *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_hash")] public static extern long NextMessageHop_hash(long _o);
-       // bool NextMessageHop_eq(const struct LDKNextMessageHop *NONNULL_PTR a, const struct LDKNextMessageHop *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_eq")] public static extern bool NextMessageHop_eq(long _a, long _b);
-       // void BlindedPath_free(struct LDKBlindedPath this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_free")] public static extern void BlindedPath_free(long _this_obj);
-       // struct LDKIntroductionNode BlindedPath_get_introduction_node(const struct LDKBlindedPath *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_get_introduction_node")] public static extern long BlindedPath_get_introduction_node(long _this_ptr);
-       // void BlindedPath_set_introduction_node(struct LDKBlindedPath *NONNULL_PTR this_ptr, struct LDKIntroductionNode val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_set_introduction_node")] public static extern void BlindedPath_set_introduction_node(long _this_ptr, long _val);
-       // struct LDKPublicKey BlindedPath_get_blinding_point(const struct LDKBlindedPath *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_get_blinding_point")] public static extern long BlindedPath_get_blinding_point(long _this_ptr);
-       // void BlindedPath_set_blinding_point(struct LDKBlindedPath *NONNULL_PTR this_ptr, struct LDKPublicKey val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_set_blinding_point")] public static extern void BlindedPath_set_blinding_point(long _this_ptr, long _val);
-       // struct LDKCVec_BlindedHopZ BlindedPath_get_blinded_hops(const struct LDKBlindedPath *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_get_blinded_hops")] public static extern long BlindedPath_get_blinded_hops(long _this_ptr);
-       // void BlindedPath_set_blinded_hops(struct LDKBlindedPath *NONNULL_PTR this_ptr, struct LDKCVec_BlindedHopZ val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_set_blinded_hops")] public static extern void BlindedPath_set_blinded_hops(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKBlindedPath BlindedPath_new(struct LDKIntroductionNode introduction_node_arg, struct LDKPublicKey blinding_point_arg, struct LDKCVec_BlindedHopZ blinded_hops_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_new")] public static extern long BlindedPath_new(long _introduction_node_arg, long _blinding_point_arg, long _blinded_hops_arg);
-       // uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_clone_ptr")] public static extern long BlindedPath_clone_ptr(long _arg);
-       // struct LDKBlindedPath BlindedPath_clone(const struct LDKBlindedPath *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_clone")] public static extern long BlindedPath_clone(long _orig);
-       // uint64_t BlindedPath_hash(const struct LDKBlindedPath *NONNULL_PTR o);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_hash")] public static extern long BlindedPath_hash(long _o);
-       // bool BlindedPath_eq(const struct LDKBlindedPath *NONNULL_PTR a, const struct LDKBlindedPath *NONNULL_PTR b);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_eq")] public static extern bool BlindedPath_eq(long _a, long _b);
        // void IntroductionNode_free(struct LDKIntroductionNode this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_IntroductionNode_free")] public static extern void IntroductionNode_free(long _this_ptr);
        // uint64_t IntroductionNode_clone_ptr(LDKIntroductionNode *NONNULL_PTR arg);
@@ -13722,44 +13571,98 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHop_hash")] public static extern long BlindedHop_hash(long _o);
        // bool BlindedHop_eq(const struct LDKBlindedHop *NONNULL_PTR a, const struct LDKBlindedHop *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHop_eq")] public static extern bool BlindedHop_eq(long _a, long _b);
-       // MUST_USE_RES struct LDKCResult_BlindedPathNoneZ BlindedPath_one_hop_for_message(struct LDKPublicKey recipient_node_id, struct LDKEntropySource entropy_source);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_one_hop_for_message")] public static extern long BlindedPath_one_hop_for_message(long _recipient_node_id, long _entropy_source);
-       // MUST_USE_RES struct LDKCResult_BlindedPathNoneZ BlindedPath_new_for_message(struct LDKCVec_PublicKeyZ node_pks, struct LDKEntropySource entropy_source);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_new_for_message")] public static extern long BlindedPath_new_for_message(long _node_pks, long _entropy_source);
-       // MUST_USE_RES struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ BlindedPath_one_hop_for_payment(struct LDKPublicKey payee_node_id, struct LDKReceiveTlvs payee_tlvs, uint16_t min_final_cltv_expiry_delta, struct LDKEntropySource entropy_source);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_one_hop_for_payment")] public static extern long BlindedPath_one_hop_for_payment(long _payee_node_id, long _payee_tlvs, short _min_final_cltv_expiry_delta, long _entropy_source);
-       // MUST_USE_RES struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ BlindedPath_new_for_payment(struct LDKCVec_ForwardNodeZ intermediate_nodes, struct LDKPublicKey payee_node_id, struct LDKReceiveTlvs payee_tlvs, uint64_t htlc_maximum_msat, uint16_t min_final_cltv_expiry_delta, struct LDKEntropySource entropy_source);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_new_for_payment")] public static extern long BlindedPath_new_for_payment(long _intermediate_nodes, long _payee_node_id, long _payee_tlvs, long _htlc_maximum_msat, short _min_final_cltv_expiry_delta, long _entropy_source);
-       // MUST_USE_RES struct LDKNodeId BlindedPath_public_introduction_node_id(const struct LDKBlindedPath *NONNULL_PTR this_arg, const struct LDKReadOnlyNetworkGraph *NONNULL_PTR network_graph);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_public_introduction_node_id")] public static extern long BlindedPath_public_introduction_node_id(long _this_arg, long _network_graph);
-       // struct LDKCVec_u8Z BlindedPath_write(const struct LDKBlindedPath *NONNULL_PTR obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_write")] public static extern long BlindedPath_write(long _obj);
-       // struct LDKCResult_BlindedPathDecodeErrorZ BlindedPath_read(struct LDKu8slice ser);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPath_read")] public static extern long BlindedPath_read(long _ser);
        // struct LDKCVec_u8Z BlindedHop_write(const struct LDKBlindedHop *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHop_write")] public static extern long BlindedHop_write(long _obj);
        // struct LDKCResult_BlindedHopDecodeErrorZ BlindedHop_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHop_read")] public static extern long BlindedHop_read(long _ser);
-       // void ForwardNode_free(struct LDKForwardNode this_obj);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_free")] public static extern void ForwardNode_free(long _this_obj);
-       // struct LDKForwardTlvs ForwardNode_get_tlvs(const struct LDKForwardNode *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_get_tlvs")] public static extern long ForwardNode_get_tlvs(long _this_ptr);
-       // void ForwardNode_set_tlvs(struct LDKForwardNode *NONNULL_PTR this_ptr, struct LDKForwardTlvs val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_set_tlvs")] public static extern void ForwardNode_set_tlvs(long _this_ptr, long _val);
-       // struct LDKPublicKey ForwardNode_get_node_id(const struct LDKForwardNode *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_get_node_id")] public static extern long ForwardNode_get_node_id(long _this_ptr);
-       // void ForwardNode_set_node_id(struct LDKForwardNode *NONNULL_PTR this_ptr, struct LDKPublicKey val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_set_node_id")] public static extern void ForwardNode_set_node_id(long _this_ptr, long _val);
-       // uint64_t ForwardNode_get_htlc_maximum_msat(const struct LDKForwardNode *NONNULL_PTR this_ptr);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_get_htlc_maximum_msat")] public static extern long ForwardNode_get_htlc_maximum_msat(long _this_ptr);
-       // void ForwardNode_set_htlc_maximum_msat(struct LDKForwardNode *NONNULL_PTR this_ptr, uint64_t val);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_set_htlc_maximum_msat")] public static extern void ForwardNode_set_htlc_maximum_msat(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKForwardNode ForwardNode_new(struct LDKForwardTlvs tlvs_arg, struct LDKPublicKey node_id_arg, uint64_t htlc_maximum_msat_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_new")] public static extern long ForwardNode_new(long _tlvs_arg, long _node_id_arg, long _htlc_maximum_msat_arg);
-       // uint64_t ForwardNode_clone_ptr(LDKForwardNode *NONNULL_PTR arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_clone_ptr")] public static extern long ForwardNode_clone_ptr(long _arg);
-       // struct LDKForwardNode ForwardNode_clone(const struct LDKForwardNode *NONNULL_PTR orig);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardNode_clone")] public static extern long ForwardNode_clone(long _orig);
+       // void BlindedPayInfo_free(struct LDKBlindedPayInfo this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_free")] public static extern void BlindedPayInfo_free(long _this_obj);
+       // uint32_t BlindedPayInfo_get_fee_base_msat(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_fee_base_msat")] public static extern int BlindedPayInfo_get_fee_base_msat(long _this_ptr);
+       // void BlindedPayInfo_set_fee_base_msat(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_fee_base_msat")] public static extern void BlindedPayInfo_set_fee_base_msat(long _this_ptr, int _val);
+       // uint32_t BlindedPayInfo_get_fee_proportional_millionths(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_fee_proportional_millionths")] public static extern int BlindedPayInfo_get_fee_proportional_millionths(long _this_ptr);
+       // void BlindedPayInfo_set_fee_proportional_millionths(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_fee_proportional_millionths")] public static extern void BlindedPayInfo_set_fee_proportional_millionths(long _this_ptr, int _val);
+       // uint16_t BlindedPayInfo_get_cltv_expiry_delta(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_cltv_expiry_delta")] public static extern short BlindedPayInfo_get_cltv_expiry_delta(long _this_ptr);
+       // void BlindedPayInfo_set_cltv_expiry_delta(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint16_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_cltv_expiry_delta")] public static extern void BlindedPayInfo_set_cltv_expiry_delta(long _this_ptr, short _val);
+       // uint64_t BlindedPayInfo_get_htlc_minimum_msat(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_htlc_minimum_msat")] public static extern long BlindedPayInfo_get_htlc_minimum_msat(long _this_ptr);
+       // void BlindedPayInfo_set_htlc_minimum_msat(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_htlc_minimum_msat")] public static extern void BlindedPayInfo_set_htlc_minimum_msat(long _this_ptr, long _val);
+       // uint64_t BlindedPayInfo_get_htlc_maximum_msat(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_htlc_maximum_msat")] public static extern long BlindedPayInfo_get_htlc_maximum_msat(long _this_ptr);
+       // void BlindedPayInfo_set_htlc_maximum_msat(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_htlc_maximum_msat")] public static extern void BlindedPayInfo_set_htlc_maximum_msat(long _this_ptr, long _val);
+       // struct LDKBlindedHopFeatures BlindedPayInfo_get_features(const struct LDKBlindedPayInfo *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_get_features")] public static extern long BlindedPayInfo_get_features(long _this_ptr);
+       // void BlindedPayInfo_set_features(struct LDKBlindedPayInfo *NONNULL_PTR this_ptr, struct LDKBlindedHopFeatures val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_set_features")] public static extern void BlindedPayInfo_set_features(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKBlindedPayInfo BlindedPayInfo_new(uint32_t fee_base_msat_arg, uint32_t fee_proportional_millionths_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, uint64_t htlc_maximum_msat_arg, struct LDKBlindedHopFeatures features_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_new")] public static extern long BlindedPayInfo_new(int _fee_base_msat_arg, int _fee_proportional_millionths_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg, long _features_arg);
+       // uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_clone_ptr")] public static extern long BlindedPayInfo_clone_ptr(long _arg);
+       // struct LDKBlindedPayInfo BlindedPayInfo_clone(const struct LDKBlindedPayInfo *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_clone")] public static extern long BlindedPayInfo_clone(long _orig);
+       // uint64_t BlindedPayInfo_hash(const struct LDKBlindedPayInfo *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_hash")] public static extern long BlindedPayInfo_hash(long _o);
+       // bool BlindedPayInfo_eq(const struct LDKBlindedPayInfo *NONNULL_PTR a, const struct LDKBlindedPayInfo *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_eq")] public static extern bool BlindedPayInfo_eq(long _a, long _b);
+       // struct LDKCVec_u8Z BlindedPayInfo_write(const struct LDKBlindedPayInfo *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_write")] public static extern long BlindedPayInfo_write(long _obj);
+       // struct LDKCResult_BlindedPayInfoDecodeErrorZ BlindedPayInfo_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPayInfo_read")] public static extern long BlindedPayInfo_read(long _ser);
+       // void BlindedPaymentPath_free(struct LDKBlindedPaymentPath this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_free")] public static extern void BlindedPaymentPath_free(long _this_obj);
+       // struct LDKBlindedPayInfo BlindedPaymentPath_get_payinfo(const struct LDKBlindedPaymentPath *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_get_payinfo")] public static extern long BlindedPaymentPath_get_payinfo(long _this_ptr);
+       // void BlindedPaymentPath_set_payinfo(struct LDKBlindedPaymentPath *NONNULL_PTR this_ptr, struct LDKBlindedPayInfo val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_set_payinfo")] public static extern void BlindedPaymentPath_set_payinfo(long _this_ptr, long _val);
+       // uint64_t BlindedPaymentPath_clone_ptr(LDKBlindedPaymentPath *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_clone_ptr")] public static extern long BlindedPaymentPath_clone_ptr(long _arg);
+       // struct LDKBlindedPaymentPath BlindedPaymentPath_clone(const struct LDKBlindedPaymentPath *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_clone")] public static extern long BlindedPaymentPath_clone(long _orig);
+       // uint64_t BlindedPaymentPath_hash(const struct LDKBlindedPaymentPath *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_hash")] public static extern long BlindedPaymentPath_hash(long _o);
+       // bool BlindedPaymentPath_eq(const struct LDKBlindedPaymentPath *NONNULL_PTR a, const struct LDKBlindedPaymentPath *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_eq")] public static extern bool BlindedPaymentPath_eq(long _a, long _b);
+       // MUST_USE_RES struct LDKCResult_BlindedPaymentPathNoneZ BlindedPaymentPath_one_hop(struct LDKPublicKey payee_node_id, struct LDKReceiveTlvs payee_tlvs, uint16_t min_final_cltv_expiry_delta, struct LDKEntropySource entropy_source);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_one_hop")] public static extern long BlindedPaymentPath_one_hop(long _payee_node_id, long _payee_tlvs, short _min_final_cltv_expiry_delta, long _entropy_source);
+       // MUST_USE_RES struct LDKCResult_BlindedPaymentPathNoneZ BlindedPaymentPath_new(struct LDKCVec_PaymentForwardNodeZ intermediate_nodes, struct LDKPublicKey payee_node_id, struct LDKReceiveTlvs payee_tlvs, uint64_t htlc_maximum_msat, uint16_t min_final_cltv_expiry_delta, struct LDKEntropySource entropy_source);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_new")] public static extern long BlindedPaymentPath_new(long _intermediate_nodes, long _payee_node_id, long _payee_tlvs, long _htlc_maximum_msat, short _min_final_cltv_expiry_delta, long _entropy_source);
+       // MUST_USE_RES struct LDKNodeId BlindedPaymentPath_public_introduction_node_id(const struct LDKBlindedPaymentPath *NONNULL_PTR this_arg, const struct LDKReadOnlyNetworkGraph *NONNULL_PTR network_graph);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_public_introduction_node_id")] public static extern long BlindedPaymentPath_public_introduction_node_id(long _this_arg, long _network_graph);
+       // MUST_USE_RES struct LDKIntroductionNode BlindedPaymentPath_introduction_node(const struct LDKBlindedPaymentPath *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_introduction_node")] public static extern long BlindedPaymentPath_introduction_node(long _this_arg);
+       // MUST_USE_RES struct LDKPublicKey BlindedPaymentPath_blinding_point(const struct LDKBlindedPaymentPath *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_blinding_point")] public static extern long BlindedPaymentPath_blinding_point(long _this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedHopZ BlindedPaymentPath_blinded_hops(const struct LDKBlindedPaymentPath *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_blinded_hops")] public static extern long BlindedPaymentPath_blinded_hops(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedPaymentPath_advance_path_by_one(struct LDKBlindedPaymentPath *NONNULL_PTR this_arg, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKNodeIdLookUp *NONNULL_PTR node_id_lookup);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedPaymentPath_advance_path_by_one")] public static extern long BlindedPaymentPath_advance_path_by_one(long _this_arg, long _node_signer, long _node_id_lookup);
+       // void PaymentForwardNode_free(struct LDKPaymentForwardNode this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_free")] public static extern void PaymentForwardNode_free(long _this_obj);
+       // struct LDKForwardTlvs PaymentForwardNode_get_tlvs(const struct LDKPaymentForwardNode *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_get_tlvs")] public static extern long PaymentForwardNode_get_tlvs(long _this_ptr);
+       // void PaymentForwardNode_set_tlvs(struct LDKPaymentForwardNode *NONNULL_PTR this_ptr, struct LDKForwardTlvs val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_set_tlvs")] public static extern void PaymentForwardNode_set_tlvs(long _this_ptr, long _val);
+       // struct LDKPublicKey PaymentForwardNode_get_node_id(const struct LDKPaymentForwardNode *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_get_node_id")] public static extern long PaymentForwardNode_get_node_id(long _this_ptr);
+       // void PaymentForwardNode_set_node_id(struct LDKPaymentForwardNode *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_set_node_id")] public static extern void PaymentForwardNode_set_node_id(long _this_ptr, long _val);
+       // uint64_t PaymentForwardNode_get_htlc_maximum_msat(const struct LDKPaymentForwardNode *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_get_htlc_maximum_msat")] public static extern long PaymentForwardNode_get_htlc_maximum_msat(long _this_ptr);
+       // void PaymentForwardNode_set_htlc_maximum_msat(struct LDKPaymentForwardNode *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_set_htlc_maximum_msat")] public static extern void PaymentForwardNode_set_htlc_maximum_msat(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKPaymentForwardNode PaymentForwardNode_new(struct LDKForwardTlvs tlvs_arg, struct LDKPublicKey node_id_arg, uint64_t htlc_maximum_msat_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_new")] public static extern long PaymentForwardNode_new(long _tlvs_arg, long _node_id_arg, long _htlc_maximum_msat_arg);
+       // uint64_t PaymentForwardNode_clone_ptr(LDKPaymentForwardNode *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_clone_ptr")] public static extern long PaymentForwardNode_clone_ptr(long _arg);
+       // struct LDKPaymentForwardNode PaymentForwardNode_clone(const struct LDKPaymentForwardNode *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentForwardNode_clone")] public static extern long PaymentForwardNode_clone(long _orig);
        // void ForwardTlvs_free(struct LDKForwardTlvs this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_free")] public static extern void ForwardTlvs_free(long _this_obj);
        // uint64_t ForwardTlvs_get_short_channel_id(const struct LDKForwardTlvs *NONNULL_PTR this_ptr);
@@ -13778,8 +13681,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_get_features")] public static extern long ForwardTlvs_get_features(long _this_ptr);
        // void ForwardTlvs_set_features(struct LDKForwardTlvs *NONNULL_PTR this_ptr, struct LDKBlindedHopFeatures val);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_set_features")] public static extern void ForwardTlvs_set_features(long _this_ptr, long _val);
-       // MUST_USE_RES struct LDKForwardTlvs ForwardTlvs_new(uint64_t short_channel_id_arg, struct LDKPaymentRelay payment_relay_arg, struct LDKPaymentConstraints payment_constraints_arg, struct LDKBlindedHopFeatures features_arg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_new")] public static extern long ForwardTlvs_new(long _short_channel_id_arg, long _payment_relay_arg, long _payment_constraints_arg, long _features_arg);
+       // struct LDKPublicKey ForwardTlvs_get_next_blinding_override(const struct LDKForwardTlvs *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_get_next_blinding_override")] public static extern long ForwardTlvs_get_next_blinding_override(long _this_ptr);
+       // void ForwardTlvs_set_next_blinding_override(struct LDKForwardTlvs *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_set_next_blinding_override")] public static extern void ForwardTlvs_set_next_blinding_override(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKForwardTlvs ForwardTlvs_new(uint64_t short_channel_id_arg, struct LDKPaymentRelay payment_relay_arg, struct LDKPaymentConstraints payment_constraints_arg, struct LDKBlindedHopFeatures features_arg, struct LDKPublicKey next_blinding_override_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_new")] public static extern long ForwardTlvs_new(long _short_channel_id_arg, long _payment_relay_arg, long _payment_constraints_arg, long _features_arg, long _next_blinding_override_arg);
        // uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ForwardTlvs_clone_ptr")] public static extern long ForwardTlvs_clone_ptr(long _arg);
        // struct LDKForwardTlvs ForwardTlvs_clone(const struct LDKForwardTlvs *NONNULL_PTR orig);
@@ -13918,6 +13825,118 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12RefundContext_write")] public static extern long Bolt12RefundContext_write(long _obj);
        // struct LDKCResult_Bolt12RefundContextDecodeErrorZ Bolt12RefundContext_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12RefundContext_read")] public static extern long Bolt12RefundContext_read(long _ser);
+       // void BlindedMessagePath_free(struct LDKBlindedMessagePath this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_free")] public static extern void BlindedMessagePath_free(long _this_obj);
+       // uint64_t BlindedMessagePath_clone_ptr(LDKBlindedMessagePath *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_clone_ptr")] public static extern long BlindedMessagePath_clone_ptr(long _arg);
+       // struct LDKBlindedMessagePath BlindedMessagePath_clone(const struct LDKBlindedMessagePath *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_clone")] public static extern long BlindedMessagePath_clone(long _orig);
+       // uint64_t BlindedMessagePath_hash(const struct LDKBlindedMessagePath *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_hash")] public static extern long BlindedMessagePath_hash(long _o);
+       // bool BlindedMessagePath_eq(const struct LDKBlindedMessagePath *NONNULL_PTR a, const struct LDKBlindedMessagePath *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_eq")] public static extern bool BlindedMessagePath_eq(long _a, long _b);
+       // struct LDKCVec_u8Z BlindedMessagePath_write(const struct LDKBlindedMessagePath *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_write")] public static extern long BlindedMessagePath_write(long _obj);
+       // struct LDKCResult_BlindedMessagePathDecodeErrorZ BlindedMessagePath_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_read")] public static extern long BlindedMessagePath_read(long _ser);
+       // MUST_USE_RES struct LDKCResult_BlindedMessagePathNoneZ BlindedMessagePath_one_hop(struct LDKPublicKey recipient_node_id, struct LDKMessageContext context, struct LDKEntropySource entropy_source);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_one_hop")] public static extern long BlindedMessagePath_one_hop(long _recipient_node_id, long _context, long _entropy_source);
+       // MUST_USE_RES struct LDKCResult_BlindedMessagePathNoneZ BlindedMessagePath_new(struct LDKCVec_MessageForwardNodeZ intermediate_nodes, struct LDKPublicKey recipient_node_id, struct LDKMessageContext context, struct LDKEntropySource entropy_source);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_new")] public static extern long BlindedMessagePath_new(long _intermediate_nodes, long _recipient_node_id, long _context, long _entropy_source);
+       // void BlindedMessagePath_use_compact_introduction_node(struct LDKBlindedMessagePath *NONNULL_PTR this_arg, const struct LDKReadOnlyNetworkGraph *NONNULL_PTR network_graph);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_use_compact_introduction_node")] public static extern void BlindedMessagePath_use_compact_introduction_node(long _this_arg, long _network_graph);
+       // MUST_USE_RES struct LDKNodeId BlindedMessagePath_public_introduction_node_id(const struct LDKBlindedMessagePath *NONNULL_PTR this_arg, const struct LDKReadOnlyNetworkGraph *NONNULL_PTR network_graph);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_public_introduction_node_id")] public static extern long BlindedMessagePath_public_introduction_node_id(long _this_arg, long _network_graph);
+       // MUST_USE_RES struct LDKIntroductionNode BlindedMessagePath_introduction_node(const struct LDKBlindedMessagePath *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_introduction_node")] public static extern long BlindedMessagePath_introduction_node(long _this_arg);
+       // MUST_USE_RES struct LDKPublicKey BlindedMessagePath_blinding_point(const struct LDKBlindedMessagePath *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_blinding_point")] public static extern long BlindedMessagePath_blinding_point(long _this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedHopZ BlindedMessagePath_blinded_hops(const struct LDKBlindedMessagePath *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_blinded_hops")] public static extern long BlindedMessagePath_blinded_hops(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedMessagePath_advance_path_by_one(struct LDKBlindedMessagePath *NONNULL_PTR this_arg, const struct LDKNodeSigner *NONNULL_PTR node_signer, const struct LDKNodeIdLookUp *NONNULL_PTR node_id_lookup);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedMessagePath_advance_path_by_one")] public static extern long BlindedMessagePath_advance_path_by_one(long _this_arg, long _node_signer, long _node_id_lookup);
+       // void NextMessageHop_free(struct LDKNextMessageHop this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_free")] public static extern void NextMessageHop_free(long _this_ptr);
+       // uint64_t NextMessageHop_clone_ptr(LDKNextMessageHop *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_clone_ptr")] public static extern long NextMessageHop_clone_ptr(long _arg);
+       // struct LDKNextMessageHop NextMessageHop_clone(const struct LDKNextMessageHop *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_clone")] public static extern long NextMessageHop_clone(long _orig);
+       // struct LDKNextMessageHop NextMessageHop_node_id(struct LDKPublicKey a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_node_id")] public static extern long NextMessageHop_node_id(long _a);
+       // struct LDKNextMessageHop NextMessageHop_short_channel_id(uint64_t a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_short_channel_id")] public static extern long NextMessageHop_short_channel_id(long _a);
+       // uint64_t NextMessageHop_hash(const struct LDKNextMessageHop *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_hash")] public static extern long NextMessageHop_hash(long _o);
+       // bool NextMessageHop_eq(const struct LDKNextMessageHop *NONNULL_PTR a, const struct LDKNextMessageHop *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NextMessageHop_eq")] public static extern bool NextMessageHop_eq(long _a, long _b);
+       // void MessageForwardNode_free(struct LDKMessageForwardNode this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_free")] public static extern void MessageForwardNode_free(long _this_obj);
+       // struct LDKPublicKey MessageForwardNode_get_node_id(const struct LDKMessageForwardNode *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_get_node_id")] public static extern long MessageForwardNode_get_node_id(long _this_ptr);
+       // void MessageForwardNode_set_node_id(struct LDKMessageForwardNode *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_set_node_id")] public static extern void MessageForwardNode_set_node_id(long _this_ptr, long _val);
+       // struct LDKCOption_u64Z MessageForwardNode_get_short_channel_id(const struct LDKMessageForwardNode *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_get_short_channel_id")] public static extern long MessageForwardNode_get_short_channel_id(long _this_ptr);
+       // void MessageForwardNode_set_short_channel_id(struct LDKMessageForwardNode *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_set_short_channel_id")] public static extern void MessageForwardNode_set_short_channel_id(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKMessageForwardNode MessageForwardNode_new(struct LDKPublicKey node_id_arg, struct LDKCOption_u64Z short_channel_id_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_new")] public static extern long MessageForwardNode_new(long _node_id_arg, long _short_channel_id_arg);
+       // uint64_t MessageForwardNode_clone_ptr(LDKMessageForwardNode *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_clone_ptr")] public static extern long MessageForwardNode_clone_ptr(long _arg);
+       // struct LDKMessageForwardNode MessageForwardNode_clone(const struct LDKMessageForwardNode *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_clone")] public static extern long MessageForwardNode_clone(long _orig);
+       // uint64_t MessageForwardNode_hash(const struct LDKMessageForwardNode *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_hash")] public static extern long MessageForwardNode_hash(long _o);
+       // bool MessageForwardNode_eq(const struct LDKMessageForwardNode *NONNULL_PTR a, const struct LDKMessageForwardNode *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageForwardNode_eq")] public static extern bool MessageForwardNode_eq(long _a, long _b);
+       // void MessageContext_free(struct LDKMessageContext this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_free")] public static extern void MessageContext_free(long _this_ptr);
+       // uint64_t MessageContext_clone_ptr(LDKMessageContext *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_clone_ptr")] public static extern long MessageContext_clone_ptr(long _arg);
+       // struct LDKMessageContext MessageContext_clone(const struct LDKMessageContext *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_clone")] public static extern long MessageContext_clone(long _orig);
+       // struct LDKMessageContext MessageContext_offers(struct LDKOffersContext a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_offers")] public static extern long MessageContext_offers(long _a);
+       // struct LDKMessageContext MessageContext_custom(struct LDKCVec_u8Z a);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_custom")] public static extern long MessageContext_custom(long _a);
+       // void OffersContext_free(struct LDKOffersContext this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_free")] public static extern void OffersContext_free(long _this_ptr);
+       // uint64_t OffersContext_clone_ptr(LDKOffersContext *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_clone_ptr")] public static extern long OffersContext_clone_ptr(long _arg);
+       // struct LDKOffersContext OffersContext_clone(const struct LDKOffersContext *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_clone")] public static extern long OffersContext_clone(long _orig);
+       // struct LDKOffersContext OffersContext_invoice_request(struct LDKNonce nonce);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_invoice_request")] public static extern long OffersContext_invoice_request(long _nonce);
+       // struct LDKOffersContext OffersContext_outbound_payment(struct LDKThirtyTwoBytes payment_id, struct LDKNonce nonce, struct LDKThirtyTwoBytes hmac);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_outbound_payment")] public static extern long OffersContext_outbound_payment(long _payment_id, long _nonce, long _hmac);
+       // struct LDKOffersContext OffersContext_inbound_payment(struct LDKThirtyTwoBytes payment_hash);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_inbound_payment")] public static extern long OffersContext_inbound_payment(long _payment_hash);
+       // bool OffersContext_eq(const struct LDKOffersContext *NONNULL_PTR a, const struct LDKOffersContext *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_eq")] public static extern bool OffersContext_eq(long _a, long _b);
+       // struct LDKCVec_u8Z MessageContext_write(const struct LDKMessageContext *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_write")] public static extern long MessageContext_write(long _obj);
+       // struct LDKCResult_MessageContextDecodeErrorZ MessageContext_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageContext_read")] public static extern long MessageContext_read(long _ser);
+       // struct LDKCVec_u8Z OffersContext_write(const struct LDKOffersContext *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_write")] public static extern long OffersContext_write(long _obj);
+       // struct LDKCResult_OffersContextDecodeErrorZ OffersContext_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OffersContext_read")] public static extern long OffersContext_read(long _ser);
+       // void FundingInfo_free(struct LDKFundingInfo this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_free")] public static extern void FundingInfo_free(long _this_ptr);
+       // uint64_t FundingInfo_clone_ptr(LDKFundingInfo *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_clone_ptr")] public static extern long FundingInfo_clone_ptr(long _arg);
+       // struct LDKFundingInfo FundingInfo_clone(const struct LDKFundingInfo *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_clone")] public static extern long FundingInfo_clone(long _orig);
+       // struct LDKFundingInfo FundingInfo_tx(struct LDKTransaction transaction);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_tx")] public static extern long FundingInfo_tx(long _transaction);
+       // struct LDKFundingInfo FundingInfo_out_point(struct LDKOutPoint outpoint);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_out_point")] public static extern long FundingInfo_out_point(long _outpoint);
+       // bool FundingInfo_eq(const struct LDKFundingInfo *NONNULL_PTR a, const struct LDKFundingInfo *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_eq")] public static extern bool FundingInfo_eq(long _a, long _b);
+       // struct LDKCVec_u8Z FundingInfo_write(const struct LDKFundingInfo *NONNULL_PTR obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_write")] public static extern long FundingInfo_write(long _obj);
+       // struct LDKCResult_FundingInfoDecodeErrorZ FundingInfo_read(struct LDKu8slice ser);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FundingInfo_read")] public static extern long FundingInfo_read(long _ser);
        // void PaymentPurpose_free(struct LDKPaymentPurpose this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentPurpose_free")] public static extern void PaymentPurpose_free(long _this_ptr);
        // uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg);
@@ -13998,8 +14017,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_clone")] public static extern long ClosureReason_clone(long _orig);
        // struct LDKClosureReason ClosureReason_counterparty_force_closed(struct LDKUntrustedString peer_msg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_counterparty_force_closed")] public static extern long ClosureReason_counterparty_force_closed(long _peer_msg);
-       // struct LDKClosureReason ClosureReason_holder_force_closed(void);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_holder_force_closed")] public static extern long ClosureReason_holder_force_closed();
+       // struct LDKClosureReason ClosureReason_holder_force_closed(struct LDKCOption_boolZ broadcasted_latest_txn);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_holder_force_closed")] public static extern long ClosureReason_holder_force_closed(long _broadcasted_latest_txn);
        // struct LDKClosureReason ClosureReason_legacy_cooperative_closure(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_legacy_cooperative_closure")] public static extern long ClosureReason_legacy_cooperative_closure();
        // struct LDKClosureReason ClosureReason_counterparty_initiated_cooperative_closure(void);
@@ -14022,6 +14041,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_funding_batch_closure")] public static extern long ClosureReason_funding_batch_closure();
        // struct LDKClosureReason ClosureReason_htlcs_timed_out(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_htlcs_timed_out")] public static extern long ClosureReason_htlcs_timed_out();
+       // struct LDKClosureReason ClosureReason_peer_feerate_too_low(uint32_t peer_feerate_sat_per_kw, uint32_t required_feerate_sat_per_kw);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_peer_feerate_too_low")] public static extern long ClosureReason_peer_feerate_too_low(int _peer_feerate_sat_per_kw, int _required_feerate_sat_per_kw);
        // bool ClosureReason_eq(const struct LDKClosureReason *NONNULL_PTR a, const struct LDKClosureReason *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ClosureReason_eq")] public static extern bool ClosureReason_eq(long _a, long _b);
        // struct LDKStr ClosureReason_to_str(const struct LDKClosureReason *NONNULL_PTR o);
@@ -14066,11 +14087,17 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_route_not_found")] public static extern PaymentFailureReason PaymentFailureReason_route_not_found();
        // enum LDKPaymentFailureReason PaymentFailureReason_unexpected_error(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_unexpected_error")] public static extern PaymentFailureReason PaymentFailureReason_unexpected_error();
+       // enum LDKPaymentFailureReason PaymentFailureReason_unknown_required_features(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_unknown_required_features")] public static extern PaymentFailureReason PaymentFailureReason_unknown_required_features();
+       // enum LDKPaymentFailureReason PaymentFailureReason_invoice_request_expired(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_invoice_request_expired")] public static extern PaymentFailureReason PaymentFailureReason_invoice_request_expired();
+       // enum LDKPaymentFailureReason PaymentFailureReason_invoice_request_rejected(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_invoice_request_rejected")] public static extern PaymentFailureReason PaymentFailureReason_invoice_request_rejected();
        // bool PaymentFailureReason_eq(const enum LDKPaymentFailureReason *NONNULL_PTR a, const enum LDKPaymentFailureReason *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_eq")] public static extern bool PaymentFailureReason_eq(long _a, long _b);
        // struct LDKCVec_u8Z PaymentFailureReason_write(const enum LDKPaymentFailureReason *NONNULL_PTR obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_write")] public static extern long PaymentFailureReason_write(long _obj);
-       // struct LDKCResult_PaymentFailureReasonDecodeErrorZ PaymentFailureReason_read(struct LDKu8slice ser);
+       // struct LDKCResult_COption_PaymentFailureReasonZDecodeErrorZ PaymentFailureReason_read(struct LDKu8slice ser);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PaymentFailureReason_read")] public static extern long PaymentFailureReason_read(long _ser);
        // void Event_free(struct LDKEvent this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_free")] public static extern void Event_free(long _this_ptr);
@@ -14080,17 +14107,19 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_clone")] public static extern long Event_clone(long _orig);
        // struct LDKEvent Event_funding_generation_ready(struct LDKChannelId temporary_channel_id, struct LDKPublicKey counterparty_node_id, uint64_t channel_value_satoshis, struct LDKCVec_u8Z output_script, struct LDKU128 user_channel_id);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_funding_generation_ready")] public static extern long Event_funding_generation_ready(long _temporary_channel_id, long _counterparty_node_id, long _channel_value_satoshis, long _output_script, long _user_channel_id);
+       // struct LDKEvent Event_funding_tx_broadcast_safe(struct LDKChannelId channel_id, struct LDKU128 user_channel_id, struct LDKOutPoint funding_txo, struct LDKPublicKey counterparty_node_id, struct LDKChannelId former_temporary_channel_id);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_funding_tx_broadcast_safe")] public static extern long Event_funding_tx_broadcast_safe(long _channel_id, long _user_channel_id, long _funding_txo, long _counterparty_node_id, long _former_temporary_channel_id);
        // struct LDKEvent Event_payment_claimable(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, struct LDKRecipientOnionFields onion_fields, uint64_t amount_msat, uint64_t counterparty_skimmed_fee_msat, struct LDKPaymentPurpose purpose, struct LDKChannelId via_channel_id, struct LDKCOption_U128Z via_user_channel_id, struct LDKCOption_u32Z claim_deadline);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_payment_claimable")] public static extern long Event_payment_claimable(long _receiver_node_id, long _payment_hash, long _onion_fields, long _amount_msat, long _counterparty_skimmed_fee_msat, long _purpose, long _via_channel_id, long _via_user_channel_id, long _claim_deadline);
-       // struct LDKEvent Event_payment_claimed(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, uint64_t amount_msat, struct LDKPaymentPurpose purpose, struct LDKCVec_ClaimedHTLCZ htlcs, struct LDKCOption_u64Z sender_intended_total_msat);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_payment_claimed")] public static extern long Event_payment_claimed(long _receiver_node_id, long _payment_hash, long _amount_msat, long _purpose, long _htlcs, long _sender_intended_total_msat);
+       // struct LDKEvent Event_payment_claimed(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, uint64_t amount_msat, struct LDKPaymentPurpose purpose, struct LDKCVec_ClaimedHTLCZ htlcs, struct LDKCOption_u64Z sender_intended_total_msat, struct LDKRecipientOnionFields onion_fields);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_payment_claimed")] public static extern long Event_payment_claimed(long _receiver_node_id, long _payment_hash, long _amount_msat, long _purpose, long _htlcs, long _sender_intended_total_msat, long _onion_fields);
        // struct LDKEvent Event_connection_needed(struct LDKPublicKey node_id, struct LDKCVec_SocketAddressZ addresses);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_connection_needed")] public static extern long Event_connection_needed(long _node_id, long _addresses);
-       // struct LDKEvent Event_invoice_request_failed(struct LDKThirtyTwoBytes payment_id);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_invoice_request_failed")] public static extern long Event_invoice_request_failed(long _payment_id);
+       // struct LDKEvent Event_invoice_received(struct LDKThirtyTwoBytes payment_id, struct LDKBolt12Invoice invoice, struct LDKCOption_OffersContextZ context, struct LDKResponder responder);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_invoice_received")] public static extern long Event_invoice_received(long _payment_id, long _invoice, long _context, long _responder);
        // struct LDKEvent Event_payment_sent(struct LDKCOption_ThirtyTwoBytesZ payment_id, struct LDKThirtyTwoBytes payment_preimage, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u64Z fee_paid_msat);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_payment_sent")] public static extern long Event_payment_sent(long _payment_id, long _payment_preimage, long _payment_hash, long _fee_paid_msat);
-       // struct LDKEvent Event_payment_failed(struct LDKThirtyTwoBytes payment_id, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_PaymentFailureReasonZ reason);
+       // struct LDKEvent Event_payment_failed(struct LDKThirtyTwoBytes payment_id, struct LDKCOption_ThirtyTwoBytesZ payment_hash, struct LDKCOption_PaymentFailureReasonZ reason);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_payment_failed")] public static extern long Event_payment_failed(long _payment_id, long _payment_hash, long _reason);
        // struct LDKEvent Event_payment_path_successful(struct LDKThirtyTwoBytes payment_id, struct LDKCOption_ThirtyTwoBytesZ payment_hash, struct LDKPath path);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_payment_path_successful")] public static extern long Event_payment_path_successful(long _payment_id, long _payment_hash, long _path);
@@ -14114,14 +14143,18 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_channel_ready")] public static extern long Event_channel_ready(long _channel_id, long _user_channel_id, long _counterparty_node_id, long _channel_type);
        // struct LDKEvent Event_channel_closed(struct LDKChannelId channel_id, struct LDKU128 user_channel_id, struct LDKClosureReason reason, struct LDKPublicKey counterparty_node_id, struct LDKCOption_u64Z channel_capacity_sats, struct LDKOutPoint channel_funding_txo);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_channel_closed")] public static extern long Event_channel_closed(long _channel_id, long _user_channel_id, long _reason, long _counterparty_node_id, long _channel_capacity_sats, long _channel_funding_txo);
-       // struct LDKEvent Event_discard_funding(struct LDKChannelId channel_id, struct LDKTransaction transaction);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_discard_funding")] public static extern long Event_discard_funding(long _channel_id, long _transaction);
-       // struct LDKEvent Event_open_channel_request(struct LDKChannelId temporary_channel_id, struct LDKPublicKey counterparty_node_id, uint64_t funding_satoshis, uint64_t push_msat, struct LDKChannelTypeFeatures channel_type);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_open_channel_request")] public static extern long Event_open_channel_request(long _temporary_channel_id, long _counterparty_node_id, long _funding_satoshis, long _push_msat, long _channel_type);
+       // struct LDKEvent Event_discard_funding(struct LDKChannelId channel_id, struct LDKFundingInfo funding_info);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_discard_funding")] public static extern long Event_discard_funding(long _channel_id, long _funding_info);
+       // struct LDKEvent Event_open_channel_request(struct LDKChannelId temporary_channel_id, struct LDKPublicKey counterparty_node_id, uint64_t funding_satoshis, uint64_t push_msat, struct LDKChannelTypeFeatures channel_type, bool is_announced, struct LDKChannelParameters params);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_open_channel_request")] public static extern long Event_open_channel_request(long _temporary_channel_id, long _counterparty_node_id, long _funding_satoshis, long _push_msat, long _channel_type, bool _is_announced, long _params);
        // struct LDKEvent Event_htlchandling_failed(struct LDKChannelId prev_channel_id, struct LDKHTLCDestination failed_next_destination);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_htlchandling_failed")] public static extern long Event_htlchandling_failed(long _prev_channel_id, long _failed_next_destination);
        // struct LDKEvent Event_bump_transaction(struct LDKBumpTransactionEvent a);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_bump_transaction")] public static extern long Event_bump_transaction(long _a);
+       // struct LDKEvent Event_onion_message_intercepted(struct LDKPublicKey peer_node_id, struct LDKOnionMessage message);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_onion_message_intercepted")] public static extern long Event_onion_message_intercepted(long _peer_node_id, long _message);
+       // struct LDKEvent Event_onion_message_peer_connected(struct LDKPublicKey peer_node_id);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_onion_message_peer_connected")] public static extern long Event_onion_message_peer_connected(long _peer_node_id);
        // bool Event_eq(const struct LDKEvent *NONNULL_PTR a, const struct LDKEvent *NONNULL_PTR b);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Event_eq")] public static extern bool Event_eq(long _a, long _b);
        // struct LDKCVec_u8Z Event_write(const struct LDKEvent *NONNULL_PTR obj);
@@ -14148,8 +14181,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendEvent_send_funding_signed")] public static extern long MessageSendEvent_send_funding_signed(long _node_id, long _msg);
        // struct LDKMessageSendEvent MessageSendEvent_send_stfu(struct LDKPublicKey node_id, struct LDKStfu msg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendEvent_send_stfu")] public static extern long MessageSendEvent_send_stfu(long _node_id, long _msg);
-       // struct LDKMessageSendEvent MessageSendEvent_send_splice(struct LDKPublicKey node_id, struct LDKSplice msg);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendEvent_send_splice")] public static extern long MessageSendEvent_send_splice(long _node_id, long _msg);
+       // struct LDKMessageSendEvent MessageSendEvent_send_splice_init(struct LDKPublicKey node_id, struct LDKSpliceInit msg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendEvent_send_splice_init")] public static extern long MessageSendEvent_send_splice_init(long _node_id, long _msg);
        // struct LDKMessageSendEvent MessageSendEvent_send_splice_ack(struct LDKPublicKey node_id, struct LDKSpliceAck msg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendEvent_send_splice_ack")] public static extern long MessageSendEvent_send_splice_ack(long _node_id, long _msg);
        // struct LDKMessageSendEvent MessageSendEvent_send_splice_locked(struct LDKPublicKey node_id, struct LDKSpliceLocked msg);
@@ -14210,6 +14243,14 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_MessageSendEventsProvider_free")] public static extern void MessageSendEventsProvider_free(long _this_ptr);
        // void EventsProvider_free(struct LDKEventsProvider this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EventsProvider_free")] public static extern void EventsProvider_free(long _this_ptr);
+       // void ReplayEvent_free(struct LDKReplayEvent this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReplayEvent_free")] public static extern void ReplayEvent_free(long _this_obj);
+       // MUST_USE_RES struct LDKReplayEvent ReplayEvent_new(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReplayEvent_new")] public static extern long ReplayEvent_new();
+       // uint64_t ReplayEvent_clone_ptr(LDKReplayEvent *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReplayEvent_clone_ptr")] public static extern long ReplayEvent_clone_ptr(long _arg);
+       // struct LDKReplayEvent ReplayEvent_clone(const struct LDKReplayEvent *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ReplayEvent_clone")] public static extern long ReplayEvent_clone(long _orig);
        // void EventHandler_free(struct LDKEventHandler this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_EventHandler_free")] public static extern void EventHandler_free(long _this_ptr);
        // void AnchorDescriptor_free(struct LDKAnchorDescriptor this_obj);
@@ -14238,7 +14279,7 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AnchorDescriptor_witness_script")] public static extern long AnchorDescriptor_witness_script(long _this_arg);
        // MUST_USE_RES struct LDKWitness AnchorDescriptor_tx_input_witness(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg, struct LDKECDSASignature signature);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AnchorDescriptor_tx_input_witness")] public static extern long AnchorDescriptor_tx_input_witness(long _this_arg, long _signature);
-       // MUST_USE_RES struct LDKWriteableEcdsaChannelSigner AnchorDescriptor_derive_channel_signer(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
+       // MUST_USE_RES struct LDKEcdsaChannelSigner AnchorDescriptor_derive_channel_signer(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_AnchorDescriptor_derive_channel_signer")] public static extern long AnchorDescriptor_derive_channel_signer(long _this_arg, long _signer_provider);
        // void BumpTransactionEvent_free(struct LDKBumpTransactionEvent this_ptr);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BumpTransactionEvent_free")] public static extern void BumpTransactionEvent_free(long _this_ptr);
@@ -14334,6 +14375,826 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BumpTransactionEventHandler_new")] public static extern long BumpTransactionEventHandler_new(long _broadcaster, long _utxo_source, long _signer_provider, long _logger);
        // void BumpTransactionEventHandler_handle_event(const struct LDKBumpTransactionEventHandler *NONNULL_PTR this_arg, const struct LDKBumpTransactionEvent *NONNULL_PTR event);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BumpTransactionEventHandler_handle_event")] public static extern void BumpTransactionEventHandler_handle_event(long _this_arg, long _event);
+       // bool InitFeatures_eq(const struct LDKInitFeatures *NONNULL_PTR a, const struct LDKInitFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_eq")] public static extern bool InitFeatures_eq(long _a, long _b);
+       // bool NodeFeatures_eq(const struct LDKNodeFeatures *NONNULL_PTR a, const struct LDKNodeFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_eq")] public static extern bool NodeFeatures_eq(long _a, long _b);
+       // bool ChannelFeatures_eq(const struct LDKChannelFeatures *NONNULL_PTR a, const struct LDKChannelFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_eq")] public static extern bool ChannelFeatures_eq(long _a, long _b);
+       // bool Bolt11InvoiceFeatures_eq(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR a, const struct LDKBolt11InvoiceFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_eq")] public static extern bool Bolt11InvoiceFeatures_eq(long _a, long _b);
+       // bool OfferFeatures_eq(const struct LDKOfferFeatures *NONNULL_PTR a, const struct LDKOfferFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_eq")] public static extern bool OfferFeatures_eq(long _a, long _b);
+       // bool InvoiceRequestFeatures_eq(const struct LDKInvoiceRequestFeatures *NONNULL_PTR a, const struct LDKInvoiceRequestFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_eq")] public static extern bool InvoiceRequestFeatures_eq(long _a, long _b);
+       // bool Bolt12InvoiceFeatures_eq(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR a, const struct LDKBolt12InvoiceFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_eq")] public static extern bool Bolt12InvoiceFeatures_eq(long _a, long _b);
+       // bool BlindedHopFeatures_eq(const struct LDKBlindedHopFeatures *NONNULL_PTR a, const struct LDKBlindedHopFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_eq")] public static extern bool BlindedHopFeatures_eq(long _a, long _b);
+       // bool ChannelTypeFeatures_eq(const struct LDKChannelTypeFeatures *NONNULL_PTR a, const struct LDKChannelTypeFeatures *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_eq")] public static extern bool ChannelTypeFeatures_eq(long _a, long _b);
+       // uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clone_ptr")] public static extern long InitFeatures_clone_ptr(long _arg);
+       // struct LDKInitFeatures InitFeatures_clone(const struct LDKInitFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clone")] public static extern long InitFeatures_clone(long _orig);
+       // uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clone_ptr")] public static extern long NodeFeatures_clone_ptr(long _arg);
+       // struct LDKNodeFeatures NodeFeatures_clone(const struct LDKNodeFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clone")] public static extern long NodeFeatures_clone(long _orig);
+       // uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_clone_ptr")] public static extern long ChannelFeatures_clone_ptr(long _arg);
+       // struct LDKChannelFeatures ChannelFeatures_clone(const struct LDKChannelFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_clone")] public static extern long ChannelFeatures_clone(long _orig);
+       // uint64_t Bolt11InvoiceFeatures_clone_ptr(LDKBolt11InvoiceFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_clone_ptr")] public static extern long Bolt11InvoiceFeatures_clone_ptr(long _arg);
+       // struct LDKBolt11InvoiceFeatures Bolt11InvoiceFeatures_clone(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_clone")] public static extern long Bolt11InvoiceFeatures_clone(long _orig);
+       // uint64_t OfferFeatures_clone_ptr(LDKOfferFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_clone_ptr")] public static extern long OfferFeatures_clone_ptr(long _arg);
+       // struct LDKOfferFeatures OfferFeatures_clone(const struct LDKOfferFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_clone")] public static extern long OfferFeatures_clone(long _orig);
+       // uint64_t InvoiceRequestFeatures_clone_ptr(LDKInvoiceRequestFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_clone_ptr")] public static extern long InvoiceRequestFeatures_clone_ptr(long _arg);
+       // struct LDKInvoiceRequestFeatures InvoiceRequestFeatures_clone(const struct LDKInvoiceRequestFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_clone")] public static extern long InvoiceRequestFeatures_clone(long _orig);
+       // uint64_t Bolt12InvoiceFeatures_clone_ptr(LDKBolt12InvoiceFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_clone_ptr")] public static extern long Bolt12InvoiceFeatures_clone_ptr(long _arg);
+       // struct LDKBolt12InvoiceFeatures Bolt12InvoiceFeatures_clone(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_clone")] public static extern long Bolt12InvoiceFeatures_clone(long _orig);
+       // uint64_t BlindedHopFeatures_clone_ptr(LDKBlindedHopFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_clone_ptr")] public static extern long BlindedHopFeatures_clone_ptr(long _arg);
+       // struct LDKBlindedHopFeatures BlindedHopFeatures_clone(const struct LDKBlindedHopFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_clone")] public static extern long BlindedHopFeatures_clone(long _orig);
+       // uint64_t ChannelTypeFeatures_clone_ptr(LDKChannelTypeFeatures *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_clone_ptr")] public static extern long ChannelTypeFeatures_clone_ptr(long _arg);
+       // struct LDKChannelTypeFeatures ChannelTypeFeatures_clone(const struct LDKChannelTypeFeatures *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_clone")] public static extern long ChannelTypeFeatures_clone(long _orig);
+       // uint64_t InitFeatures_hash(const struct LDKInitFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_hash")] public static extern long InitFeatures_hash(long _o);
+       // uint64_t NodeFeatures_hash(const struct LDKNodeFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_hash")] public static extern long NodeFeatures_hash(long _o);
+       // uint64_t ChannelFeatures_hash(const struct LDKChannelFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_hash")] public static extern long ChannelFeatures_hash(long _o);
+       // uint64_t Bolt11InvoiceFeatures_hash(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_hash")] public static extern long Bolt11InvoiceFeatures_hash(long _o);
+       // uint64_t OfferFeatures_hash(const struct LDKOfferFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_hash")] public static extern long OfferFeatures_hash(long _o);
+       // uint64_t InvoiceRequestFeatures_hash(const struct LDKInvoiceRequestFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_hash")] public static extern long InvoiceRequestFeatures_hash(long _o);
+       // uint64_t Bolt12InvoiceFeatures_hash(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_hash")] public static extern long Bolt12InvoiceFeatures_hash(long _o);
+       // uint64_t BlindedHopFeatures_hash(const struct LDKBlindedHopFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_hash")] public static extern long BlindedHopFeatures_hash(long _o);
+       // uint64_t ChannelTypeFeatures_hash(const struct LDKChannelTypeFeatures *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_hash")] public static extern long ChannelTypeFeatures_hash(long _o);
+       // void InitFeatures_free(struct LDKInitFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_free")] public static extern void InitFeatures_free(long _this_obj);
+       // void NodeFeatures_free(struct LDKNodeFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_free")] public static extern void NodeFeatures_free(long _this_obj);
+       // void ChannelFeatures_free(struct LDKChannelFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_free")] public static extern void ChannelFeatures_free(long _this_obj);
+       // void Bolt11InvoiceFeatures_free(struct LDKBolt11InvoiceFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_free")] public static extern void Bolt11InvoiceFeatures_free(long _this_obj);
+       // void OfferFeatures_free(struct LDKOfferFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_free")] public static extern void OfferFeatures_free(long _this_obj);
+       // void InvoiceRequestFeatures_free(struct LDKInvoiceRequestFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_free")] public static extern void InvoiceRequestFeatures_free(long _this_obj);
+       // void Bolt12InvoiceFeatures_free(struct LDKBolt12InvoiceFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_free")] public static extern void Bolt12InvoiceFeatures_free(long _this_obj);
+       // void BlindedHopFeatures_free(struct LDKBlindedHopFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_free")] public static extern void BlindedHopFeatures_free(long _this_obj);
+       // void ChannelTypeFeatures_free(struct LDKChannelTypeFeatures this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_free")] public static extern void ChannelTypeFeatures_free(long _this_obj);
+       // MUST_USE_RES struct LDKBolt11InvoiceFeatures Bolt11InvoiceFeatures_for_keysend(bool allow_mpp);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_for_keysend")] public static extern long Bolt11InvoiceFeatures_for_keysend(bool _allow_mpp);
+       // MUST_USE_RES struct LDKChannelTypeFeatures ChannelTypeFeatures_only_static_remote_key(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_only_static_remote_key")] public static extern long ChannelTypeFeatures_only_static_remote_key();
+       // MUST_USE_RES struct LDKChannelTypeFeatures ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies")] public static extern long ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies();
+       // MUST_USE_RES struct LDKInitFeatures InitFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_empty")] public static extern long InitFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice InitFeatures_le_flags(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_le_flags")] public static extern long InitFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_any_optional_bits(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_any_optional_bits")] public static extern bool InitFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_unknown_bits_from(const struct LDKInitFeatures *NONNULL_PTR this_arg, const struct LDKInitFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_unknown_bits_from")] public static extern bool InitFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z InitFeatures_required_unknown_bits_from(const struct LDKInitFeatures *NONNULL_PTR this_arg, const struct LDKInitFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_required_unknown_bits_from")] public static extern long InitFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool InitFeatures_requires_unknown_bits(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_unknown_bits")] public static extern bool InitFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_unknown_bits(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_unknown_bits")] public static extern bool InitFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_required_feature_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_required_feature_bit")] public static extern long InitFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_optional_feature_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_optional_feature_bit")] public static extern long InitFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_required_custom_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_required_custom_bit")] public static extern long InitFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_optional_custom_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_optional_custom_bit")] public static extern long InitFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKNodeFeatures NodeFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_empty")] public static extern long NodeFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice NodeFeatures_le_flags(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_le_flags")] public static extern long NodeFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_any_optional_bits(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_any_optional_bits")] public static extern bool NodeFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_unknown_bits_from(const struct LDKNodeFeatures *NONNULL_PTR this_arg, const struct LDKNodeFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_unknown_bits_from")] public static extern bool NodeFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z NodeFeatures_required_unknown_bits_from(const struct LDKNodeFeatures *NONNULL_PTR this_arg, const struct LDKNodeFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_required_unknown_bits_from")] public static extern long NodeFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool NodeFeatures_requires_unknown_bits(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_unknown_bits")] public static extern bool NodeFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_unknown_bits(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_unknown_bits")] public static extern bool NodeFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_required_feature_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_required_feature_bit")] public static extern long NodeFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_optional_feature_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_optional_feature_bit")] public static extern long NodeFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_required_custom_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_required_custom_bit")] public static extern long NodeFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_optional_custom_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_optional_custom_bit")] public static extern long NodeFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKChannelFeatures ChannelFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_empty")] public static extern long ChannelFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice ChannelFeatures_le_flags(const struct LDKChannelFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_le_flags")] public static extern long ChannelFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool ChannelFeatures_supports_any_optional_bits(const struct LDKChannelFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_supports_any_optional_bits")] public static extern bool ChannelFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool ChannelFeatures_requires_unknown_bits_from(const struct LDKChannelFeatures *NONNULL_PTR this_arg, const struct LDKChannelFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_requires_unknown_bits_from")] public static extern bool ChannelFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z ChannelFeatures_required_unknown_bits_from(const struct LDKChannelFeatures *NONNULL_PTR this_arg, const struct LDKChannelFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_required_unknown_bits_from")] public static extern long ChannelFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool ChannelFeatures_requires_unknown_bits(const struct LDKChannelFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_requires_unknown_bits")] public static extern bool ChannelFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool ChannelFeatures_supports_unknown_bits(const struct LDKChannelFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_supports_unknown_bits")] public static extern bool ChannelFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_required_feature_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_required_feature_bit")] public static extern long ChannelFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_optional_feature_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_optional_feature_bit")] public static extern long ChannelFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_required_custom_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_required_custom_bit")] public static extern long ChannelFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_optional_custom_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelFeatures_set_optional_custom_bit")] public static extern long ChannelFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKBolt11InvoiceFeatures Bolt11InvoiceFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_empty")] public static extern long Bolt11InvoiceFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice Bolt11InvoiceFeatures_le_flags(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_le_flags")] public static extern long Bolt11InvoiceFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_any_optional_bits(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_any_optional_bits")] public static extern bool Bolt11InvoiceFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_unknown_bits_from(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, const struct LDKBolt11InvoiceFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits_from")] public static extern bool Bolt11InvoiceFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z Bolt11InvoiceFeatures_required_unknown_bits_from(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, const struct LDKBolt11InvoiceFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_required_unknown_bits_from")] public static extern long Bolt11InvoiceFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_unknown_bits(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_unknown_bits")] public static extern bool Bolt11InvoiceFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_unknown_bits(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_unknown_bits")] public static extern bool Bolt11InvoiceFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_required_feature_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_required_feature_bit")] public static extern long Bolt11InvoiceFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_optional_feature_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_optional_feature_bit")] public static extern long Bolt11InvoiceFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_required_custom_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_required_custom_bit")] public static extern long Bolt11InvoiceFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_optional_custom_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_optional_custom_bit")] public static extern long Bolt11InvoiceFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKOfferFeatures OfferFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_empty")] public static extern long OfferFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice OfferFeatures_le_flags(const struct LDKOfferFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_le_flags")] public static extern long OfferFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool OfferFeatures_supports_any_optional_bits(const struct LDKOfferFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_supports_any_optional_bits")] public static extern bool OfferFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool OfferFeatures_requires_unknown_bits_from(const struct LDKOfferFeatures *NONNULL_PTR this_arg, const struct LDKOfferFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_requires_unknown_bits_from")] public static extern bool OfferFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z OfferFeatures_required_unknown_bits_from(const struct LDKOfferFeatures *NONNULL_PTR this_arg, const struct LDKOfferFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_required_unknown_bits_from")] public static extern long OfferFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool OfferFeatures_requires_unknown_bits(const struct LDKOfferFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_requires_unknown_bits")] public static extern bool OfferFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool OfferFeatures_supports_unknown_bits(const struct LDKOfferFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_supports_unknown_bits")] public static extern bool OfferFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_required_feature_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_required_feature_bit")] public static extern long OfferFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_optional_feature_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_optional_feature_bit")] public static extern long OfferFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_required_custom_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_required_custom_bit")] public static extern long OfferFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_optional_custom_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_OfferFeatures_set_optional_custom_bit")] public static extern long OfferFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKInvoiceRequestFeatures InvoiceRequestFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_empty")] public static extern long InvoiceRequestFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice InvoiceRequestFeatures_le_flags(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_le_flags")] public static extern long InvoiceRequestFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool InvoiceRequestFeatures_supports_any_optional_bits(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_supports_any_optional_bits")] public static extern bool InvoiceRequestFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool InvoiceRequestFeatures_requires_unknown_bits_from(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, const struct LDKInvoiceRequestFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_requires_unknown_bits_from")] public static extern bool InvoiceRequestFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z InvoiceRequestFeatures_required_unknown_bits_from(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, const struct LDKInvoiceRequestFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_required_unknown_bits_from")] public static extern long InvoiceRequestFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool InvoiceRequestFeatures_requires_unknown_bits(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_requires_unknown_bits")] public static extern bool InvoiceRequestFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool InvoiceRequestFeatures_supports_unknown_bits(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_supports_unknown_bits")] public static extern bool InvoiceRequestFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_required_feature_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_required_feature_bit")] public static extern long InvoiceRequestFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_optional_feature_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_optional_feature_bit")] public static extern long InvoiceRequestFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_required_custom_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_required_custom_bit")] public static extern long InvoiceRequestFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_optional_custom_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InvoiceRequestFeatures_set_optional_custom_bit")] public static extern long InvoiceRequestFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKBolt12InvoiceFeatures Bolt12InvoiceFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_empty")] public static extern long Bolt12InvoiceFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice Bolt12InvoiceFeatures_le_flags(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_le_flags")] public static extern long Bolt12InvoiceFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool Bolt12InvoiceFeatures_supports_any_optional_bits(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_supports_any_optional_bits")] public static extern bool Bolt12InvoiceFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_unknown_bits_from(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, const struct LDKBolt12InvoiceFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits_from")] public static extern bool Bolt12InvoiceFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z Bolt12InvoiceFeatures_required_unknown_bits_from(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, const struct LDKBolt12InvoiceFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_required_unknown_bits_from")] public static extern long Bolt12InvoiceFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_unknown_bits(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_requires_unknown_bits")] public static extern bool Bolt12InvoiceFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool Bolt12InvoiceFeatures_supports_unknown_bits(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_supports_unknown_bits")] public static extern bool Bolt12InvoiceFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_required_feature_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_required_feature_bit")] public static extern long Bolt12InvoiceFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_optional_feature_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_optional_feature_bit")] public static extern long Bolt12InvoiceFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_required_custom_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_required_custom_bit")] public static extern long Bolt12InvoiceFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_optional_custom_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_optional_custom_bit")] public static extern long Bolt12InvoiceFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKBlindedHopFeatures BlindedHopFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_empty")] public static extern long BlindedHopFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice BlindedHopFeatures_le_flags(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_le_flags")] public static extern long BlindedHopFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool BlindedHopFeatures_supports_any_optional_bits(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_supports_any_optional_bits")] public static extern bool BlindedHopFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool BlindedHopFeatures_requires_unknown_bits_from(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, const struct LDKBlindedHopFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_requires_unknown_bits_from")] public static extern bool BlindedHopFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z BlindedHopFeatures_required_unknown_bits_from(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, const struct LDKBlindedHopFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_required_unknown_bits_from")] public static extern long BlindedHopFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool BlindedHopFeatures_requires_unknown_bits(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_requires_unknown_bits")] public static extern bool BlindedHopFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool BlindedHopFeatures_supports_unknown_bits(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_supports_unknown_bits")] public static extern bool BlindedHopFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_required_feature_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_required_feature_bit")] public static extern long BlindedHopFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_optional_feature_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_optional_feature_bit")] public static extern long BlindedHopFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_required_custom_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_required_custom_bit")] public static extern long BlindedHopFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_optional_custom_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BlindedHopFeatures_set_optional_custom_bit")] public static extern long BlindedHopFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKChannelTypeFeatures ChannelTypeFeatures_empty(void);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_empty")] public static extern long ChannelTypeFeatures_empty();
+       // MUST_USE_RES struct LDKu8slice ChannelTypeFeatures_le_flags(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_le_flags")] public static extern long ChannelTypeFeatures_le_flags(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_any_optional_bits(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_any_optional_bits")] public static extern bool ChannelTypeFeatures_supports_any_optional_bits(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_unknown_bits_from(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, const struct LDKChannelTypeFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_unknown_bits_from")] public static extern bool ChannelTypeFeatures_requires_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES struct LDKCVec_u64Z ChannelTypeFeatures_required_unknown_bits_from(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, const struct LDKChannelTypeFeatures *NONNULL_PTR other);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_required_unknown_bits_from")] public static extern long ChannelTypeFeatures_required_unknown_bits_from(long _this_arg, long _other);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_unknown_bits(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_unknown_bits")] public static extern bool ChannelTypeFeatures_requires_unknown_bits(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_unknown_bits(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_unknown_bits")] public static extern bool ChannelTypeFeatures_supports_unknown_bits(long _this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_required_feature_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_required_feature_bit")] public static extern long ChannelTypeFeatures_set_required_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_optional_feature_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_optional_feature_bit")] public static extern long ChannelTypeFeatures_set_optional_feature_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_required_custom_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_required_custom_bit")] public static extern long ChannelTypeFeatures_set_required_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_optional_custom_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_optional_custom_bit")] public static extern long ChannelTypeFeatures_set_optional_custom_bit(long _this_arg, long _bit);
+       // MUST_USE_RES struct LDKInitFeatures InitFeatures_clear_upfront_shutdown_script(struct LDKInitFeatures this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clear_upfront_shutdown_script")] public static extern long InitFeatures_clear_upfront_shutdown_script(long _this_arg);
+       // MUST_USE_RES struct LDKNodeFeatures NodeFeatures_clear_upfront_shutdown_script(struct LDKNodeFeatures this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clear_upfront_shutdown_script")] public static extern long NodeFeatures_clear_upfront_shutdown_script(long _this_arg);
+       // MUST_USE_RES struct LDKInitFeatures InitFeatures_clear_shutdown_anysegwit(struct LDKInitFeatures this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clear_shutdown_anysegwit")] public static extern long InitFeatures_clear_shutdown_anysegwit(long _this_arg);
+       // MUST_USE_RES struct LDKNodeFeatures NodeFeatures_clear_shutdown_anysegwit(struct LDKNodeFeatures this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clear_shutdown_anysegwit")] public static extern long NodeFeatures_clear_shutdown_anysegwit(long _this_arg);
+       // MUST_USE_RES struct LDKInitFeatures InitFeatures_clear_wumbo(struct LDKInitFeatures this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clear_wumbo")] public static extern long InitFeatures_clear_wumbo(long _this_arg);
+       // MUST_USE_RES struct LDKNodeFeatures NodeFeatures_clear_wumbo(struct LDKNodeFeatures this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clear_wumbo")] public static extern long NodeFeatures_clear_wumbo(long _this_arg);
+       // void InitFeatures_clear_scid_privacy(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clear_scid_privacy")] public static extern void InitFeatures_clear_scid_privacy(long _this_arg);
+       // void NodeFeatures_clear_scid_privacy(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clear_scid_privacy")] public static extern void NodeFeatures_clear_scid_privacy(long _this_arg);
+       // void ChannelTypeFeatures_clear_scid_privacy(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_clear_scid_privacy")] public static extern void ChannelTypeFeatures_clear_scid_privacy(long _this_arg);
+       // void InitFeatures_clear_anchors_zero_fee_htlc_tx(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clear_anchors_zero_fee_htlc_tx")] public static extern void InitFeatures_clear_anchors_zero_fee_htlc_tx(long _this_arg);
+       // void NodeFeatures_clear_anchors_zero_fee_htlc_tx(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clear_anchors_zero_fee_htlc_tx")] public static extern void NodeFeatures_clear_anchors_zero_fee_htlc_tx(long _this_arg);
+       // void ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx")] public static extern void ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(long _this_arg);
+       // void InitFeatures_clear_route_blinding(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_clear_route_blinding")] public static extern void InitFeatures_clear_route_blinding(long _this_arg);
+       // void NodeFeatures_clear_route_blinding(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_clear_route_blinding")] public static extern void NodeFeatures_clear_route_blinding(long _this_arg);
+       // void InitFeatures_set_data_loss_protect_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_data_loss_protect_optional")] public static extern void InitFeatures_set_data_loss_protect_optional(long _this_arg);
+       // void InitFeatures_set_data_loss_protect_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_data_loss_protect_required")] public static extern void InitFeatures_set_data_loss_protect_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_data_loss_protect(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_data_loss_protect")] public static extern bool InitFeatures_supports_data_loss_protect(long _this_arg);
+       // void NodeFeatures_set_data_loss_protect_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_data_loss_protect_optional")] public static extern void NodeFeatures_set_data_loss_protect_optional(long _this_arg);
+       // void NodeFeatures_set_data_loss_protect_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_data_loss_protect_required")] public static extern void NodeFeatures_set_data_loss_protect_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_data_loss_protect(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_data_loss_protect")] public static extern bool NodeFeatures_supports_data_loss_protect(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_data_loss_protect(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_data_loss_protect")] public static extern bool InitFeatures_requires_data_loss_protect(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_data_loss_protect(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_data_loss_protect")] public static extern bool NodeFeatures_requires_data_loss_protect(long _this_arg);
+       // void InitFeatures_set_initial_routing_sync_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_initial_routing_sync_optional")] public static extern void InitFeatures_set_initial_routing_sync_optional(long _this_arg);
+       // void InitFeatures_set_initial_routing_sync_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_initial_routing_sync_required")] public static extern void InitFeatures_set_initial_routing_sync_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_initial_routing_sync(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_initial_routing_sync")] public static extern bool InitFeatures_initial_routing_sync(long _this_arg);
+       // void InitFeatures_set_upfront_shutdown_script_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_upfront_shutdown_script_optional")] public static extern void InitFeatures_set_upfront_shutdown_script_optional(long _this_arg);
+       // void InitFeatures_set_upfront_shutdown_script_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_upfront_shutdown_script_required")] public static extern void InitFeatures_set_upfront_shutdown_script_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_upfront_shutdown_script(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_upfront_shutdown_script")] public static extern bool InitFeatures_supports_upfront_shutdown_script(long _this_arg);
+       // void NodeFeatures_set_upfront_shutdown_script_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_upfront_shutdown_script_optional")] public static extern void NodeFeatures_set_upfront_shutdown_script_optional(long _this_arg);
+       // void NodeFeatures_set_upfront_shutdown_script_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_upfront_shutdown_script_required")] public static extern void NodeFeatures_set_upfront_shutdown_script_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_upfront_shutdown_script(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_upfront_shutdown_script")] public static extern bool NodeFeatures_supports_upfront_shutdown_script(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_upfront_shutdown_script(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_upfront_shutdown_script")] public static extern bool InitFeatures_requires_upfront_shutdown_script(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_upfront_shutdown_script(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_upfront_shutdown_script")] public static extern bool NodeFeatures_requires_upfront_shutdown_script(long _this_arg);
+       // void InitFeatures_set_gossip_queries_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_gossip_queries_optional")] public static extern void InitFeatures_set_gossip_queries_optional(long _this_arg);
+       // void InitFeatures_set_gossip_queries_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_gossip_queries_required")] public static extern void InitFeatures_set_gossip_queries_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_gossip_queries(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_gossip_queries")] public static extern bool InitFeatures_supports_gossip_queries(long _this_arg);
+       // void NodeFeatures_set_gossip_queries_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_gossip_queries_optional")] public static extern void NodeFeatures_set_gossip_queries_optional(long _this_arg);
+       // void NodeFeatures_set_gossip_queries_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_gossip_queries_required")] public static extern void NodeFeatures_set_gossip_queries_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_gossip_queries(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_gossip_queries")] public static extern bool NodeFeatures_supports_gossip_queries(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_gossip_queries(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_gossip_queries")] public static extern bool InitFeatures_requires_gossip_queries(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_gossip_queries(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_gossip_queries")] public static extern bool NodeFeatures_requires_gossip_queries(long _this_arg);
+       // void InitFeatures_set_variable_length_onion_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_variable_length_onion_optional")] public static extern void InitFeatures_set_variable_length_onion_optional(long _this_arg);
+       // void InitFeatures_set_variable_length_onion_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_variable_length_onion_required")] public static extern void InitFeatures_set_variable_length_onion_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_variable_length_onion(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_variable_length_onion")] public static extern bool InitFeatures_supports_variable_length_onion(long _this_arg);
+       // void NodeFeatures_set_variable_length_onion_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_variable_length_onion_optional")] public static extern void NodeFeatures_set_variable_length_onion_optional(long _this_arg);
+       // void NodeFeatures_set_variable_length_onion_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_variable_length_onion_required")] public static extern void NodeFeatures_set_variable_length_onion_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_variable_length_onion(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_variable_length_onion")] public static extern bool NodeFeatures_supports_variable_length_onion(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_variable_length_onion_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_optional")] public static extern void Bolt11InvoiceFeatures_set_variable_length_onion_optional(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_variable_length_onion_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_variable_length_onion_required")] public static extern void Bolt11InvoiceFeatures_set_variable_length_onion_required(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_variable_length_onion(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_variable_length_onion")] public static extern bool Bolt11InvoiceFeatures_supports_variable_length_onion(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_variable_length_onion(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_variable_length_onion")] public static extern bool InitFeatures_requires_variable_length_onion(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_variable_length_onion(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_variable_length_onion")] public static extern bool NodeFeatures_requires_variable_length_onion(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_variable_length_onion(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_variable_length_onion")] public static extern bool Bolt11InvoiceFeatures_requires_variable_length_onion(long _this_arg);
+       // void InitFeatures_set_static_remote_key_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_static_remote_key_optional")] public static extern void InitFeatures_set_static_remote_key_optional(long _this_arg);
+       // void InitFeatures_set_static_remote_key_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_static_remote_key_required")] public static extern void InitFeatures_set_static_remote_key_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_static_remote_key(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_static_remote_key")] public static extern bool InitFeatures_supports_static_remote_key(long _this_arg);
+       // void NodeFeatures_set_static_remote_key_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_static_remote_key_optional")] public static extern void NodeFeatures_set_static_remote_key_optional(long _this_arg);
+       // void NodeFeatures_set_static_remote_key_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_static_remote_key_required")] public static extern void NodeFeatures_set_static_remote_key_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_static_remote_key(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_static_remote_key")] public static extern bool NodeFeatures_supports_static_remote_key(long _this_arg);
+       // void ChannelTypeFeatures_set_static_remote_key_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_static_remote_key_optional")] public static extern void ChannelTypeFeatures_set_static_remote_key_optional(long _this_arg);
+       // void ChannelTypeFeatures_set_static_remote_key_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_static_remote_key_required")] public static extern void ChannelTypeFeatures_set_static_remote_key_required(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_static_remote_key(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_static_remote_key")] public static extern bool ChannelTypeFeatures_supports_static_remote_key(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_static_remote_key(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_static_remote_key")] public static extern bool InitFeatures_requires_static_remote_key(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_static_remote_key(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_static_remote_key")] public static extern bool NodeFeatures_requires_static_remote_key(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_static_remote_key(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_static_remote_key")] public static extern bool ChannelTypeFeatures_requires_static_remote_key(long _this_arg);
+       // void InitFeatures_set_payment_secret_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_payment_secret_optional")] public static extern void InitFeatures_set_payment_secret_optional(long _this_arg);
+       // void InitFeatures_set_payment_secret_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_payment_secret_required")] public static extern void InitFeatures_set_payment_secret_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_payment_secret(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_payment_secret")] public static extern bool InitFeatures_supports_payment_secret(long _this_arg);
+       // void NodeFeatures_set_payment_secret_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_payment_secret_optional")] public static extern void NodeFeatures_set_payment_secret_optional(long _this_arg);
+       // void NodeFeatures_set_payment_secret_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_payment_secret_required")] public static extern void NodeFeatures_set_payment_secret_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_payment_secret(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_payment_secret")] public static extern bool NodeFeatures_supports_payment_secret(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_payment_secret_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_optional")] public static extern void Bolt11InvoiceFeatures_set_payment_secret_optional(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_payment_secret_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_secret_required")] public static extern void Bolt11InvoiceFeatures_set_payment_secret_required(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_payment_secret(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_payment_secret")] public static extern bool Bolt11InvoiceFeatures_supports_payment_secret(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_payment_secret(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_payment_secret")] public static extern bool InitFeatures_requires_payment_secret(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_payment_secret(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_payment_secret")] public static extern bool NodeFeatures_requires_payment_secret(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_payment_secret(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_payment_secret")] public static extern bool Bolt11InvoiceFeatures_requires_payment_secret(long _this_arg);
+       // void InitFeatures_set_basic_mpp_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_basic_mpp_optional")] public static extern void InitFeatures_set_basic_mpp_optional(long _this_arg);
+       // void InitFeatures_set_basic_mpp_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_basic_mpp_required")] public static extern void InitFeatures_set_basic_mpp_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_basic_mpp(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_basic_mpp")] public static extern bool InitFeatures_supports_basic_mpp(long _this_arg);
+       // void NodeFeatures_set_basic_mpp_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_basic_mpp_optional")] public static extern void NodeFeatures_set_basic_mpp_optional(long _this_arg);
+       // void NodeFeatures_set_basic_mpp_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_basic_mpp_required")] public static extern void NodeFeatures_set_basic_mpp_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_basic_mpp(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_basic_mpp")] public static extern bool NodeFeatures_supports_basic_mpp(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_basic_mpp_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_optional")] public static extern void Bolt11InvoiceFeatures_set_basic_mpp_optional(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_basic_mpp_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_basic_mpp_required")] public static extern void Bolt11InvoiceFeatures_set_basic_mpp_required(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_basic_mpp(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_basic_mpp")] public static extern bool Bolt11InvoiceFeatures_supports_basic_mpp(long _this_arg);
+       // void Bolt12InvoiceFeatures_set_basic_mpp_optional(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_optional")] public static extern void Bolt12InvoiceFeatures_set_basic_mpp_optional(long _this_arg);
+       // void Bolt12InvoiceFeatures_set_basic_mpp_required(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_set_basic_mpp_required")] public static extern void Bolt12InvoiceFeatures_set_basic_mpp_required(long _this_arg);
+       // MUST_USE_RES bool Bolt12InvoiceFeatures_supports_basic_mpp(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_supports_basic_mpp")] public static extern bool Bolt12InvoiceFeatures_supports_basic_mpp(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_basic_mpp(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_basic_mpp")] public static extern bool InitFeatures_requires_basic_mpp(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_basic_mpp(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_basic_mpp")] public static extern bool NodeFeatures_requires_basic_mpp(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_basic_mpp(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_basic_mpp")] public static extern bool Bolt11InvoiceFeatures_requires_basic_mpp(long _this_arg);
+       // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_basic_mpp(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt12InvoiceFeatures_requires_basic_mpp")] public static extern bool Bolt12InvoiceFeatures_requires_basic_mpp(long _this_arg);
+       // void InitFeatures_set_wumbo_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_wumbo_optional")] public static extern void InitFeatures_set_wumbo_optional(long _this_arg);
+       // void InitFeatures_set_wumbo_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_wumbo_required")] public static extern void InitFeatures_set_wumbo_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_wumbo(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_wumbo")] public static extern bool InitFeatures_supports_wumbo(long _this_arg);
+       // void NodeFeatures_set_wumbo_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_wumbo_optional")] public static extern void NodeFeatures_set_wumbo_optional(long _this_arg);
+       // void NodeFeatures_set_wumbo_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_wumbo_required")] public static extern void NodeFeatures_set_wumbo_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_wumbo(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_wumbo")] public static extern bool NodeFeatures_supports_wumbo(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_wumbo(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_wumbo")] public static extern bool InitFeatures_requires_wumbo(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_wumbo(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_wumbo")] public static extern bool NodeFeatures_requires_wumbo(long _this_arg);
+       // void InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional")] public static extern void InitFeatures_set_anchors_nonzero_fee_htlc_tx_optional(long _this_arg);
+       // void InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_nonzero_fee_htlc_tx_required")] public static extern void InitFeatures_set_anchors_nonzero_fee_htlc_tx_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_anchors_nonzero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_anchors_nonzero_fee_htlc_tx")] public static extern bool InitFeatures_supports_anchors_nonzero_fee_htlc_tx(long _this_arg);
+       // void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional")] public static extern void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(long _this_arg);
+       // void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required")] public static extern void NodeFeatures_set_anchors_nonzero_fee_htlc_tx_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_anchors_nonzero_fee_htlc_tx")] public static extern bool NodeFeatures_supports_anchors_nonzero_fee_htlc_tx(long _this_arg);
+       // void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional")] public static extern void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_optional(long _this_arg);
+       // void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required")] public static extern void ChannelTypeFeatures_set_anchors_nonzero_fee_htlc_tx_required(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_supports_anchors_nonzero_fee_htlc_tx(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_anchors_nonzero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_anchors_nonzero_fee_htlc_tx")] public static extern bool InitFeatures_requires_anchors_nonzero_fee_htlc_tx(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_anchors_nonzero_fee_htlc_tx")] public static extern bool NodeFeatures_requires_anchors_nonzero_fee_htlc_tx(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_requires_anchors_nonzero_fee_htlc_tx(long _this_arg);
+       // void InitFeatures_set_anchors_zero_fee_htlc_tx_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_optional")] public static extern void InitFeatures_set_anchors_zero_fee_htlc_tx_optional(long _this_arg);
+       // void InitFeatures_set_anchors_zero_fee_htlc_tx_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_anchors_zero_fee_htlc_tx_required")] public static extern void InitFeatures_set_anchors_zero_fee_htlc_tx_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_anchors_zero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_anchors_zero_fee_htlc_tx")] public static extern bool InitFeatures_supports_anchors_zero_fee_htlc_tx(long _this_arg);
+       // void NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_optional")] public static extern void NodeFeatures_set_anchors_zero_fee_htlc_tx_optional(long _this_arg);
+       // void NodeFeatures_set_anchors_zero_fee_htlc_tx_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_anchors_zero_fee_htlc_tx_required")] public static extern void NodeFeatures_set_anchors_zero_fee_htlc_tx_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_anchors_zero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_anchors_zero_fee_htlc_tx")] public static extern bool NodeFeatures_supports_anchors_zero_fee_htlc_tx(long _this_arg);
+       // void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional")] public static extern void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_optional(long _this_arg);
+       // void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required")] public static extern void ChannelTypeFeatures_set_anchors_zero_fee_htlc_tx_required(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_supports_anchors_zero_fee_htlc_tx(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_anchors_zero_fee_htlc_tx(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_anchors_zero_fee_htlc_tx")] public static extern bool InitFeatures_requires_anchors_zero_fee_htlc_tx(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_anchors_zero_fee_htlc_tx(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_anchors_zero_fee_htlc_tx")] public static extern bool NodeFeatures_requires_anchors_zero_fee_htlc_tx(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx")] public static extern bool ChannelTypeFeatures_requires_anchors_zero_fee_htlc_tx(long _this_arg);
+       // void InitFeatures_set_route_blinding_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_route_blinding_optional")] public static extern void InitFeatures_set_route_blinding_optional(long _this_arg);
+       // void InitFeatures_set_route_blinding_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_route_blinding_required")] public static extern void InitFeatures_set_route_blinding_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_route_blinding(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_route_blinding")] public static extern bool InitFeatures_supports_route_blinding(long _this_arg);
+       // void NodeFeatures_set_route_blinding_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_route_blinding_optional")] public static extern void NodeFeatures_set_route_blinding_optional(long _this_arg);
+       // void NodeFeatures_set_route_blinding_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_route_blinding_required")] public static extern void NodeFeatures_set_route_blinding_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_route_blinding(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_route_blinding")] public static extern bool NodeFeatures_supports_route_blinding(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_route_blinding(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_route_blinding")] public static extern bool InitFeatures_requires_route_blinding(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_route_blinding(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_route_blinding")] public static extern bool NodeFeatures_requires_route_blinding(long _this_arg);
+       // void InitFeatures_set_shutdown_any_segwit_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_shutdown_any_segwit_optional")] public static extern void InitFeatures_set_shutdown_any_segwit_optional(long _this_arg);
+       // void InitFeatures_set_shutdown_any_segwit_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_shutdown_any_segwit_required")] public static extern void InitFeatures_set_shutdown_any_segwit_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_shutdown_anysegwit(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_shutdown_anysegwit")] public static extern bool InitFeatures_supports_shutdown_anysegwit(long _this_arg);
+       // void NodeFeatures_set_shutdown_any_segwit_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_shutdown_any_segwit_optional")] public static extern void NodeFeatures_set_shutdown_any_segwit_optional(long _this_arg);
+       // void NodeFeatures_set_shutdown_any_segwit_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_shutdown_any_segwit_required")] public static extern void NodeFeatures_set_shutdown_any_segwit_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_shutdown_anysegwit(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_shutdown_anysegwit")] public static extern bool NodeFeatures_supports_shutdown_anysegwit(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_shutdown_anysegwit(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_shutdown_anysegwit")] public static extern bool InitFeatures_requires_shutdown_anysegwit(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_shutdown_anysegwit(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_shutdown_anysegwit")] public static extern bool NodeFeatures_requires_shutdown_anysegwit(long _this_arg);
+       // void InitFeatures_set_taproot_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_taproot_optional")] public static extern void InitFeatures_set_taproot_optional(long _this_arg);
+       // void InitFeatures_set_taproot_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_taproot_required")] public static extern void InitFeatures_set_taproot_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_taproot(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_taproot")] public static extern bool InitFeatures_supports_taproot(long _this_arg);
+       // void NodeFeatures_set_taproot_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_taproot_optional")] public static extern void NodeFeatures_set_taproot_optional(long _this_arg);
+       // void NodeFeatures_set_taproot_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_taproot_required")] public static extern void NodeFeatures_set_taproot_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_taproot(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_taproot")] public static extern bool NodeFeatures_supports_taproot(long _this_arg);
+       // void ChannelTypeFeatures_set_taproot_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_taproot_optional")] public static extern void ChannelTypeFeatures_set_taproot_optional(long _this_arg);
+       // void ChannelTypeFeatures_set_taproot_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_taproot_required")] public static extern void ChannelTypeFeatures_set_taproot_required(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_taproot(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_taproot")] public static extern bool ChannelTypeFeatures_supports_taproot(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_taproot(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_taproot")] public static extern bool InitFeatures_requires_taproot(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_taproot(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_taproot")] public static extern bool NodeFeatures_requires_taproot(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_taproot(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_taproot")] public static extern bool ChannelTypeFeatures_requires_taproot(long _this_arg);
+       // void InitFeatures_set_onion_messages_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_onion_messages_optional")] public static extern void InitFeatures_set_onion_messages_optional(long _this_arg);
+       // void InitFeatures_set_onion_messages_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_onion_messages_required")] public static extern void InitFeatures_set_onion_messages_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_onion_messages(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_onion_messages")] public static extern bool InitFeatures_supports_onion_messages(long _this_arg);
+       // void NodeFeatures_set_onion_messages_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_onion_messages_optional")] public static extern void NodeFeatures_set_onion_messages_optional(long _this_arg);
+       // void NodeFeatures_set_onion_messages_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_onion_messages_required")] public static extern void NodeFeatures_set_onion_messages_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_onion_messages(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_onion_messages")] public static extern bool NodeFeatures_supports_onion_messages(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_onion_messages(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_onion_messages")] public static extern bool InitFeatures_requires_onion_messages(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_onion_messages(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_onion_messages")] public static extern bool NodeFeatures_requires_onion_messages(long _this_arg);
+       // void InitFeatures_set_channel_type_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_channel_type_optional")] public static extern void InitFeatures_set_channel_type_optional(long _this_arg);
+       // void InitFeatures_set_channel_type_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_channel_type_required")] public static extern void InitFeatures_set_channel_type_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_channel_type(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_channel_type")] public static extern bool InitFeatures_supports_channel_type(long _this_arg);
+       // void NodeFeatures_set_channel_type_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_channel_type_optional")] public static extern void NodeFeatures_set_channel_type_optional(long _this_arg);
+       // void NodeFeatures_set_channel_type_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_channel_type_required")] public static extern void NodeFeatures_set_channel_type_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_channel_type(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_channel_type")] public static extern bool NodeFeatures_supports_channel_type(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_channel_type(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_channel_type")] public static extern bool InitFeatures_requires_channel_type(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_channel_type(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_channel_type")] public static extern bool NodeFeatures_requires_channel_type(long _this_arg);
+       // void InitFeatures_set_scid_privacy_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_scid_privacy_optional")] public static extern void InitFeatures_set_scid_privacy_optional(long _this_arg);
+       // void InitFeatures_set_scid_privacy_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_scid_privacy_required")] public static extern void InitFeatures_set_scid_privacy_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_scid_privacy(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_scid_privacy")] public static extern bool InitFeatures_supports_scid_privacy(long _this_arg);
+       // void NodeFeatures_set_scid_privacy_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_scid_privacy_optional")] public static extern void NodeFeatures_set_scid_privacy_optional(long _this_arg);
+       // void NodeFeatures_set_scid_privacy_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_scid_privacy_required")] public static extern void NodeFeatures_set_scid_privacy_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_scid_privacy(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_scid_privacy")] public static extern bool NodeFeatures_supports_scid_privacy(long _this_arg);
+       // void ChannelTypeFeatures_set_scid_privacy_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_scid_privacy_optional")] public static extern void ChannelTypeFeatures_set_scid_privacy_optional(long _this_arg);
+       // void ChannelTypeFeatures_set_scid_privacy_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_scid_privacy_required")] public static extern void ChannelTypeFeatures_set_scid_privacy_required(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_scid_privacy(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_scid_privacy")] public static extern bool ChannelTypeFeatures_supports_scid_privacy(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_scid_privacy(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_scid_privacy")] public static extern bool InitFeatures_requires_scid_privacy(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_scid_privacy(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_scid_privacy")] public static extern bool NodeFeatures_requires_scid_privacy(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_scid_privacy(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_scid_privacy")] public static extern bool ChannelTypeFeatures_requires_scid_privacy(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_payment_metadata_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_optional")] public static extern void Bolt11InvoiceFeatures_set_payment_metadata_optional(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_payment_metadata_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_payment_metadata_required")] public static extern void Bolt11InvoiceFeatures_set_payment_metadata_required(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_payment_metadata(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_payment_metadata")] public static extern bool Bolt11InvoiceFeatures_supports_payment_metadata(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_payment_metadata(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_payment_metadata")] public static extern bool Bolt11InvoiceFeatures_requires_payment_metadata(long _this_arg);
+       // void InitFeatures_set_zero_conf_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_zero_conf_optional")] public static extern void InitFeatures_set_zero_conf_optional(long _this_arg);
+       // void InitFeatures_set_zero_conf_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_zero_conf_required")] public static extern void InitFeatures_set_zero_conf_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_zero_conf(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_zero_conf")] public static extern bool InitFeatures_supports_zero_conf(long _this_arg);
+       // void NodeFeatures_set_zero_conf_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_zero_conf_optional")] public static extern void NodeFeatures_set_zero_conf_optional(long _this_arg);
+       // void NodeFeatures_set_zero_conf_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_zero_conf_required")] public static extern void NodeFeatures_set_zero_conf_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_zero_conf(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_zero_conf")] public static extern bool NodeFeatures_supports_zero_conf(long _this_arg);
+       // void ChannelTypeFeatures_set_zero_conf_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_zero_conf_optional")] public static extern void ChannelTypeFeatures_set_zero_conf_optional(long _this_arg);
+       // void ChannelTypeFeatures_set_zero_conf_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_set_zero_conf_required")] public static extern void ChannelTypeFeatures_set_zero_conf_required(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_zero_conf(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_supports_zero_conf")] public static extern bool ChannelTypeFeatures_supports_zero_conf(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_zero_conf(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_zero_conf")] public static extern bool InitFeatures_requires_zero_conf(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_zero_conf(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_zero_conf")] public static extern bool NodeFeatures_requires_zero_conf(long _this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_zero_conf(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_ChannelTypeFeatures_requires_zero_conf")] public static extern bool ChannelTypeFeatures_requires_zero_conf(long _this_arg);
+       // void NodeFeatures_set_keysend_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_keysend_optional")] public static extern void NodeFeatures_set_keysend_optional(long _this_arg);
+       // void NodeFeatures_set_keysend_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_keysend_required")] public static extern void NodeFeatures_set_keysend_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_keysend(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_keysend")] public static extern bool NodeFeatures_supports_keysend(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_keysend(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_keysend")] public static extern bool NodeFeatures_requires_keysend(long _this_arg);
+       // void InitFeatures_set_trampoline_routing_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_trampoline_routing_optional")] public static extern void InitFeatures_set_trampoline_routing_optional(long _this_arg);
+       // void InitFeatures_set_trampoline_routing_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_set_trampoline_routing_required")] public static extern void InitFeatures_set_trampoline_routing_required(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_trampoline_routing(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_supports_trampoline_routing")] public static extern bool InitFeatures_supports_trampoline_routing(long _this_arg);
+       // void NodeFeatures_set_trampoline_routing_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_trampoline_routing_optional")] public static extern void NodeFeatures_set_trampoline_routing_optional(long _this_arg);
+       // void NodeFeatures_set_trampoline_routing_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_set_trampoline_routing_required")] public static extern void NodeFeatures_set_trampoline_routing_required(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_trampoline_routing(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_supports_trampoline_routing")] public static extern bool NodeFeatures_supports_trampoline_routing(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_trampoline_routing_optional(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_optional")] public static extern void Bolt11InvoiceFeatures_set_trampoline_routing_optional(long _this_arg);
+       // void Bolt11InvoiceFeatures_set_trampoline_routing_required(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_set_trampoline_routing_required")] public static extern void Bolt11InvoiceFeatures_set_trampoline_routing_required(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_supports_trampoline_routing(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_supports_trampoline_routing")] public static extern bool Bolt11InvoiceFeatures_supports_trampoline_routing(long _this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_trampoline_routing(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_InitFeatures_requires_trampoline_routing")] public static extern bool InitFeatures_requires_trampoline_routing(long _this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_trampoline_routing(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_NodeFeatures_requires_trampoline_routing")] public static extern bool NodeFeatures_requires_trampoline_routing(long _this_arg);
+       // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_trampoline_routing(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceFeatures_requires_trampoline_routing")] public static extern bool Bolt11InvoiceFeatures_requires_trampoline_routing(long _this_arg);
+       // void RoutingFees_free(struct LDKRoutingFees this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_free")] public static extern void RoutingFees_free(long _this_obj);
+       // uint32_t RoutingFees_get_base_msat(const struct LDKRoutingFees *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_get_base_msat")] public static extern int RoutingFees_get_base_msat(long _this_ptr);
+       // void RoutingFees_set_base_msat(struct LDKRoutingFees *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_set_base_msat")] public static extern void RoutingFees_set_base_msat(long _this_ptr, int _val);
+       // uint32_t RoutingFees_get_proportional_millionths(const struct LDKRoutingFees *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_get_proportional_millionths")] public static extern int RoutingFees_get_proportional_millionths(long _this_ptr);
+       // void RoutingFees_set_proportional_millionths(struct LDKRoutingFees *NONNULL_PTR this_ptr, uint32_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_set_proportional_millionths")] public static extern void RoutingFees_set_proportional_millionths(long _this_ptr, int _val);
+       // MUST_USE_RES struct LDKRoutingFees RoutingFees_new(uint32_t base_msat_arg, uint32_t proportional_millionths_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_new")] public static extern long RoutingFees_new(int _base_msat_arg, int _proportional_millionths_arg);
+       // bool RoutingFees_eq(const struct LDKRoutingFees *NONNULL_PTR a, const struct LDKRoutingFees *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_eq")] public static extern bool RoutingFees_eq(long _a, long _b);
+       // uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_clone_ptr")] public static extern long RoutingFees_clone_ptr(long _arg);
+       // struct LDKRoutingFees RoutingFees_clone(const struct LDKRoutingFees *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_clone")] public static extern long RoutingFees_clone(long _orig);
+       // uint64_t RoutingFees_hash(const struct LDKRoutingFees *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RoutingFees_hash")] public static extern long RoutingFees_hash(long _o);
+       // void RouteHint_free(struct LDKRouteHint this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_free")] public static extern void RouteHint_free(long _this_obj);
+       // struct LDKCVec_RouteHintHopZ RouteHint_get_a(const struct LDKRouteHint *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_get_a")] public static extern long RouteHint_get_a(long _this_ptr);
+       // void RouteHint_set_a(struct LDKRouteHint *NONNULL_PTR this_ptr, struct LDKCVec_RouteHintHopZ val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_set_a")] public static extern void RouteHint_set_a(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKRouteHint RouteHint_new(struct LDKCVec_RouteHintHopZ a_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_new")] public static extern long RouteHint_new(long _a_arg);
+       // uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_clone_ptr")] public static extern long RouteHint_clone_ptr(long _arg);
+       // struct LDKRouteHint RouteHint_clone(const struct LDKRouteHint *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_clone")] public static extern long RouteHint_clone(long _orig);
+       // uint64_t RouteHint_hash(const struct LDKRouteHint *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_hash")] public static extern long RouteHint_hash(long _o);
+       // bool RouteHint_eq(const struct LDKRouteHint *NONNULL_PTR a, const struct LDKRouteHint *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHint_eq")] public static extern bool RouteHint_eq(long _a, long _b);
+       // void RouteHintHop_free(struct LDKRouteHintHop this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_free")] public static extern void RouteHintHop_free(long _this_obj);
+       // struct LDKPublicKey RouteHintHop_get_src_node_id(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_src_node_id")] public static extern long RouteHintHop_get_src_node_id(long _this_ptr);
+       // void RouteHintHop_set_src_node_id(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_src_node_id")] public static extern void RouteHintHop_set_src_node_id(long _this_ptr, long _val);
+       // uint64_t RouteHintHop_get_short_channel_id(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_short_channel_id")] public static extern long RouteHintHop_get_short_channel_id(long _this_ptr);
+       // void RouteHintHop_set_short_channel_id(struct LDKRouteHintHop *NONNULL_PTR this_ptr, uint64_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_short_channel_id")] public static extern void RouteHintHop_set_short_channel_id(long _this_ptr, long _val);
+       // struct LDKRoutingFees RouteHintHop_get_fees(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_fees")] public static extern long RouteHintHop_get_fees(long _this_ptr);
+       // void RouteHintHop_set_fees(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKRoutingFees val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_fees")] public static extern void RouteHintHop_set_fees(long _this_ptr, long _val);
+       // uint16_t RouteHintHop_get_cltv_expiry_delta(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_cltv_expiry_delta")] public static extern short RouteHintHop_get_cltv_expiry_delta(long _this_ptr);
+       // void RouteHintHop_set_cltv_expiry_delta(struct LDKRouteHintHop *NONNULL_PTR this_ptr, uint16_t val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_cltv_expiry_delta")] public static extern void RouteHintHop_set_cltv_expiry_delta(long _this_ptr, short _val);
+       // struct LDKCOption_u64Z RouteHintHop_get_htlc_minimum_msat(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_htlc_minimum_msat")] public static extern long RouteHintHop_get_htlc_minimum_msat(long _this_ptr);
+       // void RouteHintHop_set_htlc_minimum_msat(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_htlc_minimum_msat")] public static extern void RouteHintHop_set_htlc_minimum_msat(long _this_ptr, long _val);
+       // struct LDKCOption_u64Z RouteHintHop_get_htlc_maximum_msat(const struct LDKRouteHintHop *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_get_htlc_maximum_msat")] public static extern long RouteHintHop_get_htlc_maximum_msat(long _this_ptr);
+       // void RouteHintHop_set_htlc_maximum_msat(struct LDKRouteHintHop *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_set_htlc_maximum_msat")] public static extern void RouteHintHop_set_htlc_maximum_msat(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKRouteHintHop RouteHintHop_new(struct LDKPublicKey src_node_id_arg, uint64_t short_channel_id_arg, struct LDKRoutingFees fees_arg, uint16_t cltv_expiry_delta_arg, struct LDKCOption_u64Z htlc_minimum_msat_arg, struct LDKCOption_u64Z htlc_maximum_msat_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_new")] public static extern long RouteHintHop_new(long _src_node_id_arg, long _short_channel_id_arg, long _fees_arg, short _cltv_expiry_delta_arg, long _htlc_minimum_msat_arg, long _htlc_maximum_msat_arg);
+       // uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_clone_ptr")] public static extern long RouteHintHop_clone_ptr(long _arg);
+       // struct LDKRouteHintHop RouteHintHop_clone(const struct LDKRouteHintHop *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_clone")] public static extern long RouteHintHop_clone(long _orig);
+       // uint64_t RouteHintHop_hash(const struct LDKRouteHintHop *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_hash")] public static extern long RouteHintHop_hash(long _o);
+       // bool RouteHintHop_eq(const struct LDKRouteHintHop *NONNULL_PTR a, const struct LDKRouteHintHop *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_RouteHintHop_eq")] public static extern bool RouteHintHop_eq(long _a, long _b);
+       // void UntrustedString_free(struct LDKUntrustedString this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_free")] public static extern void UntrustedString_free(long _this_obj);
+       // struct LDKStr UntrustedString_get_a(const struct LDKUntrustedString *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_get_a")] public static extern long UntrustedString_get_a(long _this_ptr);
+       // void UntrustedString_set_a(struct LDKUntrustedString *NONNULL_PTR this_ptr, struct LDKStr val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_set_a")] public static extern void UntrustedString_set_a(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKUntrustedString UntrustedString_new(struct LDKStr a_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_new")] public static extern long UntrustedString_new(long _a_arg);
+       // uint64_t UntrustedString_clone_ptr(LDKUntrustedString *NONNULL_PTR arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_clone_ptr")] public static extern long UntrustedString_clone_ptr(long _arg);
+       // struct LDKUntrustedString UntrustedString_clone(const struct LDKUntrustedString *NONNULL_PTR orig);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_clone")] public static extern long UntrustedString_clone(long _orig);
+       // bool UntrustedString_eq(const struct LDKUntrustedString *NONNULL_PTR a, const struct LDKUntrustedString *NONNULL_PTR b);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_eq")] public static extern bool UntrustedString_eq(long _a, long _b);
+       // uint64_t UntrustedString_hash(const struct LDKUntrustedString *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_hash")] public static extern long UntrustedString_hash(long _o);
+       // struct LDKStr UntrustedString_to_str(const struct LDKUntrustedString *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_UntrustedString_to_str")] public static extern long UntrustedString_to_str(long _o);
+       // void PrintableString_free(struct LDKPrintableString this_obj);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_free")] public static extern void PrintableString_free(long _this_obj);
+       // struct LDKStr PrintableString_get_a(const struct LDKPrintableString *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_get_a")] public static extern long PrintableString_get_a(long _this_ptr);
+       // void PrintableString_set_a(struct LDKPrintableString *NONNULL_PTR this_ptr, struct LDKStr val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_set_a")] public static extern void PrintableString_set_a(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKPrintableString PrintableString_new(struct LDKStr a_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_new")] public static extern long PrintableString_new(long _a_arg);
+       // struct LDKStr PrintableString_to_str(const struct LDKPrintableString *NONNULL_PTR o);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_PrintableString_to_str")] public static extern long PrintableString_to_str(long _o);
        // void FilesystemStore_free(struct LDKFilesystemStore this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_FilesystemStore_free")] public static extern void FilesystemStore_free(long _this_obj);
        // MUST_USE_RES struct LDKFilesystemStore FilesystemStore_new(struct LDKStr data_dir);
@@ -14352,8 +15213,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_GossipSync_rapid")] public static extern long GossipSync_rapid(long _a);
        // struct LDKGossipSync GossipSync_none(void);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_GossipSync_none")] public static extern long GossipSync_none();
-       // MUST_USE_RES struct LDKBackgroundProcessor BackgroundProcessor_start(struct LDKPersister persister, struct LDKEventHandler event_handler, const struct LDKChainMonitor *NONNULL_PTR chain_monitor, const struct LDKChannelManager *NONNULL_PTR channel_manager, struct LDKGossipSync gossip_sync, const struct LDKPeerManager *NONNULL_PTR peer_manager, struct LDKLogger logger, struct LDKCOption_WriteableScoreZ scorer);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BackgroundProcessor_start")] public static extern long BackgroundProcessor_start(long _persister, long _event_handler, long _chain_monitor, long _channel_manager, long _gossip_sync, long _peer_manager, long _logger, long _scorer);
+       // MUST_USE_RES struct LDKBackgroundProcessor BackgroundProcessor_start(struct LDKPersister persister, struct LDKEventHandler event_handler, const struct LDKChainMonitor *NONNULL_PTR chain_monitor, const struct LDKChannelManager *NONNULL_PTR channel_manager, const struct LDKOnionMessenger *NONNULL_PTR onion_messenger, struct LDKGossipSync gossip_sync, const struct LDKPeerManager *NONNULL_PTR peer_manager, struct LDKLogger logger, struct LDKCOption_WriteableScoreZ scorer);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BackgroundProcessor_start")] public static extern long BackgroundProcessor_start(long _persister, long _event_handler, long _chain_monitor, long _channel_manager, long _onion_messenger, long _gossip_sync, long _peer_manager, long _logger, long _scorer);
        // MUST_USE_RES struct LDKCResult_NoneIOErrorZ BackgroundProcessor_join(struct LDKBackgroundProcessor this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_BackgroundProcessor_join")] public static extern long BackgroundProcessor_join(long _this_arg);
        // MUST_USE_RES struct LDKCResult_NoneIOErrorZ BackgroundProcessor_stop(struct LDKBackgroundProcessor this_arg);
@@ -14586,6 +15447,12 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Fallback_eq")] public static extern bool Fallback_eq(long _a, long _b);
        // void Bolt11InvoiceSignature_free(struct LDKBolt11InvoiceSignature this_obj);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceSignature_free")] public static extern void Bolt11InvoiceSignature_free(long _this_obj);
+       // struct LDKRecoverableSignature Bolt11InvoiceSignature_get_a(const struct LDKBolt11InvoiceSignature *NONNULL_PTR this_ptr);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceSignature_get_a")] public static extern long Bolt11InvoiceSignature_get_a(long _this_ptr);
+       // void Bolt11InvoiceSignature_set_a(struct LDKBolt11InvoiceSignature *NONNULL_PTR this_ptr, struct LDKRecoverableSignature val);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceSignature_set_a")] public static extern void Bolt11InvoiceSignature_set_a(long _this_ptr, long _val);
+       // MUST_USE_RES struct LDKBolt11InvoiceSignature Bolt11InvoiceSignature_new(struct LDKRecoverableSignature a_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceSignature_new")] public static extern long Bolt11InvoiceSignature_new(long _a_arg);
        // uint64_t Bolt11InvoiceSignature_clone_ptr(LDKBolt11InvoiceSignature *NONNULL_PTR arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Bolt11InvoiceSignature_clone_ptr")] public static extern long Bolt11InvoiceSignature_clone_ptr(long _arg);
        // struct LDKBolt11InvoiceSignature Bolt11InvoiceSignature_clone(const struct LDKBolt11InvoiceSignature *NONNULL_PTR orig);
@@ -14708,6 +15575,8 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Description_new")] public static extern long Description_new(long _description);
        // MUST_USE_RES struct LDKUntrustedString Description_into_inner(struct LDKDescription this_arg);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Description_into_inner")] public static extern long Description_into_inner(long _this_arg);
+       // MUST_USE_RES struct LDKUntrustedString Description_as_inner(const struct LDKDescription *NONNULL_PTR this_arg);
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Description_as_inner")] public static extern long Description_as_inner(long _this_arg);
        // struct LDKStr Description_to_str(const struct LDKDescription *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_Description_to_str")] public static extern long Description_to_str(long _o);
        // MUST_USE_RES struct LDKExpiryTime ExpiryTime_from_seconds(uint64_t seconds);
@@ -14780,24 +15649,6 @@ internal class bindings {
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignOrCreationError_eq")] public static extern bool SignOrCreationError_eq(long _a, long _b);
        // struct LDKStr SignOrCreationError_to_str(const struct LDKSignOrCreationError *NONNULL_PTR o);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SignOrCreationError_to_str")] public static extern long SignOrCreationError_to_str(long _o);
-       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ payment_parameters_from_zero_amount_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, uint64_t amount_msat);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_payment_parameters_from_zero_amount_invoice")] public static extern long payment_parameters_from_zero_amount_invoice(long _invoice, long _amount_msat);
-       // struct LDKCResult_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ payment_parameters_from_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_payment_parameters_from_invoice")] public static extern long payment_parameters_from_invoice(long _invoice);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(struct LDKCOption_u64Z amt_msat, struct LDKCOption_ThirtyTwoBytesZ payment_hash, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_phantom_invoice")] public static extern long create_phantom_invoice(long _amt_msat, long _payment_hash, long _description, int _invoice_expiry_delta_secs, long _phantom_route_hints, long _entropy_source, long _node_signer, long _logger, Currency _network, long _min_final_cltv_expiry_delta, long _duration_since_epoch);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(struct LDKCOption_u64Z amt_msat, struct LDKCOption_ThirtyTwoBytesZ payment_hash, uint32_t invoice_expiry_delta_secs, struct LDKSha256 description_hash, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_phantom_invoice_with_description_hash")] public static extern long create_phantom_invoice_with_description_hash(long _amt_msat, long _payment_hash, int _invoice_expiry_delta_secs, long _description_hash, long _phantom_route_hints, long _entropy_source, long _node_signer, long _logger, Currency _network, long _min_final_cltv_expiry_delta, long _duration_since_epoch);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager")] public static extern long create_invoice_from_channelmanager(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKSha256 description_hash, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_with_description_hash")] public static extern long create_invoice_from_channelmanager_with_description_hash(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description_hash, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKSha256 description_hash, uint64_t duration_since_epoch, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch")] public static extern long create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description_hash, long _duration_since_epoch, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint64_t duration_since_epoch, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch")] public static extern long create_invoice_from_channelmanager_and_duration_since_epoch(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description, long _duration_since_epoch, int _invoice_expiry_delta_secs, long _min_final_cltv_expiry_delta);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint64_t duration_since_epoch, uint32_t invoice_expiry_delta_secs, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash")] public static extern long create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(long _channelmanager, long _node_signer, long _logger, Currency _network, long _amt_msat, long _description, long _duration_since_epoch, int _invoice_expiry_delta_secs, long _payment_hash, long _min_final_cltv_expiry_delta);
        // struct LDKCResult_SiPrefixBolt11ParseErrorZ SiPrefix_from_str(struct LDKStr s);
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_SiPrefix_from_str")] public static extern long SiPrefix_from_str(long _s);
        // struct LDKCResult_Bolt11InvoiceParseOrSemanticErrorZ Bolt11Invoice_from_str(struct LDKStr s);
@@ -14887,175 +15738,168 @@ internal class bindings {
                                        Environment.Exit(44);
                                }
                                return ((LDKEcdsaChannelSigner)obj).sign_channel_announcement_with_funding_key(a);
-                       case 36:
+                       case 35:
                                if (!(obj is LDKNodeSigner)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKNodeSigner)obj).sign_bolt12_invoice_request(a);
-                       case 37:
+                       case 36:
                                if (!(obj is LDKNodeSigner)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKNodeSigner)obj).sign_bolt12_invoice(a);
-                       case 38:
+                       case 37:
                                if (!(obj is LDKNodeSigner)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKNodeSigner)obj).sign_gossip_message(a);
-                       case 41:
+                       case 40:
                                if (!(obj is LDKSignerProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignerProvider in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKSignerProvider)obj).read_chan_signer(a);
-                       case 42:
+                       case 41:
                                if (!(obj is LDKSignerProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignerProvider in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKSignerProvider)obj).get_destination_script(a);
-                       case 64:
+                       case 65:
                                if (!(obj is LDKPersister)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKPersister in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKPersister)obj).persist_manager(a);
-                       case 65:
+                       case 66:
                                if (!(obj is LDKPersister)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKPersister in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKPersister)obj).persist_graph(a);
-                       case 66:
+                       case 67:
                                if (!(obj is LDKPersister)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKPersister in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKPersister)obj).persist_scorer(a);
-                       case 114:
-                               if (!(obj is LDKChannelMessageHandler)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in l_l");
+                       case 79:
+                               if (!(obj is LDKEventHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKEventHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKChannelMessageHandler)obj).provided_init_features(a);
-                       case 116:
-                               if (!(obj is LDKOffersMessageHandler)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKOffersMessageHandler in l_l");
+                               return ((LDKEventHandler)obj).handle_event(a);
+                       case 115:
+                               if (!(obj is LDKChannelMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKOffersMessageHandler)obj).handle_message(a);
-                       case 118:
+                               return ((LDKChannelMessageHandler)obj).provided_init_features(a);
+                       case 122:
                                if (!(obj is LDKNodeIdLookUp)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeIdLookUp in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKNodeIdLookUp)obj).next_node_id(a);
-                       case 119:
+                       case 123:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_node_announcement(a);
-                       case 120:
+                       case 124:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_channel_announcement(a);
-                       case 121:
+                       case 125:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_channel_update(a);
-                       case 122:
+                       case 126:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).get_next_channel_announcement(a);
-                       case 123:
+                       case 127:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).get_next_node_announcement(a);
-                       case 131:
+                       case 135:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).provided_init_features(a);
-                       case 134:
+                       case 137:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKOnionMessageHandler)obj).next_onion_message_for_peer(a);
-                       case 139:
+                       case 142:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKOnionMessageHandler)obj).provided_init_features(a);
-                       case 144:
+                       case 149:
                                if (!(obj is LDKCustomMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageHandler in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKCustomMessageHandler)obj).provided_init_features(a);
-                       case 145:
-                               if (!(obj is LDKCustomOnionMessageHandler)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomOnionMessageHandler in l_l");
-                                       Console.Error.Flush();
-                                       Environment.Exit(44);
-                               }
-                               return ((LDKCustomOnionMessageHandler)obj).handle_custom_message(a);
-                       case 152:
+                       case 157:
                                if (!(obj is LDKSignBolt12InvoiceFn)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignBolt12InvoiceFn in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKSignBolt12InvoiceFn)obj).sign_invoice(a);
-                       case 153:
+                       case 158:
                                if (!(obj is LDKSignInvoiceRequestFn)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignInvoiceRequestFn in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKSignInvoiceRequestFn)obj).sign_invoice_request(a);
-                       case 156:
+                       case 161:
                                if (!(obj is LDKCoinSelectionSource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCoinSelectionSource in l_l");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKCoinSelectionSource)obj).sign_psbt(a);
-                       case 159:
+                       case 164:
                                if (!(obj is LDKWalletSource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWalletSource in l_l");
                                        Console.Error.Flush();
@@ -15107,77 +15951,77 @@ internal class bindings {
                                        Environment.Exit(44);
                                }
                                return ((LDKEcdsaChannelSigner)obj).sign_holder_anchor_input(a, b);
-                       case 26:
+                       case 25:
                                if (!(obj is LDKUtxoLookup)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKUtxoLookup in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKUtxoLookup)obj).get_utxo(a, b);
-                       case 27:
+                       case 26:
                                if (!(obj is LDKWatch)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWatch in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKWatch)obj).watch_channel(a, b);
-                       case 40:
+                       case 39:
                                if (!(obj is LDKSignerProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignerProvider in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKSignerProvider)obj).derive_channel_signer(a, b);
-                       case 46:
-                               if (!(obj is LDKMessageRouter)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKMessageRouter in l_ll");
-                                       Console.Error.Flush();
-                                       Environment.Exit(44);
-                               }
-                               return ((LDKMessageRouter)obj).create_blinded_paths(a, b);
-                       case 62:
+                       case 63:
                                if (!(obj is LDKKVStore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKKVStore in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKKVStore)obj).list(a, b);
-                       case 125:
+                       case 119:
+                               if (!(obj is LDKAsyncPaymentsMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKAsyncPaymentsMessageHandler in l_ll");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKAsyncPaymentsMessageHandler)obj).held_htlc_available(a, b);
+                       case 129:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_reply_channel_range(a, b);
-                       case 126:
+                       case 130:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_reply_short_channel_ids_end(a, b);
-                       case 127:
+                       case 131:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_query_channel_range(a, b);
-                       case 128:
+                       case 132:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).handle_query_short_channel_ids(a, b);
-                       case 141:
+                       case 144:
                                if (!(obj is LDKCustomMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageHandler in l_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKCustomMessageHandler)obj).handle_custom_message(a, b);
-                       case 146:
+                       case 151:
                                if (!(obj is LDKCustomOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomOnionMessageHandler in l_ll");
                                        Console.Error.Flush();
@@ -15215,56 +16059,49 @@ internal class bindings {
                                        Environment.Exit(44);
                                }
                                return ((LDKChannelSigner)obj).channel_keys_id();
-                       case 15:
-                               if (!(obj is LDKWriteableEcdsaChannelSigner)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKWriteableEcdsaChannelSigner in l_");
-                                       Console.Error.Flush();
-                                       Environment.Exit(44);
-                               }
-                               return ((LDKWriteableEcdsaChannelSigner)obj).write();
-                       case 22:
+                       case 21:
                                if (!(obj is LDKLockableScore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKLockableScore in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKLockableScore)obj).read_lock();
-                       case 23:
+                       case 22:
                                if (!(obj is LDKLockableScore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKLockableScore in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKLockableScore)obj).write_lock();
-                       case 24:
+                       case 23:
                                if (!(obj is LDKWriteableScore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWriteableScore in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKWriteableScore)obj).write();
-                       case 29:
+                       case 28:
                                if (!(obj is LDKWatch)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWatch in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKWatch)obj).release_pending_monitor_events();
-                       case 31:
+                       case 30:
                                if (!(obj is LDKEntropySource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKEntropySource in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKEntropySource)obj).get_secure_random_bytes();
-                       case 32:
+                       case 31:
                                if (!(obj is LDKNodeSigner)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKNodeSigner)obj).get_inbound_payment_key_material();
-                       case 43:
+                       case 42:
                                if (!(obj is LDKSignerProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignerProvider in l_");
                                        Console.Error.Flush();
@@ -15298,120 +16135,127 @@ internal class bindings {
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKOnionMessageContents)obj).write();
+                               return ((LDKOnionMessageContents)obj).msg_type();
                        case 55:
+                               if (!(obj is LDKOnionMessageContents)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageContents in l_");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKOnionMessageContents)obj).write();
+                       case 56:
                                if (!(obj is LDKOnionMessageContents)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageContents in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKOnionMessageContents)obj).debug_str();
-                       case 58:
+                       case 59:
                                if (!(obj is LDKChangeDestinationSource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChangeDestinationSource in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKChangeDestinationSource)obj).get_change_destination_script();
-                       case 76:
+                       case 77:
                                if (!(obj is LDKConfirm)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKConfirm in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKConfirm)obj).get_relevant_txids();
-                       case 80:
+                       case 81:
                                if (!(obj is LDKMessageSendEventsProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKMessageSendEventsProvider in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKMessageSendEventsProvider)obj).get_and_clear_pending_msg_events();
-                       case 113:
+                       case 114:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKChannelMessageHandler)obj).provided_node_features();
-                       case 115:
+                       case 116:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKChannelMessageHandler)obj).get_chain_hashes();
-                       case 117:
+                       case 118:
                                if (!(obj is LDKOffersMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOffersMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKOffersMessageHandler)obj).release_pending_messages();
-                       case 130:
-                               if (!(obj is LDKRoutingMessageHandler)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_");
+                       case 121:
+                               if (!(obj is LDKAsyncPaymentsMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKAsyncPaymentsMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKRoutingMessageHandler)obj).provided_node_features();
-                       case 132:
-                               if (!(obj is LDKOnionMessageHandler)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in l_");
+                               return ((LDKAsyncPaymentsMessageHandler)obj).release_pending_messages();
+                       case 134:
+                               if (!(obj is LDKRoutingMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKOnionMessageHandler)obj).get_and_clear_connections_needed();
-                       case 138:
+                               return ((LDKRoutingMessageHandler)obj).provided_node_features();
+                       case 141:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKOnionMessageHandler)obj).provided_node_features();
-                       case 142:
+                       case 145:
                                if (!(obj is LDKCustomMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKCustomMessageHandler)obj).get_and_clear_pending_msg();
-                       case 143:
+                       case 148:
                                if (!(obj is LDKCustomMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKCustomMessageHandler)obj).provided_node_features();
-                       case 147:
+                       case 152:
                                if (!(obj is LDKCustomOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomOnionMessageHandler in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKCustomOnionMessageHandler)obj).release_pending_custom_messages();
-                       case 151:
+                       case 156:
                                if (!(obj is LDKSocketDescriptor)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSocketDescriptor in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKSocketDescriptor)obj).hash();
-                       case 154:
+                       case 159:
                                if (!(obj is LDKScore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScore in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKScore)obj).write();
-                       case 157:
+                       case 162:
                                if (!(obj is LDKWalletSource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWalletSource in l_");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKWalletSource)obj).list_confirmed_utxos();
-                       case 158:
+                       case 163:
                                if (!(obj is LDKWalletSource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWalletSource in l_");
                                        Console.Error.Flush();
@@ -15450,7 +16294,7 @@ internal class bindings {
                                }
                                ((LDKChannelSigner)obj).provide_channel_parameters(a);
                                return;
-                       case 21:
+                       case 20:
                                if (!(obj is LDKScoreUpdate)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScoreUpdate in void_l");
                                        Console.Error.Flush();
@@ -15458,7 +16302,7 @@ internal class bindings {
                                }
                                ((LDKScoreUpdate)obj).time_passed(a);
                                return;
-                       case 25:
+                       case 24:
                                if (!(obj is LDKLogger)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKLogger in void_l");
                                        Console.Error.Flush();
@@ -15466,7 +16310,7 @@ internal class bindings {
                                }
                                ((LDKLogger)obj).log(a);
                                return;
-                       case 30:
+                       case 29:
                                if (!(obj is LDKBroadcasterInterface)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKBroadcasterInterface in void_l");
                                        Console.Error.Flush();
@@ -15474,7 +16318,7 @@ internal class bindings {
                                }
                                ((LDKBroadcasterInterface)obj).broadcast_transactions(a);
                                return;
-                       case 57:
+                       case 58:
                                if (!(obj is LDKFilter)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKFilter in void_l");
                                        Console.Error.Flush();
@@ -15482,7 +16326,7 @@ internal class bindings {
                                }
                                ((LDKFilter)obj).register_output(a);
                                return;
-                       case 69:
+                       case 70:
                                if (!(obj is LDKPersist)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKPersist in void_l");
                                        Console.Error.Flush();
@@ -15490,7 +16334,7 @@ internal class bindings {
                                }
                                ((LDKPersist)obj).archive_persisted_channel(a);
                                return;
-                       case 74:
+                       case 75:
                                if (!(obj is LDKConfirm)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKConfirm in void_l");
                                        Console.Error.Flush();
@@ -15498,15 +16342,7 @@ internal class bindings {
                                }
                                ((LDKConfirm)obj).transaction_unconfirmed(a);
                                return;
-                       case 78:
-                               if (!(obj is LDKEventHandler)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKEventHandler in void_l");
-                                       Console.Error.Flush();
-                                       Environment.Exit(44);
-                               }
-                               ((LDKEventHandler)obj).handle_event(a);
-                               return;
-                       case 79:
+                       case 80:
                                if (!(obj is LDKEventsProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKEventsProvider in void_l");
                                        Console.Error.Flush();
@@ -15514,7 +16350,7 @@ internal class bindings {
                                }
                                ((LDKEventsProvider)obj).process_pending_events(a);
                                return;
-                       case 108:
+                       case 109:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_l");
                                        Console.Error.Flush();
@@ -15522,7 +16358,15 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).peer_disconnected(a);
                                return;
-                       case 136:
+                       case 120:
+                               if (!(obj is LDKAsyncPaymentsMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKAsyncPaymentsMessageHandler in void_l");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               ((LDKAsyncPaymentsMessageHandler)obj).release_held_htlc(a);
+                               return;
+                       case 139:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in void_l");
                                        Console.Error.Flush();
@@ -15530,6 +16374,14 @@ internal class bindings {
                                }
                                ((LDKOnionMessageHandler)obj).peer_disconnected(a);
                                return;
+                       case 146:
+                               if (!(obj is LDKCustomMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageHandler in void_l");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               ((LDKCustomMessageHandler)obj).peer_disconnected(a);
+                               return;
                        default:
                                Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in void_l");
                                Console.Error.Flush();
@@ -15568,27 +16420,55 @@ internal class bindings {
                                        Environment.Exit(44);
                                }
                                return ((LDKEcdsaChannelSigner)obj).sign_holder_htlc_transaction(a, b, c);
-                       case 16:
+                       case 15:
                                if (!(obj is LDKScoreLookUp)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScoreLookUp in l_lll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKScoreLookUp)obj).channel_penalty_msat(a, b, c);
-                       case 45:
+                       case 44:
                                if (!(obj is LDKMessageRouter)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKMessageRouter in l_lll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKMessageRouter)obj).find_path(a, b, c);
-                       case 59:
+                       case 45:
+                               if (!(obj is LDKMessageRouter)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKMessageRouter in l_lll");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKMessageRouter)obj).create_blinded_paths(a, b, c);
+                       case 46:
+                               if (!(obj is LDKMessageRouter)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKMessageRouter in l_lll");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKMessageRouter)obj).create_compact_blinded_paths(a, b, c);
+                       case 60:
                                if (!(obj is LDKKVStore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKKVStore in l_lll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKKVStore)obj).read(a, b, c);
+                       case 117:
+                               if (!(obj is LDKOffersMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKOffersMessageHandler in l_lll");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKOffersMessageHandler)obj).handle_message(a, b, c);
+                       case 150:
+                               if (!(obj is LDKCustomOnionMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomOnionMessageHandler in l_lll");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKCustomOnionMessageHandler)obj).handle_custom_message(a, b, c);
                        default:
                                Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in l_lll");
                                Console.Error.Flush();
@@ -15634,7 +16514,7 @@ internal class bindings {
                                        Environment.Exit(44);
                                }
                                return ((LDKRouter)obj).create_blinded_payment_paths(a, b, c, d);
-                       case 60:
+                       case 61:
                                if (!(obj is LDKKVStore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKKVStore in l_llll");
                                        Console.Error.Flush();
@@ -15703,7 +16583,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 17:
+                       case 16:
                                if (!(obj is LDKScoreUpdate)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScoreUpdate in void_lll");
                                        Console.Error.Flush();
@@ -15711,7 +16591,7 @@ internal class bindings {
                                }
                                ((LDKScoreUpdate)obj).payment_path_failed(a, b, c);
                                return;
-                       case 19:
+                       case 18:
                                if (!(obj is LDKScoreUpdate)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScoreUpdate in void_lll");
                                        Console.Error.Flush();
@@ -15743,7 +16623,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 18:
+                       case 17:
                                if (!(obj is LDKScoreUpdate)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScoreUpdate in void_ll");
                                        Console.Error.Flush();
@@ -15751,7 +16631,7 @@ internal class bindings {
                                }
                                ((LDKScoreUpdate)obj).payment_path_successful(a, b);
                                return;
-                       case 20:
+                       case 19:
                                if (!(obj is LDKScoreUpdate)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKScoreUpdate in void_ll");
                                        Console.Error.Flush();
@@ -15759,7 +16639,7 @@ internal class bindings {
                                }
                                ((LDKScoreUpdate)obj).probe_successful(a, b);
                                return;
-                       case 56:
+                       case 57:
                                if (!(obj is LDKFilter)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKFilter in void_ll");
                                        Console.Error.Flush();
@@ -15767,7 +16647,7 @@ internal class bindings {
                                }
                                ((LDKFilter)obj).register_tx(a, b);
                                return;
-                       case 81:
+                       case 82:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15775,7 +16655,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_open_channel(a, b);
                                return;
-                       case 82:
+                       case 83:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15783,7 +16663,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_open_channel_v2(a, b);
                                return;
-                       case 83:
+                       case 84:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15791,7 +16671,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_accept_channel(a, b);
                                return;
-                       case 84:
+                       case 85:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15799,7 +16679,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_accept_channel_v2(a, b);
                                return;
-                       case 85:
+                       case 86:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15807,7 +16687,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_funding_created(a, b);
                                return;
-                       case 86:
+                       case 87:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15815,7 +16695,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_funding_signed(a, b);
                                return;
-                       case 87:
+                       case 88:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15823,7 +16703,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_channel_ready(a, b);
                                return;
-                       case 88:
+                       case 89:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15831,7 +16711,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_shutdown(a, b);
                                return;
-                       case 89:
+                       case 90:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15839,7 +16719,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_closing_signed(a, b);
                                return;
-                       case 90:
+                       case 91:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15847,7 +16727,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_stfu(a, b);
                                return;
-                       case 91:
+                       case 92:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15855,7 +16735,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_add_input(a, b);
                                return;
-                       case 92:
+                       case 93:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15863,7 +16743,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_add_output(a, b);
                                return;
-                       case 93:
+                       case 94:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15871,7 +16751,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_remove_input(a, b);
                                return;
-                       case 94:
+                       case 95:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15879,7 +16759,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_remove_output(a, b);
                                return;
-                       case 95:
+                       case 96:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15887,7 +16767,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_complete(a, b);
                                return;
-                       case 96:
+                       case 97:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15895,7 +16775,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_signatures(a, b);
                                return;
-                       case 97:
+                       case 98:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15903,7 +16783,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_init_rbf(a, b);
                                return;
-                       case 98:
+                       case 99:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15911,7 +16791,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_ack_rbf(a, b);
                                return;
-                       case 99:
+                       case 100:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15919,7 +16799,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_tx_abort(a, b);
                                return;
-                       case 100:
+                       case 101:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15927,7 +16807,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_update_add_htlc(a, b);
                                return;
-                       case 101:
+                       case 102:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15935,7 +16815,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_update_fulfill_htlc(a, b);
                                return;
-                       case 102:
+                       case 103:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15943,7 +16823,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_update_fail_htlc(a, b);
                                return;
-                       case 103:
+                       case 104:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15951,7 +16831,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_update_fail_malformed_htlc(a, b);
                                return;
-                       case 104:
+                       case 105:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15959,7 +16839,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_commitment_signed(a, b);
                                return;
-                       case 105:
+                       case 106:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15967,7 +16847,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_revoke_and_ack(a, b);
                                return;
-                       case 106:
+                       case 107:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15975,7 +16855,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_update_fee(a, b);
                                return;
-                       case 107:
+                       case 108:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15983,7 +16863,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_announcement_signatures(a, b);
                                return;
-                       case 110:
+                       case 111:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15991,7 +16871,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_channel_reestablish(a, b);
                                return;
-                       case 111:
+                       case 112:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -15999,7 +16879,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_channel_update(a, b);
                                return;
-                       case 112:
+                       case 113:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -16007,7 +16887,7 @@ internal class bindings {
                                }
                                ((LDKChannelMessageHandler)obj).handle_error(a, b);
                                return;
-                       case 133:
+                       case 136:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in void_ll");
                                        Console.Error.Flush();
@@ -16039,13 +16919,20 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 28:
+                       case 27:
                                if (!(obj is LDKWatch)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKWatch in ChannelMonitorUpdateStatus_ll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKWatch)obj).update_channel(a, b);
+                       case 68:
+                               if (!(obj is LDKPersist)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKPersist in ChannelMonitorUpdateStatus_ll");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKPersist)obj).persist_new_channel(a, b);
                        default:
                                Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in ChannelMonitorUpdateStatus_ll");
                                Console.Error.Flush();
@@ -16070,7 +16957,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 33:
+                       case 32:
                                if (!(obj is LDKNodeSigner)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_Recipient");
                                        Console.Error.Flush();
@@ -16101,7 +16988,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 34:
+                       case 33:
                                if (!(obj is LDKNodeSigner)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_Recipientll");
                                        Console.Error.Flush();
@@ -16119,37 +17006,37 @@ internal class bindings {
        static l_Recipientll_callback l_Recipientll_callback_inst = c_callback_l_Recipientll;
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_register_l_Recipientll_invoker")] public static extern int register_l_Recipientll_invoker(l_Recipientll_callback callee);
        static int _run_l_Recipientll_registration = register_l_Recipientll_invoker(l_Recipientll_callback_inst);
-       static long c_callback_l_llRecipient(int obj_ptr, int fn_id, long a, long b, Recipient c) {
+       static long c_callback_l_lRecipient(int obj_ptr, int fn_id, long a, Recipient b) {
                if (obj_ptr >= js_objs.Count) {
-                       Console.Error.WriteLine("Got function call on unknown/free'd JS object in l_llRecipient");
+                       Console.Error.WriteLine("Got function call on unknown/free'd JS object in l_lRecipient");
                        Console.Error.Flush();
                        Environment.Exit(42);
                }
                object obj = js_objs[obj_ptr].Target;
                if (obj == null) {
-                       Console.Error.WriteLine("Got function call on GC'd JS object in l_llRecipient");
+                       Console.Error.WriteLine("Got function call on GC'd JS object in l_lRecipient");
                        Console.Error.Flush();
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 35:
+                       case 34:
                                if (!(obj is LDKNodeSigner)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_llRecipient");
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKNodeSigner in l_lRecipient");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKNodeSigner)obj).sign_invoice(a, b, c);
+                               return ((LDKNodeSigner)obj).sign_invoice(a, b);
                        default:
-                               Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in l_llRecipient");
+                               Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in l_lRecipient");
                                Console.Error.Flush();
                                Environment.Exit(45);
                                return 0;
                }
        }
-       public delegate long l_llRecipient_callback(int obj_ptr, int fn_id, long a, long b, Recipient c);
-       static l_llRecipient_callback l_llRecipient_callback_inst = c_callback_l_llRecipient;
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_register_l_llRecipient_invoker")] public static extern int register_l_llRecipient_invoker(l_llRecipient_callback callee);
-       static int _run_l_llRecipient_registration = register_l_llRecipient_invoker(l_llRecipient_callback_inst);
+       public delegate long l_lRecipient_callback(int obj_ptr, int fn_id, long a, Recipient b);
+       static l_lRecipient_callback l_lRecipient_callback_inst = c_callback_l_lRecipient;
+       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_register_l_lRecipient_invoker")] public static extern int register_l_lRecipient_invoker(l_lRecipient_callback callee);
+       static int _run_l_lRecipient_registration = register_l_lRecipient_invoker(l_lRecipient_callback_inst);
        static long c_callback_l_bll(int obj_ptr, int fn_id, bool a, long b, long c) {
                if (obj_ptr >= js_objs.Count) {
                        Console.Error.WriteLine("Got function call on unknown/free'd JS object in l_bll");
@@ -16163,7 +17050,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 39:
+                       case 38:
                                if (!(obj is LDKSignerProvider)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSignerProvider in l_bll");
                                        Console.Error.Flush();
@@ -16194,7 +17081,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 44:
+                       case 43:
                                if (!(obj is LDKFeeEstimator)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKFeeEstimator in i_ConfirmationTarget");
                                        Console.Error.Flush();
@@ -16287,7 +17174,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 61:
+                       case 62:
                                if (!(obj is LDKKVStore)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKKVStore in l_lllb");
                                        Console.Error.Flush();
@@ -16318,7 +17205,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 63:
+                       case 64:
                                if (!(obj is LDKOutputSpender)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOutputSpender in l_lllil");
                                        Console.Error.Flush();
@@ -16349,13 +17236,13 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 67:
+                       case 69:
                                if (!(obj is LDKPersist)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKPersist in ChannelMonitorUpdateStatus_lll");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
-                               return ((LDKPersist)obj).persist_new_channel(a, b, c);
+                               return ((LDKPersist)obj).update_persisted_channel(a, b, c);
                        default:
                                Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in ChannelMonitorUpdateStatus_lll");
                                Console.Error.Flush();
@@ -16367,37 +17254,6 @@ internal class bindings {
        static ChannelMonitorUpdateStatus_lll_callback ChannelMonitorUpdateStatus_lll_callback_inst = c_callback_ChannelMonitorUpdateStatus_lll;
        [DllImport ("ldkcsharp", EntryPoint="CS_LDK_register_ChannelMonitorUpdateStatus_lll_invoker")] public static extern int register_ChannelMonitorUpdateStatus_lll_invoker(ChannelMonitorUpdateStatus_lll_callback callee);
        static int _run_ChannelMonitorUpdateStatus_lll_registration = register_ChannelMonitorUpdateStatus_lll_invoker(ChannelMonitorUpdateStatus_lll_callback_inst);
-       static ChannelMonitorUpdateStatus c_callback_ChannelMonitorUpdateStatus_llll(int obj_ptr, int fn_id, long a, long b, long c, long d) {
-               if (obj_ptr >= js_objs.Count) {
-                       Console.Error.WriteLine("Got function call on unknown/free'd JS object in ChannelMonitorUpdateStatus_llll");
-                       Console.Error.Flush();
-                       Environment.Exit(42);
-               }
-               object obj = js_objs[obj_ptr].Target;
-               if (obj == null) {
-                       Console.Error.WriteLine("Got function call on GC'd JS object in ChannelMonitorUpdateStatus_llll");
-                       Console.Error.Flush();
-                       Environment.Exit(43);
-               }
-               switch (fn_id) {
-                       case 68:
-                               if (!(obj is LDKPersist)) {
-                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKPersist in ChannelMonitorUpdateStatus_llll");
-                                       Console.Error.Flush();
-                                       Environment.Exit(44);
-                               }
-                               return ((LDKPersist)obj).update_persisted_channel(a, b, c, d);
-                       default:
-                               Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in ChannelMonitorUpdateStatus_llll");
-                               Console.Error.Flush();
-                               Environment.Exit(45);
-                               return 0;
-               }
-       }
-       public delegate ChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_llll_callback(int obj_ptr, int fn_id, long a, long b, long c, long d);
-       static ChannelMonitorUpdateStatus_llll_callback ChannelMonitorUpdateStatus_llll_callback_inst = c_callback_ChannelMonitorUpdateStatus_llll;
-       [DllImport ("ldkcsharp", EntryPoint="CS_LDK_register_ChannelMonitorUpdateStatus_llll_invoker")] public static extern int register_ChannelMonitorUpdateStatus_llll_invoker(ChannelMonitorUpdateStatus_llll_callback callee);
-       static int _run_ChannelMonitorUpdateStatus_llll_registration = register_ChannelMonitorUpdateStatus_llll_invoker(ChannelMonitorUpdateStatus_llll_callback_inst);
        static void c_callback_void_lli(int obj_ptr, int fn_id, long a, long b, int c) {
                if (obj_ptr >= js_objs.Count) {
                        Console.Error.WriteLine("Got function call on unknown/free'd JS object in void_lli");
@@ -16411,7 +17267,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 70:
+                       case 71:
                                if (!(obj is LDKListen)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKListen in void_lli");
                                        Console.Error.Flush();
@@ -16419,7 +17275,7 @@ internal class bindings {
                                }
                                ((LDKListen)obj).filtered_block_connected(a, b, c);
                                return;
-                       case 73:
+                       case 74:
                                if (!(obj is LDKConfirm)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKConfirm in void_lli");
                                        Console.Error.Flush();
@@ -16451,7 +17307,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 71:
+                       case 72:
                                if (!(obj is LDKListen)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKListen in void_li");
                                        Console.Error.Flush();
@@ -16459,7 +17315,7 @@ internal class bindings {
                                }
                                ((LDKListen)obj).block_connected(a, b);
                                return;
-                       case 72:
+                       case 73:
                                if (!(obj is LDKListen)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKListen in void_li");
                                        Console.Error.Flush();
@@ -16467,7 +17323,7 @@ internal class bindings {
                                }
                                ((LDKListen)obj).block_disconnected(a, b);
                                return;
-                       case 75:
+                       case 76:
                                if (!(obj is LDKConfirm)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKConfirm in void_li");
                                        Console.Error.Flush();
@@ -16499,7 +17355,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 77:
+                       case 78:
                                if (!(obj is LDKFutureCallback)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKFutureCallback in void_");
                                        Console.Error.Flush();
@@ -16507,7 +17363,7 @@ internal class bindings {
                                }
                                ((LDKFutureCallback)obj).call();
                                return;
-                       case 137:
+                       case 140:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in void_");
                                        Console.Error.Flush();
@@ -16515,7 +17371,7 @@ internal class bindings {
                                }
                                ((LDKOnionMessageHandler)obj).timer_tick_occurred();
                                return;
-                       case 149:
+                       case 154:
                                if (!(obj is LDKSocketDescriptor)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSocketDescriptor in void_");
                                        Console.Error.Flush();
@@ -16547,27 +17403,34 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 109:
+                       case 110:
                                if (!(obj is LDKChannelMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKChannelMessageHandler in l_llb");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKChannelMessageHandler)obj).peer_connected(a, b, c);
-                       case 124:
+                       case 128:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in l_llb");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKRoutingMessageHandler)obj).peer_connected(a, b, c);
-                       case 135:
+                       case 138:
                                if (!(obj is LDKOnionMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKOnionMessageHandler in l_llb");
                                        Console.Error.Flush();
                                        Environment.Exit(44);
                                }
                                return ((LDKOnionMessageHandler)obj).peer_connected(a, b, c);
+                       case 147:
+                               if (!(obj is LDKCustomMessageHandler)) {
+                                       Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageHandler in l_llb");
+                                       Console.Error.Flush();
+                                       Environment.Exit(44);
+                               }
+                               return ((LDKCustomMessageHandler)obj).peer_connected(a, b, c);
                        default:
                                Console.Error.WriteLine("Got unknown function call with id " + fn_id + " from C in l_llb");
                                Console.Error.Flush();
@@ -16592,7 +17455,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 129:
+                       case 133:
                                if (!(obj is LDKRoutingMessageHandler)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKRoutingMessageHandler in b_");
                                        Console.Error.Flush();
@@ -16623,7 +17486,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 140:
+                       case 143:
                                if (!(obj is LDKCustomMessageReader)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCustomMessageReader in l_sl");
                                        Console.Error.Flush();
@@ -16654,7 +17517,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 148:
+                       case 153:
                                if (!(obj is LDKSocketDescriptor)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSocketDescriptor in l_lb");
                                        Console.Error.Flush();
@@ -16685,7 +17548,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 150:
+                       case 155:
                                if (!(obj is LDKSocketDescriptor)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKSocketDescriptor in b_l");
                                        Console.Error.Flush();
@@ -16716,7 +17579,7 @@ internal class bindings {
                        Environment.Exit(43);
                }
                switch (fn_id) {
-                       case 155:
+                       case 160:
                                if (!(obj is LDKCoinSelectionSource)) {
                                        Console.Error.WriteLine("Got function call to object that wasn't a LDKCoinSelectionSource in l_llli");
                                        Console.Error.Flush();
index 8284b36353ab053a12f45ace58623d02a69ee78d..afb3357d3fe4b0a6420906c064302484413f6651 100644 (file)
@@ -187,7 +187,6 @@ public class APIError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.APIError ret_hu_conv = org.ldk.structs.APIError.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(script); };
                return ret_hu_conv;
        }
 
index 5a19a661209777506b5612225358a4d1357c8bcc..28b817ea89fbc4e9bef4750d4a1db345422e4ad2 100644 (file)
@@ -38,7 +38,6 @@ public class AcceptChannel : CommonBase {
                bindings.AcceptChannel_set_common_fields(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -69,7 +68,6 @@ public class AcceptChannel : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.AcceptChannel ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.AcceptChannel(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(common_fields_arg); };
                return ret_hu_conv;
        }
 
index 65be5633f7522b20e1f55f6f1a3c11f83b57b0fc..f831422ac356710efcb071a458cc9995686efb49 100644 (file)
@@ -36,7 +36,6 @@ public class AcceptChannelV2 : CommonBase {
                bindings.AcceptChannelV2_set_common_fields(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -107,7 +106,6 @@ public class AcceptChannelV2 : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.AcceptChannelV2 ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.AcceptChannelV2(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(common_fields_arg); };
                return ret_hu_conv;
        }
 
index b452326b76e06222958f16c64ca5e4bae8c47ef4..b7c016cfe49c2754b0e9bca8be3902c611f53156 100644 (file)
@@ -34,7 +34,6 @@ public class AnchorDescriptor : CommonBase {
                bindings.AnchorDescriptor_set_channel_derivation_parameters(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -58,7 +57,6 @@ public class AnchorDescriptor : CommonBase {
                bindings.AnchorDescriptor_set_outpoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -71,8 +69,6 @@ public class AnchorDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.AnchorDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.AnchorDescriptor(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_derivation_parameters_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint_arg); };
                return ret_hu_conv;
        }
 
@@ -162,12 +158,12 @@ public class AnchorDescriptor : CommonBase {
        /**
         * Derives the channel signer required to sign the anchor input.
         */
-       public WriteableEcdsaChannelSigner derive_channel_signer(org.ldk.structs.SignerProvider signer_provider) {
+       public EcdsaChannelSigner derive_channel_signer(org.ldk.structs.SignerProvider signer_provider) {
                long ret = bindings.AnchorDescriptor_derive_channel_signer(this.ptr, signer_provider.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(signer_provider);
                if (ret >= 0 && ret <= 4096) { return null; }
-               WriteableEcdsaChannelSigner ret_hu_conv = new WriteableEcdsaChannelSigner(null, ret);
+               EcdsaChannelSigner ret_hu_conv = new EcdsaChannelSigner(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                if (this != null) { this.ptrs_to.AddLast(signer_provider); };
                return ret_hu_conv;
index 064273e47bfc29066a4cf265ed817ab7199f7702..2ebe183b0a136b66fe13202c09a0548d8c7db308 100644 (file)
@@ -36,7 +36,6 @@ public class AnnouncementSignatures : CommonBase {
                bindings.AnnouncementSignatures_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -109,7 +108,6 @@ public class AnnouncementSignatures : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.AnnouncementSignatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.AnnouncementSignatures(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/AsyncPaymentsMessage.cs b/c_sharp/src/org/ldk/structs/AsyncPaymentsMessage.cs
new file mode 100644 (file)
index 0000000..3b46ae4
--- /dev/null
@@ -0,0 +1,128 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * Possible async payment messages sent and received via an [`OnionMessage`].
+ * 
+ * [`OnionMessage`]: crate::ln::msgs::OnionMessage
+ */
+public class AsyncPaymentsMessage : CommonBase {
+       protected AsyncPaymentsMessage(object _dummy, long ptr) : base(ptr) { }
+       ~AsyncPaymentsMessage() {
+               if (ptr != 0) { bindings.AsyncPaymentsMessage_free(ptr); }
+       }
+
+       internal static AsyncPaymentsMessage constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKAsyncPaymentsMessage_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new AsyncPaymentsMessage_HeldHtlcAvailable(ptr);
+                       case 1: return new AsyncPaymentsMessage_ReleaseHeldHtlc(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A AsyncPaymentsMessage of type HeldHtlcAvailable */
+       public class AsyncPaymentsMessage_HeldHtlcAvailable : AsyncPaymentsMessage {
+               public HeldHtlcAvailable held_htlc_available;
+               internal AsyncPaymentsMessage_HeldHtlcAvailable(long ptr) : base(null, ptr) {
+                       long held_htlc_available = bindings.LDKAsyncPaymentsMessage_HeldHtlcAvailable_get_held_htlc_available(ptr);
+                       org.ldk.structs.HeldHtlcAvailable held_htlc_available_hu_conv = null; if (held_htlc_available < 0 || held_htlc_available > 4096) { held_htlc_available_hu_conv = new org.ldk.structs.HeldHtlcAvailable(null, held_htlc_available); }
+                       if (held_htlc_available_hu_conv != null) { held_htlc_available_hu_conv.ptrs_to.AddLast(this); };
+                       this.held_htlc_available = held_htlc_available_hu_conv;
+               }
+       }
+       /** A AsyncPaymentsMessage of type ReleaseHeldHtlc */
+       public class AsyncPaymentsMessage_ReleaseHeldHtlc : AsyncPaymentsMessage {
+               public ReleaseHeldHtlc release_held_htlc;
+               internal AsyncPaymentsMessage_ReleaseHeldHtlc(long ptr) : base(null, ptr) {
+                       long release_held_htlc = bindings.LDKAsyncPaymentsMessage_ReleaseHeldHtlc_get_release_held_htlc(ptr);
+                       org.ldk.structs.ReleaseHeldHtlc release_held_htlc_hu_conv = null; if (release_held_htlc < 0 || release_held_htlc > 4096) { release_held_htlc_hu_conv = new org.ldk.structs.ReleaseHeldHtlc(null, release_held_htlc); }
+                       if (release_held_htlc_hu_conv != null) { release_held_htlc_hu_conv.ptrs_to.AddLast(this); };
+                       this.release_held_htlc = release_held_htlc_hu_conv;
+               }
+       }
+       internal long clone_ptr() {
+               long ret = bindings.AsyncPaymentsMessage_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the AsyncPaymentsMessage
+        */
+       public AsyncPaymentsMessage clone() {
+               long ret = bindings.AsyncPaymentsMessage_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.AsyncPaymentsMessage ret_hu_conv = org.ldk.structs.AsyncPaymentsMessage.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new HeldHtlcAvailable-variant AsyncPaymentsMessage
+        */
+       public static AsyncPaymentsMessage held_htlc_available(org.ldk.structs.HeldHtlcAvailable a) {
+               long ret = bindings.AsyncPaymentsMessage_held_htlc_available(a.ptr);
+               GC.KeepAlive(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.AsyncPaymentsMessage ret_hu_conv = org.ldk.structs.AsyncPaymentsMessage.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new ReleaseHeldHtlc-variant AsyncPaymentsMessage
+        */
+       public static AsyncPaymentsMessage release_held_htlc(org.ldk.structs.ReleaseHeldHtlc a) {
+               long ret = bindings.AsyncPaymentsMessage_release_held_htlc(a.ptr);
+               GC.KeepAlive(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.AsyncPaymentsMessage ret_hu_conv = org.ldk.structs.AsyncPaymentsMessage.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new OnionMessageContents which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned OnionMessageContents must be freed before this_arg is
+        */
+       public OnionMessageContents as_OnionMessageContents() {
+               long ret = bindings.AsyncPaymentsMessage_as_OnionMessageContents(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               OnionMessageContents ret_hu_conv = new OnionMessageContents(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the AsyncPaymentsMessage object into a byte array which can be read by AsyncPaymentsMessage_read
+        */
+       public byte[] write() {
+               long ret = bindings.AsyncPaymentsMessage_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a AsyncPaymentsMessage from a byte array, created by AsyncPaymentsMessage_write
+        */
+       public static Result_AsyncPaymentsMessageDecodeErrorZ read(byte[] ser, long arg) {
+               long ret = bindings.AsyncPaymentsMessage_read(InternalUtils.encodeUint8Array(ser), arg);
+               GC.KeepAlive(ser);
+               GC.KeepAlive(arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_AsyncPaymentsMessageDecodeErrorZ ret_hu_conv = Result_AsyncPaymentsMessageDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/AsyncPaymentsMessageHandler.cs b/c_sharp/src/org/ldk/structs/AsyncPaymentsMessageHandler.cs
new file mode 100644 (file)
index 0000000..7d22da8
--- /dev/null
@@ -0,0 +1,136 @@
+
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+
+/** An implementation of AsyncPaymentsMessageHandler */
+public interface AsyncPaymentsMessageHandlerInterface {
+       /**Handle a [`HeldHtlcAvailable`] message. A [`ReleaseHeldHtlc`] should be returned to release
+        * the held funds.
+        * 
+        * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ held_htlc_available(HeldHtlcAvailable message, Responder responder);
+       /**Handle a [`ReleaseHeldHtlc`] message. If authentication of the message succeeds, an HTLC
+        * should be released to the corresponding payee.
+        */
+       void release_held_htlc(ReleaseHeldHtlc message);
+       /**Release any [`AsyncPaymentsMessage`]s that need to be sent.
+        * 
+        * Typically, this is used for messages initiating an async payment flow rather than in response
+        * to another message.
+        */
+       TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ[] release_pending_messages();
+}
+
+/**
+ * A handler for an [`OnionMessage`] containing an async payments message as its payload.
+ * 
+ * [`OnionMessage`]: crate::ln::msgs::OnionMessage
+ */
+public class AsyncPaymentsMessageHandler : CommonBase {
+       internal bindings.LDKAsyncPaymentsMessageHandler bindings_instance;
+       internal long instance_idx;
+
+       internal AsyncPaymentsMessageHandler(object _dummy, long ptr) : base(ptr) { bindings_instance = null; }
+       ~AsyncPaymentsMessageHandler() {
+               if (ptr != 0) { bindings.AsyncPaymentsMessageHandler_free(ptr); }
+       }
+
+       private class LDKAsyncPaymentsMessageHandlerHolder { internal AsyncPaymentsMessageHandler held; }
+       private class LDKAsyncPaymentsMessageHandlerImpl : bindings.LDKAsyncPaymentsMessageHandler {
+               internal LDKAsyncPaymentsMessageHandlerImpl(AsyncPaymentsMessageHandlerInterface arg, LDKAsyncPaymentsMessageHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
+               private AsyncPaymentsMessageHandlerInterface arg;
+               private LDKAsyncPaymentsMessageHandlerHolder impl_holder;
+               public long held_htlc_available(long _message, long _responder) {
+                       org.ldk.structs.HeldHtlcAvailable _message_hu_conv = null; if (_message < 0 || _message > 4096) { _message_hu_conv = new org.ldk.structs.HeldHtlcAvailable(null, _message); }
+                       if (_message_hu_conv != null) { _message_hu_conv.ptrs_to.AddLast(this); };
+                       org.ldk.structs.Responder _responder_hu_conv = null; if (_responder < 0 || _responder > 4096) { _responder_hu_conv = new org.ldk.structs.Responder(null, _responder); }
+                       if (_responder_hu_conv != null) { _responder_hu_conv.ptrs_to.AddLast(this); };
+                       Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret = arg.held_htlc_available(_message_hu_conv, _responder_hu_conv);
+                               GC.KeepAlive(arg);
+                       long result = ret.clone_ptr();
+                       return result;
+               }
+               public void release_held_htlc(long _message) {
+                       org.ldk.structs.ReleaseHeldHtlc _message_hu_conv = null; if (_message < 0 || _message > 4096) { _message_hu_conv = new org.ldk.structs.ReleaseHeldHtlc(null, _message); }
+                       if (_message_hu_conv != null) { _message_hu_conv.ptrs_to.AddLast(this); };
+                       arg.release_held_htlc(_message_hu_conv);
+                               GC.KeepAlive(arg);
+               }
+               public long release_pending_messages() {
+                       TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ[] ret = arg.release_pending_messages();
+                               GC.KeepAlive(arg);
+                       long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_55 => ret_conv_55.clone_ptr()));
+                       return result;
+               }
+       }
+
+       /** Creates a new instance of AsyncPaymentsMessageHandler from a given implementation */
+       public static AsyncPaymentsMessageHandler new_impl(AsyncPaymentsMessageHandlerInterface arg) {
+               LDKAsyncPaymentsMessageHandlerHolder impl_holder = new LDKAsyncPaymentsMessageHandlerHolder();
+               LDKAsyncPaymentsMessageHandlerImpl impl = new LDKAsyncPaymentsMessageHandlerImpl(arg, impl_holder);
+               long[] ptr_idx = bindings.LDKAsyncPaymentsMessageHandler_new(impl);
+
+               impl_holder.held = new AsyncPaymentsMessageHandler(null, ptr_idx[0]);
+               impl_holder.held.instance_idx = ptr_idx[1];
+               impl_holder.held.bindings_instance = impl;
+               return impl_holder.held;
+       }
+
+       /**
+        * Handle a [`HeldHtlcAvailable`] message. A [`ReleaseHeldHtlc`] should be returned to release
+        * the held funds.
+        * 
+        * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ held_htlc_available(org.ldk.structs.HeldHtlcAvailable message, org.ldk.structs.Responder responder) {
+               long ret = bindings.AsyncPaymentsMessageHandler_held_htlc_available(this.ptr, message.ptr, responder == null ? 0 : responder.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(message);
+               GC.KeepAlive(responder);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Handle a [`ReleaseHeldHtlc`] message. If authentication of the message succeeds, an HTLC
+        * should be released to the corresponding payee.
+        */
+       public void release_held_htlc(org.ldk.structs.ReleaseHeldHtlc message) {
+               bindings.AsyncPaymentsMessageHandler_release_held_htlc(this.ptr, message.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(message);
+       }
+
+       /**
+        * Release any [`AsyncPaymentsMessage`]s that need to be sent.
+        * 
+        * Typically, this is used for messages initiating an async payment flow rather than in response
+        * to another message.
+        */
+       public TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ[] release_pending_messages() {
+               long ret = bindings.AsyncPaymentsMessageHandler_release_pending_messages(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               int ret_conv_55_len = InternalUtils.getArrayLength(ret);
+               TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ[] ret_conv_55_arr = new TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ[ret_conv_55_len];
+               for (int d = 0; d < ret_conv_55_len; d++) {
+                       long ret_conv_55 = InternalUtils.getU64ArrayElem(ret, d);
+                       TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ ret_conv_55_hu_conv = new TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ(null, ret_conv_55);
+                       if (ret_conv_55_hu_conv != null) { ret_conv_55_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_55_arr[d] = ret_conv_55_hu_conv;
+               }
+               bindings.free_buffer(ret);
+               return ret_conv_55_arr;
+       }
+
+}
+} } }
index 24843df0395f53aed1230f16ae9c7618b5c0094f..168b5f460933ea3dca5bfeddbe7e02668bc23f53 100644 (file)
@@ -89,12 +89,13 @@ public class BackgroundProcessor : CommonBase {
         * [`NetworkGraph`]: lightning::routing::gossip::NetworkGraph
         * [`NetworkGraph::write`]: lightning::routing::gossip::NetworkGraph#impl-Writeable
         */
-       public static BackgroundProcessor start(org.ldk.structs.Persister persister, org.ldk.structs.EventHandler event_handler, org.ldk.structs.ChainMonitor chain_monitor, org.ldk.structs.ChannelManager channel_manager, org.ldk.structs.GossipSync gossip_sync, org.ldk.structs.PeerManager peer_manager, org.ldk.structs.Logger logger, org.ldk.structs.Option_WriteableScoreZ scorer) {
-               long ret = bindings.BackgroundProcessor_start(persister.ptr, event_handler.ptr, chain_monitor.ptr, channel_manager.ptr, gossip_sync.ptr, peer_manager.ptr, logger.ptr, scorer.ptr);
+       public static BackgroundProcessor start(org.ldk.structs.Persister persister, org.ldk.structs.EventHandler event_handler, org.ldk.structs.ChainMonitor chain_monitor, org.ldk.structs.ChannelManager channel_manager, org.ldk.structs.OnionMessenger onion_messenger, org.ldk.structs.GossipSync gossip_sync, org.ldk.structs.PeerManager peer_manager, org.ldk.structs.Logger logger, org.ldk.structs.Option_WriteableScoreZ scorer) {
+               long ret = bindings.BackgroundProcessor_start(persister.ptr, event_handler.ptr, chain_monitor.ptr, channel_manager.ptr, onion_messenger.ptr, gossip_sync.ptr, peer_manager.ptr, logger.ptr, scorer.ptr);
                GC.KeepAlive(persister);
                GC.KeepAlive(event_handler);
                GC.KeepAlive(chain_monitor);
                GC.KeepAlive(channel_manager);
+               GC.KeepAlive(onion_messenger);
                GC.KeepAlive(gossip_sync);
                GC.KeepAlive(peer_manager);
                GC.KeepAlive(logger);
@@ -106,6 +107,7 @@ public class BackgroundProcessor : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(event_handler); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(chain_monitor); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_manager); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(onion_messenger); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(gossip_sync); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(peer_manager); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
index 18313917f72c0f86b1b44b6b66edd23331d5b02a..d1320c780a2f13c894c2a8b108a6a9471d3f80b3 100644 (file)
@@ -38,8 +38,66 @@ public class Balance : CommonBase {
                 * required to do so.
                 */
                public long amount_satoshis;
+               /**
+                * The transaction fee we pay for the closing commitment transaction. This amount is not
+                * included in the [`Balance::ClaimableOnChannelClose::amount_satoshis`] value.
+                * 
+                * Note that if this channel is inbound (and thus our counterparty pays the commitment
+                * transaction fee) this value will be zero. For [`ChannelMonitor`]s created prior to LDK
+                * 0.0.124, the channel is always treated as outbound (and thus this value is never zero).
+                */
+               public long transaction_fee_satoshis;
+               /**
+                * The amount of millisatoshis which has been burned to fees from HTLCs which are outbound
+                * from us and are related to a payment which was sent by us. This is the sum of the
+                * millisatoshis part of all HTLCs which are otherwise represented by
+                * [`Balance::MaybeTimeoutClaimableHTLC`] with their
+                * [`Balance::MaybeTimeoutClaimableHTLC::outbound_payment`] flag set, as well as any dust
+                * HTLCs which would otherwise be represented the same.
+                * 
+                * This amount (rounded up to a whole satoshi value) will not be included in `amount_satoshis`.
+                */
+               public long outbound_payment_htlc_rounded_msat;
+               /**
+                * The amount of millisatoshis which has been burned to fees from HTLCs which are outbound
+                * from us and are related to a forwarded HTLC. This is the sum of the millisatoshis part
+                * of all HTLCs which are otherwise represented by [`Balance::MaybeTimeoutClaimableHTLC`]
+                * with their [`Balance::MaybeTimeoutClaimableHTLC::outbound_payment`] flag *not* set, as
+                * well as any dust HTLCs which would otherwise be represented the same.
+                * 
+                * This amount (rounded up to a whole satoshi value) will not be included in `amount_satoshis`.
+                */
+               public long outbound_forwarded_htlc_rounded_msat;
+               /**
+                * The amount of millisatoshis which has been burned to fees from HTLCs which are inbound
+                * to us and for which we know the preimage. This is the sum of the millisatoshis part of
+                * all HTLCs which would be represented by [`Balance::ContentiousClaimable`] on channel
+                * close, but whose current value is included in
+                * [`Balance::ClaimableOnChannelClose::amount_satoshis`], as well as any dust HTLCs which
+                * would otherwise be represented the same.
+                * 
+                * This amount (rounded up to a whole satoshi value) will not be included in the counterparty's
+                * `amount_satoshis`.
+                */
+               public long inbound_claiming_htlc_rounded_msat;
+               /**
+                * The amount of millisatoshis which has been burned to fees from HTLCs which are inbound
+                * to us and for which we do not know the preimage. This is the sum of the millisatoshis
+                * part of all HTLCs which would be represented by [`Balance::MaybePreimageClaimableHTLC`]
+                * on channel close, as well as any dust HTLCs which would otherwise be represented the
+                * same.
+                * 
+                * This amount (rounded up to a whole satoshi value) will not be included in the counterparty's
+                * `amount_satoshis`.
+                */
+               public long inbound_htlc_rounded_msat;
                internal Balance_ClaimableOnChannelClose(long ptr) : base(null, ptr) {
                        this.amount_satoshis = bindings.LDKBalance_ClaimableOnChannelClose_get_amount_satoshis(ptr);
+                       this.transaction_fee_satoshis = bindings.LDKBalance_ClaimableOnChannelClose_get_transaction_fee_satoshis(ptr);
+                       this.outbound_payment_htlc_rounded_msat = bindings.LDKBalance_ClaimableOnChannelClose_get_outbound_payment_htlc_rounded_msat(ptr);
+                       this.outbound_forwarded_htlc_rounded_msat = bindings.LDKBalance_ClaimableOnChannelClose_get_outbound_forwarded_htlc_rounded_msat(ptr);
+                       this.inbound_claiming_htlc_rounded_msat = bindings.LDKBalance_ClaimableOnChannelClose_get_inbound_claiming_htlc_rounded_msat(ptr);
+                       this.inbound_htlc_rounded_msat = bindings.LDKBalance_ClaimableOnChannelClose_get_inbound_htlc_rounded_msat(ptr);
                }
        }
        /** A Balance of type ClaimableAwaitingConfirmations */
@@ -54,9 +112,14 @@ public class Balance : CommonBase {
                 * amount.
                 */
                public int confirmation_height;
+               /**
+                * Whether this balance is a result of cooperative close, a force-close, or an HTLC.
+                */
+               public BalanceSource source;
                internal Balance_ClaimableAwaitingConfirmations(long ptr) : base(null, ptr) {
                        this.amount_satoshis = bindings.LDKBalance_ClaimableAwaitingConfirmations_get_amount_satoshis(ptr);
                        this.confirmation_height = bindings.LDKBalance_ClaimableAwaitingConfirmations_get_confirmation_height(ptr);
+                       this.source = bindings.LDKBalance_ClaimableAwaitingConfirmations_get_source(ptr);
                }
        }
        /** A Balance of type ContentiousClaimable */
@@ -106,12 +169,19 @@ public class Balance : CommonBase {
                 * The payment hash whose preimage our counterparty needs to claim this HTLC.
                 */
                public byte[] payment_hash;
+               /**
+                * Whether this HTLC represents a payment which was sent outbound from us. Otherwise it
+                * represents an HTLC which was forwarded (and should, thus, have a corresponding inbound
+                * edge on another channel).
+                */
+               public bool outbound_payment;
                internal Balance_MaybeTimeoutClaimableHTLC(long ptr) : base(null, ptr) {
                        this.amount_satoshis = bindings.LDKBalance_MaybeTimeoutClaimableHTLC_get_amount_satoshis(ptr);
                        this.claimable_height = bindings.LDKBalance_MaybeTimeoutClaimableHTLC_get_claimable_height(ptr);
                        long payment_hash = bindings.LDKBalance_MaybeTimeoutClaimableHTLC_get_payment_hash(ptr);
                        byte[] payment_hash_conv = InternalUtils.decodeUint8Array(payment_hash);
                        this.payment_hash = payment_hash_conv;
+                       this.outbound_payment = bindings.LDKBalance_MaybeTimeoutClaimableHTLC_get_outbound_payment(ptr);
                }
        }
        /** A Balance of type MaybePreimageClaimableHTLC */
@@ -172,9 +242,14 @@ public class Balance : CommonBase {
        /**
         * Utility method to constructs a new ClaimableOnChannelClose-variant Balance
         */
-       public static Balance claimable_on_channel_close(long amount_satoshis) {
-               long ret = bindings.Balance_claimable_on_channel_close(amount_satoshis);
+       public static Balance claimable_on_channel_close(long amount_satoshis, long transaction_fee_satoshis, long outbound_payment_htlc_rounded_msat, long outbound_forwarded_htlc_rounded_msat, long inbound_claiming_htlc_rounded_msat, long inbound_htlc_rounded_msat) {
+               long ret = bindings.Balance_claimable_on_channel_close(amount_satoshis, transaction_fee_satoshis, outbound_payment_htlc_rounded_msat, outbound_forwarded_htlc_rounded_msat, inbound_claiming_htlc_rounded_msat, inbound_htlc_rounded_msat);
                GC.KeepAlive(amount_satoshis);
+               GC.KeepAlive(transaction_fee_satoshis);
+               GC.KeepAlive(outbound_payment_htlc_rounded_msat);
+               GC.KeepAlive(outbound_forwarded_htlc_rounded_msat);
+               GC.KeepAlive(inbound_claiming_htlc_rounded_msat);
+               GC.KeepAlive(inbound_htlc_rounded_msat);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Balance ret_hu_conv = org.ldk.structs.Balance.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
@@ -184,10 +259,11 @@ public class Balance : CommonBase {
        /**
         * Utility method to constructs a new ClaimableAwaitingConfirmations-variant Balance
         */
-       public static Balance claimable_awaiting_confirmations(long amount_satoshis, int confirmation_height) {
-               long ret = bindings.Balance_claimable_awaiting_confirmations(amount_satoshis, confirmation_height);
+       public static Balance claimable_awaiting_confirmations(long amount_satoshis, int confirmation_height, BalanceSource source) {
+               long ret = bindings.Balance_claimable_awaiting_confirmations(amount_satoshis, confirmation_height, source);
                GC.KeepAlive(amount_satoshis);
                GC.KeepAlive(confirmation_height);
+               GC.KeepAlive(source);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Balance ret_hu_conv = org.ldk.structs.Balance.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
@@ -212,11 +288,12 @@ public class Balance : CommonBase {
        /**
         * Utility method to constructs a new MaybeTimeoutClaimableHTLC-variant Balance
         */
-       public static Balance maybe_timeout_claimable_htlc(long amount_satoshis, int claimable_height, byte[] payment_hash) {
-               long ret = bindings.Balance_maybe_timeout_claimable_htlc(amount_satoshis, claimable_height, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
+       public static Balance maybe_timeout_claimable_htlc(long amount_satoshis, int claimable_height, byte[] payment_hash, bool outbound_payment) {
+               long ret = bindings.Balance_maybe_timeout_claimable_htlc(amount_satoshis, claimable_height, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), outbound_payment);
                GC.KeepAlive(amount_satoshis);
                GC.KeepAlive(claimable_height);
                GC.KeepAlive(payment_hash);
+               GC.KeepAlive(outbound_payment);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Balance ret_hu_conv = org.ldk.structs.Balance.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
@@ -265,9 +342,15 @@ public class Balance : CommonBase {
                return this.eq((Balance)o);
        }
        /**
-        * The amount claimable, in satoshis. This excludes balances that we are unsure if we are able
-        * to claim, this is because we are waiting for a preimage or for a timeout to expire. For more
-        * information on these balances see [`Balance::MaybeTimeoutClaimableHTLC`] and
+        * The amount claimable, in satoshis.
+        * 
+        * For outbound payments, this excludes the balance from the possible HTLC timeout.
+        * 
+        * For forwarded payments, this includes the balance from the possible HTLC timeout as
+        * (to be conservative) that balance does not include routing fees we'd earn if we'd claim
+        * the balance from a preimage in a successful forward.
+        * 
+        * For more information on these balances see [`Balance::MaybeTimeoutClaimableHTLC`] and
         * [`Balance::MaybePreimageClaimableHTLC`].
         * 
         * On-chain fees required to claim the balance are not included in this amount.
index da99ae4d24e0b95d5a0c173871710c0bc9f893a3..dd42ec2f335023bd2389eba6276591b56d0bc9aa 100644 (file)
@@ -59,13 +59,44 @@ public class BlindedForward : CommonBase {
                GC.KeepAlive(val);
        }
 
+       /**
+        * Overrides the next hop's [`msgs::UpdateAddHTLC::blinding_point`]. Set if this HTLC is being
+        * forwarded within a [`BlindedPaymentPath`] that was concatenated to another blinded path that
+        * starts at the next hop.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public byte[] get_next_blinding_override() {
+               long ret = bindings.BlindedForward_get_next_blinding_override(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Overrides the next hop's [`msgs::UpdateAddHTLC::blinding_point`]. Set if this HTLC is being
+        * forwarded within a [`BlindedPaymentPath`] that was concatenated to another blinded path that
+        * starts at the next hop.
+        * 
+        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public void set_next_blinding_override(byte[] val) {
+               bindings.BlindedForward_set_next_blinding_override(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
        /**
         * Constructs a new BlindedForward given each field
+        * 
+        * Note that next_blinding_override_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static BlindedForward of(byte[] inbound_blinding_point_arg, BlindedFailure failure_arg) {
-               long ret = bindings.BlindedForward_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(inbound_blinding_point_arg, 33)), failure_arg);
+       public static BlindedForward of(byte[] inbound_blinding_point_arg, BlindedFailure failure_arg, byte[] next_blinding_override_arg) {
+               long ret = bindings.BlindedForward_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(inbound_blinding_point_arg, 33)), failure_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(next_blinding_override_arg, 33)));
                GC.KeepAlive(inbound_blinding_point_arg);
                GC.KeepAlive(failure_arg);
+               GC.KeepAlive(next_blinding_override_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.BlindedForward ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedForward(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
index 5829ee0f53b97148fd3fda85aeebe9b9c4571a3b..fd9cafa992796b45af0cfa6cd251bb672da6bccb 100644 (file)
@@ -18,7 +18,7 @@ public class BlindedHop : CommonBase {
        }
 
        /**
-        * The blinded node id of this hop in a [`BlindedPath`].
+        * The blinded node id of this hop in a blinded path.
         */
        public byte[] get_blinded_node_id() {
                long ret = bindings.BlindedHop_get_blinded_node_id(this.ptr);
@@ -29,7 +29,7 @@ public class BlindedHop : CommonBase {
        }
 
        /**
-        * The blinded node id of this hop in a [`BlindedPath`].
+        * The blinded node id of this hop in a blinded path.
         */
        public void set_blinded_node_id(byte[] val) {
                bindings.BlindedHop_set_blinded_node_id(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
@@ -38,7 +38,7 @@ public class BlindedHop : CommonBase {
        }
 
        /**
-        * The encrypted payload intended for this hop in a [`BlindedPath`].
+        * The encrypted payload intended for this hop in a blinded path.
         * 
         * Returns a copy of the field.
         */
@@ -51,7 +51,7 @@ public class BlindedHop : CommonBase {
        }
 
        /**
-        * The encrypted payload intended for this hop in a [`BlindedPath`].
+        * The encrypted payload intended for this hop in a blinded path.
         */
        public void set_encrypted_payload(byte[] val) {
                bindings.BlindedHop_set_encrypted_payload(this.ptr, InternalUtils.encodeUint8Array(val));
index c1cf013f188c5b74dc12c76b70acab470bb05be0..3a29b3ab648a292328b7f549290133ad11abc15d 100644 (file)
@@ -15,6 +15,28 @@ public class BlindedHopFeatures : CommonBase {
                if (ptr != 0) { bindings.BlindedHopFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the BlindedHopFeatures object into a byte array which can be read by BlindedHopFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.BlindedHopFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a BlindedHopFeatures from a byte array, created by BlindedHopFeatures_write
+        */
+       public static Result_BlindedHopFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.BlindedHopFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedHopFeaturesDecodeErrorZ ret_hu_conv = Result_BlindedHopFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two BlindedHopFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -73,6 +95,27 @@ public class BlindedHopFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.BlindedHopFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.BlindedHopFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +127,19 @@ public class BlindedHopFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.BlindedHopFeatures other) {
+               long ret = bindings.BlindedHopFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +150,15 @@ public class BlindedHopFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.BlindedHopFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -166,27 +231,5 @@ public class BlindedHopFeatures : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Serialize the BlindedHopFeatures object into a byte array which can be read by BlindedHopFeatures_read
-        */
-       public byte[] write() {
-               long ret = bindings.BlindedHopFeatures_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a BlindedHopFeatures from a byte array, created by BlindedHopFeatures_write
-        */
-       public static Result_BlindedHopFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.BlindedHopFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedHopFeaturesDecodeErrorZ ret_hu_conv = Result_BlindedHopFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
 }
 } } }
diff --git a/c_sharp/src/org/ldk/structs/BlindedMessagePath.cs b/c_sharp/src/org/ldk/structs/BlindedMessagePath.cs
new file mode 100644 (file)
index 0000000..eb9b852
--- /dev/null
@@ -0,0 +1,215 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A blinded path to be used for sending or receiving a message, hiding the identity of the
+ * recipient.
+ */
+public class BlindedMessagePath : CommonBase {
+       internal BlindedMessagePath(object _dummy, long ptr) : base(ptr) { }
+       ~BlindedMessagePath() {
+               if (ptr != 0) { bindings.BlindedMessagePath_free(ptr); }
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.BlindedMessagePath_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the BlindedMessagePath
+        */
+       public BlindedMessagePath clone() {
+               long ret = bindings.BlindedMessagePath_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.BlindedMessagePath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Generates a non-cryptographic 64-bit hash of the BlindedMessagePath.
+        */
+       public long hash() {
+               long ret = bindings.BlindedMessagePath_hash(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       public override int GetHashCode() {
+               return (int)this.hash();
+       }
+       /**
+        * Checks if two BlindedMessagePaths contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.BlindedMessagePath b) {
+               bool ret = bindings.BlindedMessagePath_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is BlindedMessagePath)) return false;
+               return this.eq((BlindedMessagePath)o);
+       }
+       /**
+        * Serialize the BlindedMessagePath object into a byte array which can be read by BlindedMessagePath_read
+        */
+       public byte[] write() {
+               long ret = bindings.BlindedMessagePath_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a BlindedMessagePath from a byte array, created by BlindedMessagePath_write
+        */
+       public static Result_BlindedMessagePathDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.BlindedMessagePath_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathDecodeErrorZ ret_hu_conv = Result_BlindedMessagePathDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Create a one-hop blinded path for a message.
+        */
+       public static Result_BlindedMessagePathNoneZ one_hop(byte[] recipient_node_id, org.ldk.structs.MessageContext context, org.ldk.structs.EntropySource entropy_source) {
+               long ret = bindings.BlindedMessagePath_one_hop(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient_node_id, 33)), context.ptr, entropy_source.ptr);
+               GC.KeepAlive(recipient_node_id);
+               GC.KeepAlive(context);
+               GC.KeepAlive(entropy_source);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathNoneZ ret_hu_conv = Result_BlindedMessagePathNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Create a path for an onion message, to be forwarded along `node_pks`. The last node
+        * pubkey in `node_pks` will be the destination node.
+        * 
+        * Errors if no hops are provided or if `node_pk`(s) are invalid.
+        */
+       public static Result_BlindedMessagePathNoneZ of(MessageForwardNode[] intermediate_nodes, byte[] recipient_node_id, org.ldk.structs.MessageContext context, org.ldk.structs.EntropySource entropy_source) {
+               long ret = bindings.BlindedMessagePath_new(InternalUtils.encodeUint64Array(InternalUtils.mapArray(intermediate_nodes, intermediate_nodes_conv_20 => intermediate_nodes_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient_node_id, 33)), context.ptr, entropy_source.ptr);
+               GC.KeepAlive(intermediate_nodes);
+               GC.KeepAlive(recipient_node_id);
+               GC.KeepAlive(context);
+               GC.KeepAlive(entropy_source);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathNoneZ ret_hu_conv = Result_BlindedMessagePathNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Attempts to a use a compact representation for the [`IntroductionNode`] by using a directed
+        * short channel id from a channel in `network_graph` leading to the introduction node.
+        * 
+        * While this may result in a smaller encoding, there is a trade off in that the path may
+        * become invalid if the channel is closed or hasn't been propagated via gossip. Therefore,
+        * calling this may not be suitable for long-lived blinded paths.
+        */
+       public void use_compact_introduction_node(org.ldk.structs.ReadOnlyNetworkGraph network_graph) {
+               bindings.BlindedMessagePath_use_compact_introduction_node(this.ptr, network_graph.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(network_graph);
+               if (this != null) { this.ptrs_to.AddLast(network_graph); };
+       }
+
+       /**
+        * Returns the introduction [`NodeId`] of the blinded path, if it is publicly reachable (i.e.,
+        * it is found in the network graph).
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public NodeId public_introduction_node_id(org.ldk.structs.ReadOnlyNetworkGraph network_graph) {
+               long ret = bindings.BlindedMessagePath_public_introduction_node_id(this.ptr, network_graph.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(network_graph);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeId(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               if (this != null) { this.ptrs_to.AddLast(network_graph); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The [`IntroductionNode`] of the blinded path.
+        */
+       public IntroductionNode introduction_node() {
+               long ret = bindings.BlindedMessagePath_introduction_node(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.IntroductionNode ret_hu_conv = org.ldk.structs.IntroductionNode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Used by the [`IntroductionNode`] to decrypt its [`encrypted_payload`] to forward the message.
+        * 
+        * [`encrypted_payload`]: BlindedHop::encrypted_payload
+        */
+       public byte[] blinding_point() {
+               long ret = bindings.BlindedMessagePath_blinding_point(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The [`BlindedHop`]s within the blinded path.
+        */
+       public BlindedHop[] blinded_hops() {
+               long ret = bindings.BlindedMessagePath_blinded_hops(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               int ret_conv_12_len = InternalUtils.getArrayLength(ret);
+               BlindedHop[] ret_conv_12_arr = new BlindedHop[ret_conv_12_len];
+               for (int m = 0; m < ret_conv_12_len; m++) {
+                       long ret_conv_12 = InternalUtils.getU64ArrayElem(ret, m);
+                       org.ldk.structs.BlindedHop ret_conv_12_hu_conv = null; if (ret_conv_12 < 0 || ret_conv_12 > 4096) { ret_conv_12_hu_conv = new org.ldk.structs.BlindedHop(null, ret_conv_12); }
+                       if (ret_conv_12_hu_conv != null) { ret_conv_12_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               bindings.free_buffer(ret);
+               return ret_conv_12_arr;
+       }
+
+       /**
+        * Advance the blinded onion message path by one hop, making the second hop into the new
+        * introduction node.
+        * 
+        * Will only modify `self` when returning `Ok`.
+        */
+       public Result_NoneNoneZ advance_path_by_one(org.ldk.structs.NodeSigner node_signer, org.ldk.structs.NodeIdLookUp node_id_lookup) {
+               long ret = bindings.BlindedMessagePath_advance_path_by_one(this.ptr, node_signer.ptr, node_id_lookup.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(node_signer);
+               GC.KeepAlive(node_id_lookup);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(node_signer); };
+               if (this != null) { this.ptrs_to.AddLast(node_id_lookup); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/BlindedPath.cs b/c_sharp/src/org/ldk/structs/BlindedPath.cs
deleted file mode 100644 (file)
index ee027ff..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * Onion messages and payments can be sent and received to blinded paths, which serve to hide the
- * identity of the recipient.
- */
-public class BlindedPath : CommonBase {
-       internal BlindedPath(object _dummy, long ptr) : base(ptr) { }
-       ~BlindedPath() {
-               if (ptr != 0) { bindings.BlindedPath_free(ptr); }
-       }
-
-       /**
-        * To send to a blinded path, the sender first finds a route to the unblinded
-        * `introduction_node`, which can unblind its [`encrypted_payload`] to find out the onion
-        * message or payment's next hop and forward it along.
-        * 
-        * [`encrypted_payload`]: BlindedHop::encrypted_payload
-        */
-       public IntroductionNode get_introduction_node() {
-               long ret = bindings.BlindedPath_get_introduction_node(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.IntroductionNode ret_hu_conv = org.ldk.structs.IntroductionNode.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * To send to a blinded path, the sender first finds a route to the unblinded
-        * `introduction_node`, which can unblind its [`encrypted_payload`] to find out the onion
-        * message or payment's next hop and forward it along.
-        * 
-        * [`encrypted_payload`]: BlindedHop::encrypted_payload
-        */
-       public void set_introduction_node(org.ldk.structs.IntroductionNode val) {
-               bindings.BlindedPath_set_introduction_node(this.ptr, val.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
-       }
-
-       /**
-        * Used by the introduction node to decrypt its [`encrypted_payload`] to forward the onion
-        * message or payment.
-        * 
-        * [`encrypted_payload`]: BlindedHop::encrypted_payload
-        */
-       public byte[] get_blinding_point() {
-               long ret = bindings.BlindedPath_get_blinding_point(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Used by the introduction node to decrypt its [`encrypted_payload`] to forward the onion
-        * message or payment.
-        * 
-        * [`encrypted_payload`]: BlindedHop::encrypted_payload
-        */
-       public void set_blinding_point(byte[] val) {
-               bindings.BlindedPath_set_blinding_point(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * The hops composing the blinded path.
-        */
-       public BlindedHop[] get_blinded_hops() {
-               long ret = bindings.BlindedPath_get_blinded_hops(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_12_len = InternalUtils.getArrayLength(ret);
-               BlindedHop[] ret_conv_12_arr = new BlindedHop[ret_conv_12_len];
-               for (int m = 0; m < ret_conv_12_len; m++) {
-                       long ret_conv_12 = InternalUtils.getU64ArrayElem(ret, m);
-                       org.ldk.structs.BlindedHop ret_conv_12_hu_conv = null; if (ret_conv_12 < 0 || ret_conv_12 > 4096) { ret_conv_12_hu_conv = new org.ldk.structs.BlindedHop(null, ret_conv_12); }
-                       if (ret_conv_12_hu_conv != null) { ret_conv_12_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
-               }
-               bindings.free_buffer(ret);
-               return ret_conv_12_arr;
-       }
-
-       /**
-        * The hops composing the blinded path.
-        */
-       public void set_blinded_hops(BlindedHop[] val) {
-               bindings.BlindedPath_set_blinded_hops(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_12 => val_conv_12.ptr)));
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               foreach (BlindedHop val_conv_12 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_12); }; };
-       }
-
-       /**
-        * Constructs a new BlindedPath given each field
-        */
-       public static BlindedPath of(org.ldk.structs.IntroductionNode introduction_node_arg, byte[] blinding_point_arg, BlindedHop[] blinded_hops_arg) {
-               long ret = bindings.BlindedPath_new(introduction_node_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(blinding_point_arg, 33)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(blinded_hops_arg, blinded_hops_arg_conv_12 => blinded_hops_arg_conv_12.ptr)));
-               GC.KeepAlive(introduction_node_arg);
-               GC.KeepAlive(blinding_point_arg);
-               GC.KeepAlive(blinded_hops_arg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.BlindedPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPath(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(introduction_node_arg); };
-               foreach (BlindedHop blinded_hops_arg_conv_12 in blinded_hops_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(blinded_hops_arg_conv_12); }; };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.BlindedPath_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a copy of the BlindedPath
-        */
-       public BlindedPath clone() {
-               long ret = bindings.BlindedPath_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.BlindedPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPath(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Generates a non-cryptographic 64-bit hash of the BlindedPath.
-        */
-       public long hash() {
-               long ret = bindings.BlindedPath_hash(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       public override int GetHashCode() {
-               return (int)this.hash();
-       }
-       /**
-        * Checks if two BlindedPaths contain equal inner contents.
-        * This ignores pointers and is_owned flags and looks at the values in fields.
-        * Two objects with NULL inner values will be considered "equal" here.
-        */
-       public bool eq(org.ldk.structs.BlindedPath b) {
-               bool ret = bindings.BlindedPath_eq(this.ptr, b.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(b);
-               if (this != null) { this.ptrs_to.AddLast(b); };
-               return ret;
-       }
-
-       public override bool Equals(object o) {
-               if (!(o is BlindedPath)) return false;
-               return this.eq((BlindedPath)o);
-       }
-       /**
-        * Create a one-hop blinded path for a message.
-        */
-       public static Result_BlindedPathNoneZ one_hop_for_message(byte[] recipient_node_id, org.ldk.structs.EntropySource entropy_source) {
-               long ret = bindings.BlindedPath_one_hop_for_message(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient_node_id, 33)), entropy_source.ptr);
-               GC.KeepAlive(recipient_node_id);
-               GC.KeepAlive(entropy_source);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathNoneZ ret_hu_conv = Result_BlindedPathNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Create a blinded path for an onion message, to be forwarded along `node_pks`. The last node
-        * pubkey in `node_pks` will be the destination node.
-        * 
-        * Errors if no hops are provided or if `node_pk`(s) are invalid.
-        */
-       public static Result_BlindedPathNoneZ new_for_message(byte[][] node_pks, org.ldk.structs.EntropySource entropy_source) {
-               long ret = bindings.BlindedPath_new_for_message(InternalUtils.encodeUint64Array(InternalUtils.mapArray(node_pks, node_pks_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_pks_conv_8, 33)))), entropy_source.ptr);
-               GC.KeepAlive(node_pks);
-               GC.KeepAlive(entropy_source);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathNoneZ ret_hu_conv = Result_BlindedPathNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Returns the introduction [`NodeId`] of the blinded path, if it is publicly reachable (i.e.,
-        * it is found in the network graph).
-        * 
-        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
-        */
-       public NodeId public_introduction_node_id(org.ldk.structs.ReadOnlyNetworkGraph network_graph) {
-               long ret = bindings.BlindedPath_public_introduction_node_id(this.ptr, network_graph.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(network_graph);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeId(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(network_graph); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Serialize the BlindedPath object into a byte array which can be read by BlindedPath_read
-        */
-       public byte[] write() {
-               long ret = bindings.BlindedPath_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a BlindedPath from a byte array, created by BlindedPath_write
-        */
-       public static Result_BlindedPathDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.BlindedPath_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathDecodeErrorZ ret_hu_conv = Result_BlindedPathDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index c68aaa7a9a17bf1c57372b1e536fd247b7b03292..1018b193c5d2b71633a584a689189f3d2020125a 100644 (file)
@@ -7,7 +7,7 @@ namespace org { namespace ldk { namespace structs {
 
 
 /**
- * Information needed to route a payment across a [`BlindedPath`].
+ * Information needed to route a payment across a [`BlindedPaymentPath`].
  */
 public class BlindedPayInfo : CommonBase {
        internal BlindedPayInfo(object _dummy, long ptr) : base(ptr) { }
@@ -138,7 +138,6 @@ public class BlindedPayInfo : CommonBase {
                bindings.BlindedPayInfo_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -155,7 +154,6 @@ public class BlindedPayInfo : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.BlindedPayInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPayInfo(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/BlindedPaymentPath.cs b/c_sharp/src/org/ldk/structs/BlindedPaymentPath.cs
new file mode 100644 (file)
index 0000000..2769117
--- /dev/null
@@ -0,0 +1,204 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A blinded path to be used for sending or receiving a payment, hiding the identity of the
+ * recipient.
+ */
+public class BlindedPaymentPath : CommonBase {
+       internal BlindedPaymentPath(object _dummy, long ptr) : base(ptr) { }
+       ~BlindedPaymentPath() {
+               if (ptr != 0) { bindings.BlindedPaymentPath_free(ptr); }
+       }
+
+       /**
+        * The [`BlindedPayInfo`] used to pay this blinded path.
+        */
+       public BlindedPayInfo get_payinfo() {
+               long ret = bindings.BlindedPaymentPath_get_payinfo(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.BlindedPayInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPayInfo(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The [`BlindedPayInfo`] used to pay this blinded path.
+        */
+       public void set_payinfo(org.ldk.structs.BlindedPayInfo val) {
+               bindings.BlindedPaymentPath_set_payinfo(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.BlindedPaymentPath_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the BlindedPaymentPath
+        */
+       public BlindedPaymentPath clone() {
+               long ret = bindings.BlindedPaymentPath_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.BlindedPaymentPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPaymentPath(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Generates a non-cryptographic 64-bit hash of the BlindedPaymentPath.
+        */
+       public long hash() {
+               long ret = bindings.BlindedPaymentPath_hash(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       public override int GetHashCode() {
+               return (int)this.hash();
+       }
+       /**
+        * Checks if two BlindedPaymentPaths contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.BlindedPaymentPath b) {
+               bool ret = bindings.BlindedPaymentPath_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is BlindedPaymentPath)) return false;
+               return this.eq((BlindedPaymentPath)o);
+       }
+       /**
+        * Create a one-hop blinded path for a payment.
+        */
+       public static Result_BlindedPaymentPathNoneZ one_hop(byte[] payee_node_id, org.ldk.structs.ReceiveTlvs payee_tlvs, short min_final_cltv_expiry_delta, org.ldk.structs.EntropySource entropy_source) {
+               long ret = bindings.BlindedPaymentPath_one_hop(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payee_node_id, 33)), payee_tlvs.ptr, min_final_cltv_expiry_delta, entropy_source.ptr);
+               GC.KeepAlive(payee_node_id);
+               GC.KeepAlive(payee_tlvs);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(entropy_source);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedPaymentPathNoneZ ret_hu_conv = Result_BlindedPaymentPathNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Create a blinded path for a payment, to be forwarded along `intermediate_nodes`.
+        * 
+        * Errors if:
+        * a provided node id is invalid
+        * [`BlindedPayInfo`] calculation results in an integer overflow
+        * any unknown features are required in the provided [`ForwardTlvs`]
+        */
+       public static Result_BlindedPaymentPathNoneZ of(PaymentForwardNode[] intermediate_nodes, byte[] payee_node_id, org.ldk.structs.ReceiveTlvs payee_tlvs, long htlc_maximum_msat, short min_final_cltv_expiry_delta, org.ldk.structs.EntropySource entropy_source) {
+               long ret = bindings.BlindedPaymentPath_new(InternalUtils.encodeUint64Array(InternalUtils.mapArray(intermediate_nodes, intermediate_nodes_conv_20 => intermediate_nodes_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payee_node_id, 33)), payee_tlvs.ptr, htlc_maximum_msat, min_final_cltv_expiry_delta, entropy_source.ptr);
+               GC.KeepAlive(intermediate_nodes);
+               GC.KeepAlive(payee_node_id);
+               GC.KeepAlive(payee_tlvs);
+               GC.KeepAlive(htlc_maximum_msat);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(entropy_source);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedPaymentPathNoneZ ret_hu_conv = Result_BlindedPaymentPathNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Returns the introduction [`NodeId`] of the blinded path, if it is publicly reachable (i.e.,
+        * it is found in the network graph).
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public NodeId public_introduction_node_id(org.ldk.structs.ReadOnlyNetworkGraph network_graph) {
+               long ret = bindings.BlindedPaymentPath_public_introduction_node_id(this.ptr, network_graph.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(network_graph);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeId(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               if (this != null) { this.ptrs_to.AddLast(network_graph); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The [`IntroductionNode`] of the blinded path.
+        */
+       public IntroductionNode introduction_node() {
+               long ret = bindings.BlindedPaymentPath_introduction_node(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.IntroductionNode ret_hu_conv = org.ldk.structs.IntroductionNode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Used by the [`IntroductionNode`] to decrypt its [`encrypted_payload`] to forward the payment.
+        * 
+        * [`encrypted_payload`]: BlindedHop::encrypted_payload
+        */
+       public byte[] blinding_point() {
+               long ret = bindings.BlindedPaymentPath_blinding_point(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The [`BlindedHop`]s within the blinded path.
+        */
+       public BlindedHop[] blinded_hops() {
+               long ret = bindings.BlindedPaymentPath_blinded_hops(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               int ret_conv_12_len = InternalUtils.getArrayLength(ret);
+               BlindedHop[] ret_conv_12_arr = new BlindedHop[ret_conv_12_len];
+               for (int m = 0; m < ret_conv_12_len; m++) {
+                       long ret_conv_12 = InternalUtils.getU64ArrayElem(ret, m);
+                       org.ldk.structs.BlindedHop ret_conv_12_hu_conv = null; if (ret_conv_12 < 0 || ret_conv_12 > 4096) { ret_conv_12_hu_conv = new org.ldk.structs.BlindedHop(null, ret_conv_12); }
+                       if (ret_conv_12_hu_conv != null) { ret_conv_12_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               bindings.free_buffer(ret);
+               return ret_conv_12_arr;
+       }
+
+       /**
+        * Advance the blinded onion payment path by one hop, making the second hop into the new
+        * introduction node.
+        * 
+        * Will only modify `self` when returning `Ok`.
+        */
+       public Result_NoneNoneZ advance_path_by_one(org.ldk.structs.NodeSigner node_signer, org.ldk.structs.NodeIdLookUp node_id_lookup) {
+               long ret = bindings.BlindedPaymentPath_advance_path_by_one(this.ptr, node_signer.ptr, node_id_lookup.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(node_signer);
+               GC.KeepAlive(node_id_lookup);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(node_signer); };
+               if (this != null) { this.ptrs_to.AddLast(node_id_lookup); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index b27ce406863c2b9631c780c168db3bf95b6a4573..e575928d79316bf2f0f98066fe2924423f814c91 100644 (file)
@@ -19,9 +19,7 @@ public class BlindedTail : CommonBase {
        }
 
        /**
-        * The hops of the [`BlindedPath`] provided by the recipient.
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
+        * The hops of the [`BlindedPaymentPath`] provided by the recipient.
         */
        public BlindedHop[] get_hops() {
                long ret = bindings.BlindedTail_get_hops(this.ptr);
@@ -40,21 +38,16 @@ public class BlindedTail : CommonBase {
        }
 
        /**
-        * The hops of the [`BlindedPath`] provided by the recipient.
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
+        * The hops of the [`BlindedPaymentPath`] provided by the recipient.
         */
        public void set_hops(BlindedHop[] val) {
                bindings.BlindedTail_set_hops(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_12 => val_conv_12.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (BlindedHop val_conv_12 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_12); }; };
        }
 
        /**
-        * The blinding point of the [`BlindedPath`] provided by the recipient.
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
+        * The blinding point of the [`BlindedPaymentPath`] provided by the recipient.
         */
        public byte[] get_blinding_point() {
                long ret = bindings.BlindedTail_get_blinding_point(this.ptr);
@@ -65,9 +58,7 @@ public class BlindedTail : CommonBase {
        }
 
        /**
-        * The blinding point of the [`BlindedPath`] provided by the recipient.
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
+        * The blinding point of the [`BlindedPaymentPath`] provided by the recipient.
         */
        public void set_blinding_point(byte[] val) {
                bindings.BlindedTail_set_blinding_point(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
@@ -125,7 +116,6 @@ public class BlindedTail : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.BlindedTail ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedTail(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (BlindedHop hops_arg_conv_12 in hops_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(hops_arg_conv_12); }; };
                return ret_hu_conv;
        }
 
index a44f6c8671447c7784035ece6b414d162a472835..57114c76881a2cbf15d6d9e3ee74fa550355c687 100644 (file)
@@ -89,7 +89,7 @@ public class Bolt11Invoice : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SignedRawBolt11Invoice ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.SignedRawBolt11Invoice(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
@@ -131,7 +131,6 @@ public class Bolt11Invoice : CommonBase {
                GC.KeepAlive(signed_invoice);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceBolt11SemanticErrorZ ret_hu_conv = Result_Bolt11InvoiceBolt11SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(signed_invoice); };
                return ret_hu_conv;
        }
 
index 317cc0dabc1eb0cd31839467683f631282992417..0368e29fc14141cf723f731daad45e208e1280c6 100644 (file)
@@ -15,6 +15,28 @@ public class Bolt11InvoiceFeatures : CommonBase {
                if (ptr != 0) { bindings.Bolt11InvoiceFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the Bolt11InvoiceFeatures object into a byte array which can be read by Bolt11InvoiceFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.Bolt11InvoiceFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a Bolt11InvoiceFeatures from a byte array, created by Bolt11InvoiceFeatures_write
+        */
+       public static Result_Bolt11InvoiceFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Bolt11InvoiceFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_Bolt11InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt11InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two Bolt11InvoiceFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -62,6 +84,24 @@ public class Bolt11InvoiceFeatures : CommonBase {
        public override int GetHashCode() {
                return (int)this.hash();
        }
+       /**
+        * Getting a route for a keysend payment to a private node requires providing the payee's
+        * features (since they were not announced in a node announcement). However, keysend payments
+        * don't have an invoice to pull the payee's features from, so this method is provided for use
+        * when a [`Bolt11InvoiceFeatures`] is required in a route.
+        * 
+        * MPP keysend is not widely supported yet, so we parameterize support to allow the user to
+        * choose whether their router should find multi-part routes.
+        */
+       public static Bolt11InvoiceFeatures for_keysend(bool allow_mpp) {
+               long ret = bindings.Bolt11InvoiceFeatures_for_keysend(allow_mpp);
+               GC.KeepAlive(allow_mpp);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt11InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt11InvoiceFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        /**
         * Create a blank Features with no features set
         */
@@ -73,6 +113,27 @@ public class Bolt11InvoiceFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.Bolt11InvoiceFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.Bolt11InvoiceFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +145,19 @@ public class Bolt11InvoiceFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.Bolt11InvoiceFeatures other) {
+               long ret = bindings.Bolt11InvoiceFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +168,15 @@ public class Bolt11InvoiceFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.Bolt11InvoiceFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -166,28 +249,6 @@ public class Bolt11InvoiceFeatures : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Serialize the Bolt11InvoiceFeatures object into a byte array which can be read by Bolt11InvoiceFeatures_read
-        */
-       public byte[] write() {
-               long ret = bindings.Bolt11InvoiceFeatures_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a Bolt11InvoiceFeatures from a byte array, created by Bolt11InvoiceFeatures_write
-        */
-       public static Result_Bolt11InvoiceFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.Bolt11InvoiceFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt11InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
        /**
         * Set this feature as optional.
         */
index e6c65abc94952263785b0a611139cb37b7802905..ec4853276d36af3069b7ef56fb9ca1febfac2007 100644 (file)
@@ -15,6 +15,32 @@ public class Bolt11InvoiceSignature : CommonBase {
                if (ptr != 0) { bindings.Bolt11InvoiceSignature_free(ptr); }
        }
 
+       public byte[] get_a() {
+               long ret = bindings.Bolt11InvoiceSignature_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       public void set_a(byte[] val) {
+               bindings.Bolt11InvoiceSignature_set_a(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 68)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new Bolt11InvoiceSignature given each field
+        */
+       public static Bolt11InvoiceSignature of(byte[] a_arg) {
+               long ret = bindings.Bolt11InvoiceSignature_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(a_arg, 68)));
+               GC.KeepAlive(a_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt11InvoiceSignature ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt11InvoiceSignature(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        internal long clone_ptr() {
                long ret = bindings.Bolt11InvoiceSignature_clone_ptr(this.ptr);
                GC.KeepAlive(this);
index 27cdaea363ed9465571431ecc25f4a3d0ab9eef1..6d16cd6041f72c9a6bd1c80d415640e20d6bb1d5 100644 (file)
@@ -177,7 +177,6 @@ public class Bolt11ParseError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Bolt11ParseError ret_hu_conv = org.ldk.structs.Bolt11ParseError.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index e498a962a10bf29f8dd5a2aeda3d8dcd6d79e846..97b1d00d7d8e488c320c049bf8088bcae47bcd7b 100644 (file)
@@ -40,6 +40,77 @@ public class Bolt12Invoice : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Duration since the Unix epoch when the invoice was created.
+        */
+       public long created_at() {
+               long ret = bindings.Bolt12Invoice_created_at(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Duration since
+        * [`Bolt12Invoice::created_at`]
+        * when the invoice has expired and therefore should no longer be paid.
+        */
+       public long relative_expiry() {
+               long ret = bindings.Bolt12Invoice_relative_expiry(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Whether the invoice has expired.
+        */
+       public bool is_expired() {
+               bool ret = bindings.Bolt12Invoice_is_expired(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Fallback addresses for paying the invoice on-chain, in order of most-preferred to
+        * least-preferred.
+        */
+       public string[] fallbacks() {
+               long ret = bindings.Bolt12Invoice_fallbacks(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               int ret_conv_8_len = InternalUtils.getArrayLength(ret);
+               string[] ret_conv_8_arr = new string[ret_conv_8_len];
+               for (int i = 0; i < ret_conv_8_len; i++) {
+                       long ret_conv_8 = InternalUtils.getU64ArrayElem(ret, i);
+                       string ret_conv_8_conv = InternalUtils.decodeString(ret_conv_8);
+                       ret_conv_8_arr[i] = ret_conv_8_conv;
+               }
+               bindings.free_buffer(ret);
+               return ret_conv_8_arr;
+       }
+
+       /**
+        * Features pertaining to paying an invoice.
+        */
+       public Bolt12InvoiceFeatures invoice_features() {
+               long ret = bindings.Bolt12Invoice_invoice_features(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The public key corresponding to the key used to sign the invoice.
+        */
+       public byte[] signing_pubkey() {
+               long ret = bindings.Bolt12Invoice_signing_pubkey(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
        /**
         * The chains that may be used when paying a requested invoice.
         * 
@@ -188,20 +259,20 @@ public class Bolt12Invoice : CommonBase {
         * 
         * [`Offer::paths`]: crate::offers::offer::Offer::paths
         */
-       public BlindedPath[] message_paths() {
+       public BlindedMessagePath[] message_paths() {
                long ret = bindings.Bolt12Invoice_message_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
@@ -292,34 +363,6 @@ public class Bolt12Invoice : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Duration since the Unix epoch when the invoice was created.
-        */
-       public long created_at() {
-               long ret = bindings.Bolt12Invoice_created_at(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Duration since [`Bolt12Invoice::created_at`] when the invoice has expired and therefore
-        * should no longer be paid.
-        */
-       public long relative_expiry() {
-               long ret = bindings.Bolt12Invoice_relative_expiry(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Whether the invoice has expired.
-        */
-       public bool is_expired() {
-               bool ret = bindings.Bolt12Invoice_is_expired(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
        /**
         * SHA256 hash of the payment preimage that will be given in return for paying the invoice.
         */
@@ -340,29 +383,6 @@ public class Bolt12Invoice : CommonBase {
                return ret;
        }
 
-       /**
-        * Features pertaining to paying an invoice.
-        */
-       public Bolt12InvoiceFeatures invoice_features() {
-               long ret = bindings.Bolt12Invoice_invoice_features(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Bolt12InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * The public key corresponding to the key used to sign the invoice.
-        */
-       public byte[] signing_pubkey() {
-               long ret = bindings.Bolt12Invoice_signing_pubkey(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
        /**
         * Signature of the invoice verified using [`Bolt12Invoice::signing_pubkey`].
         */
@@ -386,12 +406,31 @@ public class Bolt12Invoice : CommonBase {
        }
 
        /**
-        * Verifies that the invoice was for a request or refund created using the given key. Returns
-        * the associated [`PaymentId`] to use when sending the payment.
+        * Verifies that the invoice was for a request or refund created using the given key by
+        * checking the payer metadata from the invoice request.
+        * 
+        * Returns the associated [`PaymentId`] to use when sending the payment.
+        */
+       public Result_ThirtyTwoBytesNoneZ verify_using_metadata(org.ldk.structs.ExpandedKey key) {
+               long ret = bindings.Bolt12Invoice_verify_using_metadata(this.ptr, key.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(key);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(key); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Verifies that the invoice was for a request or refund created using the given key by
+        * checking a payment id and nonce included with the [`BlindedMessagePath`] for which the invoice was
+        * sent through.
         */
-       public Result_ThirtyTwoBytesNoneZ verify(org.ldk.structs.ExpandedKey key) {
-               long ret = bindings.Bolt12Invoice_verify(this.ptr, key.ptr);
+       public Result_ThirtyTwoBytesNoneZ verify_using_payer_data(byte[] payment_id, org.ldk.structs.Nonce nonce, org.ldk.structs.ExpandedKey key) {
+               long ret = bindings.Bolt12Invoice_verify_using_payer_data(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)), nonce.ptr, key.ptr);
                GC.KeepAlive(this);
+               GC.KeepAlive(payment_id);
+               GC.KeepAlive(nonce);
                GC.KeepAlive(key);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
@@ -422,5 +461,16 @@ public class Bolt12Invoice : CommonBase {
                return ret_conv;
        }
 
+       /**
+        * Read a Bolt12Invoice from a byte array, created by Bolt12Invoice_write
+        */
+       public static Result_Bolt12InvoiceDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Bolt12Invoice_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_Bolt12InvoiceDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
 }
 } } }
index ac0f264b8b414691fe4540ee18a13040d81e608f..44bf0ff9cd0ecff226fa881a2ecd94dc8692139a 100644 (file)
@@ -15,6 +15,28 @@ public class Bolt12InvoiceFeatures : CommonBase {
                if (ptr != 0) { bindings.Bolt12InvoiceFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the Bolt12InvoiceFeatures object into a byte array which can be read by Bolt12InvoiceFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.Bolt12InvoiceFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a Bolt12InvoiceFeatures from a byte array, created by Bolt12InvoiceFeatures_write
+        */
+       public static Result_Bolt12InvoiceFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Bolt12InvoiceFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_Bolt12InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two Bolt12InvoiceFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -73,6 +95,27 @@ public class Bolt12InvoiceFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.Bolt12InvoiceFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.Bolt12InvoiceFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +127,19 @@ public class Bolt12InvoiceFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.Bolt12InvoiceFeatures other) {
+               long ret = bindings.Bolt12InvoiceFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +150,15 @@ public class Bolt12InvoiceFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.Bolt12InvoiceFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -166,28 +231,6 @@ public class Bolt12InvoiceFeatures : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Serialize the Bolt12InvoiceFeatures object into a byte array which can be read by Bolt12InvoiceFeatures_read
-        */
-       public byte[] write() {
-               long ret = bindings.Bolt12InvoiceFeatures_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a Bolt12InvoiceFeatures from a byte array, created by Bolt12InvoiceFeatures_write
-        */
-       public static Result_Bolt12InvoiceFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.Bolt12InvoiceFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt12InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
        /**
         * Set this feature as optional.
         */
index c75a4349c9b8fed9e7b3ce84d30814730be78f04..2d86838410d1e2df31bbf74dbe2cd4a5c20c8d57 100644 (file)
@@ -40,7 +40,6 @@ public class Bolt12OfferContext : CommonBase {
                bindings.Bolt12OfferContext_set_offer_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -68,7 +67,6 @@ public class Bolt12OfferContext : CommonBase {
                bindings.Bolt12OfferContext_set_invoice_request(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -81,8 +79,6 @@ public class Bolt12OfferContext : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Bolt12OfferContext ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12OfferContext(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(offer_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(invoice_request_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Bolt12PaymentError.cs b/c_sharp/src/org/ldk/structs/Bolt12PaymentError.cs
new file mode 100644 (file)
index 0000000..a15ea71
--- /dev/null
@@ -0,0 +1,130 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An error when attempting to pay a [`Bolt12Invoice`].
+ */
+public class Bolt12PaymentError : CommonBase {
+       protected Bolt12PaymentError(object _dummy, long ptr) : base(ptr) { }
+       ~Bolt12PaymentError() {
+               if (ptr != 0) { bindings.Bolt12PaymentError_free(ptr); }
+       }
+
+       internal static Bolt12PaymentError constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKBolt12PaymentError_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Bolt12PaymentError_UnexpectedInvoice(ptr);
+                       case 1: return new Bolt12PaymentError_DuplicateInvoice(ptr);
+                       case 2: return new Bolt12PaymentError_UnknownRequiredFeatures(ptr);
+                       case 3: return new Bolt12PaymentError_SendingFailed(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Bolt12PaymentError of type UnexpectedInvoice */
+       public class Bolt12PaymentError_UnexpectedInvoice : Bolt12PaymentError {
+               internal Bolt12PaymentError_UnexpectedInvoice(long ptr) : base(null, ptr) {
+               }
+       }
+       /** A Bolt12PaymentError of type DuplicateInvoice */
+       public class Bolt12PaymentError_DuplicateInvoice : Bolt12PaymentError {
+               internal Bolt12PaymentError_DuplicateInvoice(long ptr) : base(null, ptr) {
+               }
+       }
+       /** A Bolt12PaymentError of type UnknownRequiredFeatures */
+       public class Bolt12PaymentError_UnknownRequiredFeatures : Bolt12PaymentError {
+               internal Bolt12PaymentError_UnknownRequiredFeatures(long ptr) : base(null, ptr) {
+               }
+       }
+       /** A Bolt12PaymentError of type SendingFailed */
+       public class Bolt12PaymentError_SendingFailed : Bolt12PaymentError {
+               public RetryableSendFailure sending_failed;
+               internal Bolt12PaymentError_SendingFailed(long ptr) : base(null, ptr) {
+                       this.sending_failed = bindings.LDKBolt12PaymentError_SendingFailed_get_sending_failed(ptr);
+               }
+       }
+       internal long clone_ptr() {
+               long ret = bindings.Bolt12PaymentError_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the Bolt12PaymentError
+        */
+       public Bolt12PaymentError clone() {
+               long ret = bindings.Bolt12PaymentError_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new UnexpectedInvoice-variant Bolt12PaymentError
+        */
+       public static Bolt12PaymentError unexpected_invoice() {
+               long ret = bindings.Bolt12PaymentError_unexpected_invoice();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new DuplicateInvoice-variant Bolt12PaymentError
+        */
+       public static Bolt12PaymentError duplicate_invoice() {
+               long ret = bindings.Bolt12PaymentError_duplicate_invoice();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new UnknownRequiredFeatures-variant Bolt12PaymentError
+        */
+       public static Bolt12PaymentError unknown_required_features() {
+               long ret = bindings.Bolt12PaymentError_unknown_required_features();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new SendingFailed-variant Bolt12PaymentError
+        */
+       public static Bolt12PaymentError sending_failed(RetryableSendFailure a) {
+               long ret = bindings.Bolt12PaymentError_sending_failed(a);
+               GC.KeepAlive(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two Bolt12PaymentErrors contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public bool eq(org.ldk.structs.Bolt12PaymentError b) {
+               bool ret = bindings.Bolt12PaymentError_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is Bolt12PaymentError)) return false;
+               return this.eq((Bolt12PaymentError)o);
+       }
+}
+} } }
index e5d55621f249367fe24815832d6308bbd82b112a..e073fe53dd8488254ccbb171e2f7921292e732db 100644 (file)
@@ -193,9 +193,6 @@ public class BumpTransactionEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.BumpTransactionEvent ret_hu_conv = org.ldk.structs.BumpTransactionEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(anchor_descriptor); };
-               foreach (HTLCOutputInCommitment pending_htlcs_conv_24 in pending_htlcs) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(pending_htlcs_conv_24); }; };
                return ret_hu_conv;
        }
 
@@ -213,8 +210,6 @@ public class BumpTransactionEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.BumpTransactionEvent ret_hu_conv = org.ldk.structs.BumpTransactionEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
-               foreach (HTLCDescriptor htlc_descriptors_conv_16 in htlc_descriptors) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlc_descriptors_conv_16); }; };
                return ret_hu_conv;
        }
 
index 766d93b4f651bdcf47275dbfbf9bfb71ddf961bf..04e903a4e33550b9fed4a7339218e1d5e65bfb79 100644 (file)
@@ -107,7 +107,6 @@ public class CandidateRouteHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CandidateRouteHop ret_hu_conv = org.ldk.structs.CandidateRouteHop.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -120,7 +119,6 @@ public class CandidateRouteHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CandidateRouteHop ret_hu_conv = org.ldk.structs.CandidateRouteHop.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -133,7 +131,6 @@ public class CandidateRouteHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CandidateRouteHop ret_hu_conv = org.ldk.structs.CandidateRouteHop.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -146,7 +143,6 @@ public class CandidateRouteHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CandidateRouteHop ret_hu_conv = org.ldk.structs.CandidateRouteHop.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -159,7 +155,6 @@ public class CandidateRouteHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CandidateRouteHop ret_hu_conv = org.ldk.structs.CandidateRouteHop.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index f52ce0f3309ecec08a887ea9170c369bc30c736c..828109d9e44d8228b592249091414c9b9f1fbe7a 100644 (file)
@@ -62,8 +62,7 @@ public class ChainMonitor : CommonBase {
         * claims which are awaiting confirmation.
         * 
         * Includes the balances from each [`ChannelMonitor`] *except* those included in
-        * `ignored_channels`, allowing you to filter out balances from channels which are still open
-        * (and whose balance should likely be pulled from the [`ChannelDetails`]).
+        * `ignored_channels`.
         * 
         * See [`ChannelMonitor::get_claimable_balances`] for more details on the exact criteria for
         * inclusion in the return value.
@@ -82,7 +81,6 @@ public class ChainMonitor : CommonBase {
                        ret_conv_9_arr[j] = ret_conv_9_hu_conv;
                }
                bindings.free_buffer(ret);
-               foreach (ChannelDetails ignored_channels_conv_16 in ignored_channels) { if (this != null) { this.ptrs_to.AddLast(ignored_channels_conv_16); }; };
                return ret_conv_9_arr;
        }
 
@@ -99,7 +97,6 @@ public class ChainMonitor : CommonBase {
                GC.KeepAlive(funding_txo);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_LockedChannelMonitorNoneZ ret_hu_conv = Result_LockedChannelMonitorNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(funding_txo); };
                return ret_hu_conv;
        }
 
@@ -127,21 +124,24 @@ public class ChainMonitor : CommonBase {
 
        /**
         * Lists the pending updates for each [`ChannelMonitor`] (by `OutPoint` being monitored).
+        * Each `Vec<u64>` contains `update_id`s from [`ChannelMonitor::get_latest_update_id`] for updates
+        * that have not yet been fully persisted. Note that if a full monitor is persisted all the pending
+        * monitor updates must be individually marked completed by calling [`ChainMonitor::channel_monitor_updated`].
         */
-       public TwoTuple_OutPointCVec_MonitorUpdateIdZZ[] list_pending_monitor_updates() {
+       public TwoTuple_OutPointCVec_u64ZZ[] list_pending_monitor_updates() {
                long ret = bindings.ChainMonitor_list_pending_monitor_updates(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_41_len = InternalUtils.getArrayLength(ret);
-               TwoTuple_OutPointCVec_MonitorUpdateIdZZ[] ret_conv_41_arr = new TwoTuple_OutPointCVec_MonitorUpdateIdZZ[ret_conv_41_len];
-               for (int p = 0; p < ret_conv_41_len; p++) {
-                       long ret_conv_41 = InternalUtils.getU64ArrayElem(ret, p);
-                       TwoTuple_OutPointCVec_MonitorUpdateIdZZ ret_conv_41_hu_conv = new TwoTuple_OutPointCVec_MonitorUpdateIdZZ(null, ret_conv_41);
-                       if (ret_conv_41_hu_conv != null) { ret_conv_41_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_41_arr[p] = ret_conv_41_hu_conv;
+               int ret_conv_29_len = InternalUtils.getArrayLength(ret);
+               TwoTuple_OutPointCVec_u64ZZ[] ret_conv_29_arr = new TwoTuple_OutPointCVec_u64ZZ[ret_conv_29_len];
+               for (int d = 0; d < ret_conv_29_len; d++) {
+                       long ret_conv_29 = InternalUtils.getU64ArrayElem(ret, d);
+                       TwoTuple_OutPointCVec_u64ZZ ret_conv_29_hu_conv = new TwoTuple_OutPointCVec_u64ZZ(null, ret_conv_29);
+                       if (ret_conv_29_hu_conv != null) { ret_conv_29_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_29_arr[d] = ret_conv_29_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_41_arr;
+               return ret_conv_29_arr;
        }
 
        /**
@@ -152,22 +152,27 @@ public class ChainMonitor : CommonBase {
         * 1) This [`ChainMonitor`] calls [`Persist::update_persisted_channel`] which stores the
         * update to disk and begins updating any remote (e.g. watchtower/backup) copies,
         * returning [`ChannelMonitorUpdateStatus::InProgress`],
-        * 2) once all remote copies are updated, you call this function with the
-        * `completed_update_id` that completed, and once all pending updates have completed the
-        * channel will be re-enabled.
+        * 2) once all remote copies are updated, you call this function with [`ChannelMonitor::get_latest_update_id`]
+        * or [`ChannelMonitorUpdate::update_id`] as the `completed_update_id`, and once all pending
+        * updates have completed the channel will be re-enabled.
+        * 
+        * It is only necessary to call [`ChainMonitor::channel_monitor_updated`] when you return [`ChannelMonitorUpdateStatus::InProgress`]
+        * from [`Persist`] and either:
+        * 1. A new [`ChannelMonitor`] was added in [`Persist::persist_new_channel`], or
+        * 2. A [`ChannelMonitorUpdate`] was provided as part of [`Persist::update_persisted_channel`].
+        * Note that we don't care about calls to [`Persist::update_persisted_channel`] where no
+        * [`ChannelMonitorUpdate`] was provided.
         * 
         * Returns an [`APIError::APIMisuseError`] if `funding_txo` does not match any currently
         * registered [`ChannelMonitor`]s.
         */
-       public Result_NoneAPIErrorZ channel_monitor_updated(org.ldk.structs.OutPoint funding_txo, org.ldk.structs.MonitorUpdateId completed_update_id) {
-               long ret = bindings.ChainMonitor_channel_monitor_updated(this.ptr, funding_txo.ptr, completed_update_id.ptr);
+       public Result_NoneAPIErrorZ channel_monitor_updated(org.ldk.structs.OutPoint funding_txo, long completed_update_id) {
+               long ret = bindings.ChainMonitor_channel_monitor_updated(this.ptr, funding_txo.ptr, completed_update_id);
                GC.KeepAlive(this);
                GC.KeepAlive(funding_txo);
                GC.KeepAlive(completed_update_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(funding_txo); };
-               if (this != null) { this.ptrs_to.AddLast(completed_update_id); };
                return ret_hu_conv;
        }
 
@@ -214,7 +219,6 @@ public class ChainMonitor : CommonBase {
                bindings.ChainMonitor_signer_unblocked(this.ptr, monitor_opt == null ? 0 : monitor_opt.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(monitor_opt);
-               if (this != null) { this.ptrs_to.AddLast(monitor_opt); };
        }
 
        /**
index 59e2af0788df6c68f175588d77262caa41eb45ad..119a78eb8cccd6d47084deae687a88747a1af861 100644 (file)
@@ -60,7 +60,6 @@ public class ChainParameters : CommonBase {
                bindings.ChainParameters_set_best_block(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -73,7 +72,6 @@ public class ChainParameters : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChainParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChainParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(best_block_arg); };
                return ret_hu_conv;
        }
 
index af7d08594f20a2d40357ffb697b58605bd5aeeb3..3f896a033e7d5b79a968d600dc4fcdc33b13f683 100644 (file)
@@ -116,7 +116,6 @@ public class ChannelAnnouncement : CommonBase {
                bindings.ChannelAnnouncement_set_contents(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -132,7 +131,6 @@ public class ChannelAnnouncement : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelAnnouncement(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents_arg); };
                return ret_hu_conv;
        }
 
index a541b2e49e38ba7c0212548e357a56e121edc81a..13f8e6a69006b9c50aa4290ba72df4beffd8996d 100644 (file)
@@ -22,7 +22,7 @@ public class ChannelConfig : CommonBase {
         * This may be allowed to change at runtime in a later update, however doing so must result in
         * update messages sent to notify all nodes of our updated relay fee.
         * 
-        * Default value: 0.
+        * Default value: `0`
         */
        public int get_forwarding_fee_proportional_millionths() {
                int ret = bindings.ChannelConfig_get_forwarding_fee_proportional_millionths(this.ptr);
@@ -36,7 +36,7 @@ public class ChannelConfig : CommonBase {
         * This may be allowed to change at runtime in a later update, however doing so must result in
         * update messages sent to notify all nodes of our updated relay fee.
         * 
-        * Default value: 0.
+        * Default value: `0`
         */
        public void set_forwarding_fee_proportional_millionths(int val) {
                bindings.ChannelConfig_set_forwarding_fee_proportional_millionths(this.ptr, val);
@@ -54,7 +54,7 @@ public class ChannelConfig : CommonBase {
         * as of July 2021. Adjusting it upwards or downwards may change whether nodes route through
         * this node.
         * 
-        * Default value: 1000.
+        * Default value: `1000`
         * 
         * [`forwarding_fee_proportional_millionths`]: ChannelConfig::forwarding_fee_proportional_millionths
         */
@@ -74,7 +74,7 @@ public class ChannelConfig : CommonBase {
         * as of July 2021. Adjusting it upwards or downwards may change whether nodes route through
         * this node.
         * 
-        * Default value: 1000.
+        * Default value: `1000`
         * 
         * [`forwarding_fee_proportional_millionths`]: ChannelConfig::forwarding_fee_proportional_millionths
         */
@@ -99,9 +99,10 @@ public class ChannelConfig : CommonBase {
         * enough time to broadcast and confirm a transaction, possibly with time in between to RBF
         * the spending transaction).
         * 
-        * Default value: 72 (12 hours at an average of 6 blocks/hour).
-        * Minimum value: [`MIN_CLTV_EXPIRY_DELTA`], any values less than this will be treated as
-        * [`MIN_CLTV_EXPIRY_DELTA`] instead.
+        * Default value: `72` (12 hours at an average of 6 blocks/hour)
+        * 
+        * Minimum value: [`MIN_CLTV_EXPIRY_DELTA`] (Any values less than this will be treated as
+        * [`MIN_CLTV_EXPIRY_DELTA`] instead.)
         * 
         * [`MIN_CLTV_EXPIRY_DELTA`]: crate::ln::channelmanager::MIN_CLTV_EXPIRY_DELTA
         */
@@ -126,9 +127,10 @@ public class ChannelConfig : CommonBase {
         * enough time to broadcast and confirm a transaction, possibly with time in between to RBF
         * the spending transaction).
         * 
-        * Default value: 72 (12 hours at an average of 6 blocks/hour).
-        * Minimum value: [`MIN_CLTV_EXPIRY_DELTA`], any values less than this will be treated as
-        * [`MIN_CLTV_EXPIRY_DELTA`] instead.
+        * Default value: `72` (12 hours at an average of 6 blocks/hour)
+        * 
+        * Minimum value: [`MIN_CLTV_EXPIRY_DELTA`] (Any values less than this will be treated as
+        * [`MIN_CLTV_EXPIRY_DELTA`] instead.)
         * 
         * [`MIN_CLTV_EXPIRY_DELTA`]: crate::ln::channelmanager::MIN_CLTV_EXPIRY_DELTA
         */
@@ -187,12 +189,12 @@ public class ChannelConfig : CommonBase {
         * Note that when using [`MaxDustHTLCExposure::FeeRateMultiplier`] this maximum disagreement
         * will scale linearly with increases (or decreases) in the our feerate estimates. Further,
         * for anchor channels we expect our counterparty to use a relatively low feerate estimate
-        * while we use [`ConfirmationTarget::OnChainSweep`] (which should be relatively high) and
-        * feerate disagreement force-closures should only occur when theirs is higher than ours.
+        * while we use [`ConfirmationTarget::MaximumFeeEstimate`] (which should be relatively high)
+        * and feerate disagreement force-closures should only occur when theirs is higher than ours.
         * 
-        * Default value: [`MaxDustHTLCExposure::FeeRateMultiplier`] with a multiplier of 10_000.
+        * Default value: [`MaxDustHTLCExposure::FeeRateMultiplier`] with a multiplier of `10_000`
         * 
-        * [`ConfirmationTarget::OnChainSweep`]: crate::chain::chaininterface::ConfirmationTarget::OnChainSweep
+        * [`ConfirmationTarget::MaximumFeeEstimate`]: crate::chain::chaininterface::ConfirmationTarget::MaximumFeeEstimate
         */
        public MaxDustHTLCExposure get_max_dust_htlc_exposure() {
                long ret = bindings.ChannelConfig_get_max_dust_htlc_exposure(this.ptr);
@@ -252,18 +254,17 @@ public class ChannelConfig : CommonBase {
         * Note that when using [`MaxDustHTLCExposure::FeeRateMultiplier`] this maximum disagreement
         * will scale linearly with increases (or decreases) in the our feerate estimates. Further,
         * for anchor channels we expect our counterparty to use a relatively low feerate estimate
-        * while we use [`ConfirmationTarget::OnChainSweep`] (which should be relatively high) and
-        * feerate disagreement force-closures should only occur when theirs is higher than ours.
+        * while we use [`ConfirmationTarget::MaximumFeeEstimate`] (which should be relatively high)
+        * and feerate disagreement force-closures should only occur when theirs is higher than ours.
         * 
-        * Default value: [`MaxDustHTLCExposure::FeeRateMultiplier`] with a multiplier of 10_000.
+        * Default value: [`MaxDustHTLCExposure::FeeRateMultiplier`] with a multiplier of `10_000`
         * 
-        * [`ConfirmationTarget::OnChainSweep`]: crate::chain::chaininterface::ConfirmationTarget::OnChainSweep
+        * [`ConfirmationTarget::MaximumFeeEstimate`]: crate::chain::chaininterface::ConfirmationTarget::MaximumFeeEstimate
         */
        public void set_max_dust_htlc_exposure(org.ldk.structs.MaxDustHTLCExposure val) {
                bindings.ChannelConfig_set_max_dust_htlc_exposure(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -285,7 +286,7 @@ public class ChannelConfig : CommonBase {
         * [`ChannelCloseMinimum`] fee estimate, but allow our counterparty to pay as much fee as they like.
         * Thus, this value is ignored when we are not the funder.
         * 
-        * Default value: 1000 satoshis.
+        * Default value: `1000`
         * 
         * [`NonAnchorChannelFee`]: crate::chain::chaininterface::ConfirmationTarget::NonAnchorChannelFee
         * [`ChannelCloseMinimum`]: crate::chain::chaininterface::ConfirmationTarget::ChannelCloseMinimum
@@ -315,7 +316,7 @@ public class ChannelConfig : CommonBase {
         * [`ChannelCloseMinimum`] fee estimate, but allow our counterparty to pay as much fee as they like.
         * Thus, this value is ignored when we are not the funder.
         * 
-        * Default value: 1000 satoshis.
+        * Default value: `1000`
         * 
         * [`NonAnchorChannelFee`]: crate::chain::chaininterface::ConfirmationTarget::NonAnchorChannelFee
         * [`ChannelCloseMinimum`]: crate::chain::chaininterface::ConfirmationTarget::ChannelCloseMinimum
@@ -350,7 +351,7 @@ public class ChannelConfig : CommonBase {
         * Switching this config flag on may break compatibility with versions of LDK prior to 0.0.116.
         * Unsetting this flag between restarts may lead to payment receive failures.
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [intercept scids]: crate::ln::channelmanager::ChannelManager::get_intercept_scid
         * [`forward_intercepted_htlc`]: crate::ln::channelmanager::ChannelManager::forward_intercepted_htlc
@@ -389,7 +390,7 @@ public class ChannelConfig : CommonBase {
         * Switching this config flag on may break compatibility with versions of LDK prior to 0.0.116.
         * Unsetting this flag between restarts may lead to payment receive failures.
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [intercept scids]: crate::ln::channelmanager::ChannelManager::get_intercept_scid
         * [`forward_intercepted_htlc`]: crate::ln::channelmanager::ChannelManager::forward_intercepted_htlc
@@ -418,7 +419,6 @@ public class ChannelConfig : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelConfig ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelConfig(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(max_dust_htlc_exposure_arg); };
                return ret_hu_conv;
        }
 
index 03dcff3fc4e42cbc3868bcaf24fd770581c1de04..88eb754847d61dfd909a414402e7a18c1ac85f60 100644 (file)
@@ -28,7 +28,6 @@ public class ChannelConfigUpdate : CommonBase {
                bindings.ChannelConfigUpdate_set_forwarding_fee_proportional_millionths(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        public Option_u32Z get_forwarding_fee_base_msat() {
@@ -44,7 +43,6 @@ public class ChannelConfigUpdate : CommonBase {
                bindings.ChannelConfigUpdate_set_forwarding_fee_base_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        public Option_u16Z get_cltv_expiry_delta() {
@@ -60,7 +58,6 @@ public class ChannelConfigUpdate : CommonBase {
                bindings.ChannelConfigUpdate_set_cltv_expiry_delta(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -79,7 +76,6 @@ public class ChannelConfigUpdate : CommonBase {
                bindings.ChannelConfigUpdate_set_max_dust_htlc_exposure_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        public Option_u64Z get_force_close_avoidance_max_fee_satoshis() {
@@ -95,7 +91,6 @@ public class ChannelConfigUpdate : CommonBase {
                bindings.ChannelConfigUpdate_set_force_close_avoidance_max_fee_satoshis(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -111,22 +106,6 @@ public class ChannelConfigUpdate : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelConfigUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelConfigUpdate(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(forwarding_fee_proportional_millionths_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(forwarding_fee_base_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(cltv_expiry_delta_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(max_dust_htlc_exposure_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(force_close_avoidance_max_fee_satoshis_arg); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a "default" ChannelConfigUpdate. See struct and individual field documentaiton for details on which values are used.
-        */
-       public static ChannelConfigUpdate with_default() {
-               long ret = bindings.ChannelConfigUpdate_default();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ChannelConfigUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelConfigUpdate(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
                return ret_hu_conv;
        }
 
index 7768ddf9b07d13816cb453459defc74cac8a08fb..4bcad0d74feb6035361b9d81ceb865fa31bdd2e8 100644 (file)
@@ -59,7 +59,6 @@ public class ChannelCounterparty : CommonBase {
                bindings.ChannelCounterparty_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -117,7 +116,6 @@ public class ChannelCounterparty : CommonBase {
                bindings.ChannelCounterparty_set_forwarding_info(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -143,7 +141,6 @@ public class ChannelCounterparty : CommonBase {
                bindings.ChannelCounterparty_set_outbound_htlc_minimum_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -165,7 +162,6 @@ public class ChannelCounterparty : CommonBase {
                bindings.ChannelCounterparty_set_outbound_htlc_maximum_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -184,10 +180,6 @@ public class ChannelCounterparty : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelCounterparty ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelCounterparty(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(forwarding_info_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outbound_htlc_minimum_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outbound_htlc_maximum_msat_arg); };
                return ret_hu_conv;
        }
 
index 79775c844ee7278e2c1da4cd92a8eac183446b2d..deb9aaf2504b8f2470ecf5f394243ce64aef1270 100644 (file)
@@ -74,7 +74,6 @@ public class ChannelDerivationParameters : CommonBase {
                bindings.ChannelDerivationParameters_set_transaction_parameters(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -88,7 +87,6 @@ public class ChannelDerivationParameters : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelDerivationParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelDerivationParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(transaction_parameters_arg); };
                return ret_hu_conv;
        }
 
index 4fdf88de7122d6486d25e6fb1a852b363f32c901..e5019e39d5df70037e6295a918c6b75f96b77862 100644 (file)
@@ -9,8 +9,14 @@ namespace org { namespace ldk { namespace structs {
 /**
  * Details of a channel, as returned by [`ChannelManager::list_channels`] and [`ChannelManager::list_usable_channels`]
  * 
+ * Balances of a channel are available through [`ChainMonitor::get_claimable_balances`] and
+ * [`ChannelMonitor::get_claimable_balances`], calculated with respect to the corresponding on-chain
+ * transactions.
+ * 
  * [`ChannelManager::list_channels`]: crate::ln::channelmanager::ChannelManager::list_channels
  * [`ChannelManager::list_usable_channels`]: crate::ln::channelmanager::ChannelManager::list_usable_channels
+ * [`ChainMonitor::get_claimable_balances`]: crate::chain::chainmonitor::ChainMonitor::get_claimable_balances
+ * [`ChannelMonitor::get_claimable_balances`]: crate::chain::channelmonitor::ChannelMonitor::get_claimable_balances
  */
 public class ChannelDetails : CommonBase {
        internal ChannelDetails(object _dummy, long ptr) : base(ptr) { }
@@ -43,7 +49,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -65,7 +70,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_counterparty(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -93,7 +97,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_funding_txo(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -123,7 +126,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_channel_type(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -171,7 +173,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_short_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -209,7 +210,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_outbound_scid_alias(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -247,7 +247,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_inbound_scid_alias(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -303,7 +302,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_unspendable_punishment_reserve(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -367,7 +365,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_feerate_sat_per_1000_weight(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -569,7 +566,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_confirmations_required(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -595,7 +591,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_confirmations(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -629,7 +624,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_force_close_spend_delay(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -703,7 +697,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_channel_shutdown_state(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -733,8 +726,8 @@ public class ChannelDetails : CommonBase {
        /**
         * True if this channel is (or will be) publicly-announced.
         */
-       public bool get_is_public() {
-               bool ret = bindings.ChannelDetails_get_is_public(this.ptr);
+       public bool get_is_announced() {
+               bool ret = bindings.ChannelDetails_get_is_announced(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
@@ -742,8 +735,8 @@ public class ChannelDetails : CommonBase {
        /**
         * True if this channel is (or will be) publicly-announced.
         */
-       public void set_is_public(bool val) {
-               bindings.ChannelDetails_set_is_public(this.ptr, val);
+       public void set_is_announced(bool val) {
+               bindings.ChannelDetails_set_is_announced(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
@@ -769,7 +762,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_inbound_htlc_minimum_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -791,7 +783,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_inbound_htlc_maximum_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -821,7 +812,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_config(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -854,7 +844,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_pending_inbound_htlcs(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_20 => val_conv_20.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (InboundHTLCDetails val_conv_20 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_20); }; };
        }
 
        /**
@@ -887,7 +876,6 @@ public class ChannelDetails : CommonBase {
                bindings.ChannelDetails_set_pending_outbound_htlcs(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_21 => val_conv_21.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (OutboundHTLCDetails val_conv_21 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_21); }; };
        }
 
        /**
@@ -897,8 +885,8 @@ public class ChannelDetails : CommonBase {
         * Note that channel_type_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         * Note that config_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ChannelDetails of(org.ldk.structs.ChannelId channel_id_arg, org.ldk.structs.ChannelCounterparty counterparty_arg, org.ldk.structs.OutPoint funding_txo_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.structs.Option_u64Z short_channel_id_arg, org.ldk.structs.Option_u64Z outbound_scid_alias_arg, org.ldk.structs.Option_u64Z inbound_scid_alias_arg, long channel_value_satoshis_arg, org.ldk.structs.Option_u64Z unspendable_punishment_reserve_arg, org.ldk.util.UInt128 user_channel_id_arg, org.ldk.structs.Option_u32Z feerate_sat_per_1000_weight_arg, long balance_msat_arg, long outbound_capacity_msat_arg, long next_outbound_htlc_limit_msat_arg, long next_outbound_htlc_minimum_msat_arg, long inbound_capacity_msat_arg, org.ldk.structs.Option_u32Z confirmations_required_arg, org.ldk.structs.Option_u32Z confirmations_arg, org.ldk.structs.Option_u16Z force_close_spend_delay_arg, bool is_outbound_arg, bool is_channel_ready_arg, org.ldk.structs.Option_ChannelShutdownStateZ channel_shutdown_state_arg, bool is_usable_arg, bool is_public_arg, org.ldk.structs.Option_u64Z inbound_htlc_minimum_msat_arg, org.ldk.structs.Option_u64Z inbound_htlc_maximum_msat_arg, org.ldk.structs.ChannelConfig config_arg, InboundHTLCDetails[] pending_inbound_htlcs_arg, OutboundHTLCDetails[] pending_outbound_htlcs_arg) {
-               long ret = bindings.ChannelDetails_new(channel_id_arg.ptr, counterparty_arg.ptr, funding_txo_arg == null ? 0 : funding_txo_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr, short_channel_id_arg.ptr, outbound_scid_alias_arg.ptr, inbound_scid_alias_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, InternalUtils.encodeUint8Array(user_channel_id_arg.getLEBytes()), feerate_sat_per_1000_weight_arg.ptr, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, confirmations_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg.ptr, is_usable_arg, is_public_arg, inbound_htlc_minimum_msat_arg.ptr, inbound_htlc_maximum_msat_arg.ptr, config_arg == null ? 0 : config_arg.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(pending_inbound_htlcs_arg, pending_inbound_htlcs_arg_conv_20 => pending_inbound_htlcs_arg_conv_20.ptr)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(pending_outbound_htlcs_arg, pending_outbound_htlcs_arg_conv_21 => pending_outbound_htlcs_arg_conv_21.ptr)));
+       public static ChannelDetails of(org.ldk.structs.ChannelId channel_id_arg, org.ldk.structs.ChannelCounterparty counterparty_arg, org.ldk.structs.OutPoint funding_txo_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.structs.Option_u64Z short_channel_id_arg, org.ldk.structs.Option_u64Z outbound_scid_alias_arg, org.ldk.structs.Option_u64Z inbound_scid_alias_arg, long channel_value_satoshis_arg, org.ldk.structs.Option_u64Z unspendable_punishment_reserve_arg, org.ldk.util.UInt128 user_channel_id_arg, org.ldk.structs.Option_u32Z feerate_sat_per_1000_weight_arg, long balance_msat_arg, long outbound_capacity_msat_arg, long next_outbound_htlc_limit_msat_arg, long next_outbound_htlc_minimum_msat_arg, long inbound_capacity_msat_arg, org.ldk.structs.Option_u32Z confirmations_required_arg, org.ldk.structs.Option_u32Z confirmations_arg, org.ldk.structs.Option_u16Z force_close_spend_delay_arg, bool is_outbound_arg, bool is_channel_ready_arg, org.ldk.structs.Option_ChannelShutdownStateZ channel_shutdown_state_arg, bool is_usable_arg, bool is_announced_arg, org.ldk.structs.Option_u64Z inbound_htlc_minimum_msat_arg, org.ldk.structs.Option_u64Z inbound_htlc_maximum_msat_arg, org.ldk.structs.ChannelConfig config_arg, InboundHTLCDetails[] pending_inbound_htlcs_arg, OutboundHTLCDetails[] pending_outbound_htlcs_arg) {
+               long ret = bindings.ChannelDetails_new(channel_id_arg.ptr, counterparty_arg.ptr, funding_txo_arg == null ? 0 : funding_txo_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr, short_channel_id_arg.ptr, outbound_scid_alias_arg.ptr, inbound_scid_alias_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, InternalUtils.encodeUint8Array(user_channel_id_arg.getLEBytes()), feerate_sat_per_1000_weight_arg.ptr, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, confirmations_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg.ptr, is_usable_arg, is_announced_arg, inbound_htlc_minimum_msat_arg.ptr, inbound_htlc_maximum_msat_arg.ptr, config_arg == null ? 0 : config_arg.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(pending_inbound_htlcs_arg, pending_inbound_htlcs_arg_conv_20 => pending_inbound_htlcs_arg_conv_20.ptr)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(pending_outbound_htlcs_arg, pending_outbound_htlcs_arg_conv_21 => pending_outbound_htlcs_arg_conv_21.ptr)));
                GC.KeepAlive(channel_id_arg);
                GC.KeepAlive(counterparty_arg);
                GC.KeepAlive(funding_txo_arg);
@@ -922,7 +910,7 @@ public class ChannelDetails : CommonBase {
                GC.KeepAlive(is_channel_ready_arg);
                GC.KeepAlive(channel_shutdown_state_arg);
                GC.KeepAlive(is_usable_arg);
-               GC.KeepAlive(is_public_arg);
+               GC.KeepAlive(is_announced_arg);
                GC.KeepAlive(inbound_htlc_minimum_msat_arg);
                GC.KeepAlive(inbound_htlc_maximum_msat_arg);
                GC.KeepAlive(config_arg);
@@ -931,24 +919,6 @@ public class ChannelDetails : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelDetails(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(counterparty_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_txo_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(short_channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outbound_scid_alias_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(inbound_scid_alias_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(unspendable_punishment_reserve_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(feerate_sat_per_1000_weight_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(confirmations_required_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(confirmations_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(force_close_spend_delay_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_shutdown_state_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(inbound_htlc_minimum_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(inbound_htlc_maximum_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(config_arg); };
-               foreach (InboundHTLCDetails pending_inbound_htlcs_arg_conv_20 in pending_inbound_htlcs_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(pending_inbound_htlcs_arg_conv_20); }; };
-               foreach (OutboundHTLCDetails pending_outbound_htlcs_arg_conv_21 in pending_outbound_htlcs_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(pending_outbound_htlcs_arg_conv_21); }; };
                return ret_hu_conv;
        }
 
index 29956b1534ab37c3477e711ed716563ff3ae65f9..5d7307770365589f8bbd69a6ca6e21dcc33cfbb3 100644 (file)
@@ -15,6 +15,28 @@ public class ChannelFeatures : CommonBase {
                if (ptr != 0) { bindings.ChannelFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the ChannelFeatures object into a byte array which can be read by ChannelFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.ChannelFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a ChannelFeatures from a byte array, created by ChannelFeatures_write
+        */
+       public static Result_ChannelFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.ChannelFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two ChannelFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -73,6 +95,27 @@ public class ChannelFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.ChannelFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.ChannelFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +127,19 @@ public class ChannelFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.ChannelFeatures other) {
+               long ret = bindings.ChannelFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +150,15 @@ public class ChannelFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.ChannelFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -166,27 +231,5 @@ public class ChannelFeatures : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Serialize the ChannelFeatures object into a byte array which can be read by ChannelFeatures_read
-        */
-       public byte[] write() {
-               long ret = bindings.ChannelFeatures_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a ChannelFeatures from a byte array, created by ChannelFeatures_write
-        */
-       public static Result_ChannelFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.ChannelFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ChannelFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
 }
 } } }
index dc7f352f8363acca0d0ca164a8ffb13583062fd7..a5c6f9a656dd3966c1132b29897352da528fe9c8 100644 (file)
@@ -9,7 +9,7 @@ namespace org { namespace ldk { namespace structs {
 /**
  * Configuration we set when applicable.
  * 
- * Default::default() provides sane defaults.
+ * `Default::default()` provides sane defaults.
  */
 public class ChannelHandshakeConfig : CommonBase {
        internal ChannelHandshakeConfig(object _dummy, long ptr) : base(ptr) { }
@@ -19,15 +19,15 @@ public class ChannelHandshakeConfig : CommonBase {
 
        /**
         * Confirmations we will wait for before considering the channel locked in.
-        * Applied only for inbound channels (see ChannelHandshakeLimits::max_minimum_depth for the
+        * Applied only for inbound channels (see [`ChannelHandshakeLimits::max_minimum_depth`] for the
         * equivalent limit applied to outbound channels).
         * 
-        * A lower-bound of 1 is applied, requiring all channels to have a confirmed commitment
+        * A lower-bound of `1` is applied, requiring all channels to have a confirmed commitment
         * transaction before operation. If you wish to accept channels with zero confirmations, see
         * [`UserConfig::manually_accept_inbound_channels`] and
         * [`ChannelManager::accept_inbound_channel_from_trusted_peer_0conf`].
         * 
-        * Default value: 6.
+        * Default value: `6`
         * 
         * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
         * [`ChannelManager::accept_inbound_channel_from_trusted_peer_0conf`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel_from_trusted_peer_0conf
@@ -40,15 +40,15 @@ public class ChannelHandshakeConfig : CommonBase {
 
        /**
         * Confirmations we will wait for before considering the channel locked in.
-        * Applied only for inbound channels (see ChannelHandshakeLimits::max_minimum_depth for the
+        * Applied only for inbound channels (see [`ChannelHandshakeLimits::max_minimum_depth`] for the
         * equivalent limit applied to outbound channels).
         * 
-        * A lower-bound of 1 is applied, requiring all channels to have a confirmed commitment
+        * A lower-bound of `1` is applied, requiring all channels to have a confirmed commitment
         * transaction before operation. If you wish to accept channels with zero confirmations, see
         * [`UserConfig::manually_accept_inbound_channels`] and
         * [`ChannelManager::accept_inbound_channel_from_trusted_peer_0conf`].
         * 
-        * Default value: 6.
+        * Default value: `6`
         * 
         * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
         * [`ChannelManager::accept_inbound_channel_from_trusted_peer_0conf`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel_from_trusted_peer_0conf
@@ -73,8 +73,8 @@ public class ChannelHandshakeConfig : CommonBase {
         * case of an honest unilateral channel close, which implicitly decrease the economic value of
         * our channel.
         * 
-        * Default value: [`BREAKDOWN_TIMEOUT`], we enforce it as a minimum at channel opening so you
-        * can tweak config to ask for more security, not less.
+        * Default value: [`BREAKDOWN_TIMEOUT`] (We enforce it as a minimum at channel opening so you
+        * can tweak config to ask for more security, not less.)
         */
        public short get_our_to_self_delay() {
                short ret = bindings.ChannelHandshakeConfig_get_our_to_self_delay(this.ptr);
@@ -96,8 +96,8 @@ public class ChannelHandshakeConfig : CommonBase {
         * case of an honest unilateral channel close, which implicitly decrease the economic value of
         * our channel.
         * 
-        * Default value: [`BREAKDOWN_TIMEOUT`], we enforce it as a minimum at channel opening so you
-        * can tweak config to ask for more security, not less.
+        * Default value: [`BREAKDOWN_TIMEOUT`] (We enforce it as a minimum at channel opening so you
+        * can tweak config to ask for more security, not less.)
         */
        public void set_our_to_self_delay(short val) {
                bindings.ChannelHandshakeConfig_set_our_to_self_delay(this.ptr, val);
@@ -111,8 +111,8 @@ public class ChannelHandshakeConfig : CommonBase {
         * This value is sent to our counterparty on channel-open and we close the channel any time
         * our counterparty misbehaves by sending us an HTLC with a value smaller than this.
         * 
-        * Default value: 1. If the value is less than 1, it is ignored and set to 1, as is required
-        * by the protocol.
+        * Default value: `1` (If the value is less than `1`, it is ignored and set to `1`, as is
+        * required by the protocol.
         */
        public long get_our_htlc_minimum_msat() {
                long ret = bindings.ChannelHandshakeConfig_get_our_htlc_minimum_msat(this.ptr);
@@ -126,8 +126,8 @@ public class ChannelHandshakeConfig : CommonBase {
         * This value is sent to our counterparty on channel-open and we close the channel any time
         * our counterparty misbehaves by sending us an HTLC with a value smaller than this.
         * 
-        * Default value: 1. If the value is less than 1, it is ignored and set to 1, as is required
-        * by the protocol.
+        * Default value: `1` (If the value is less than `1`, it is ignored and set to `1`, as is
+        * required by the protocol.
         */
        public void set_our_htlc_minimum_msat(long val) {
                bindings.ChannelHandshakeConfig_set_our_htlc_minimum_msat(this.ptr, val);
@@ -143,7 +143,7 @@ public class ChannelHandshakeConfig : CommonBase {
         * channel value in whole percentages.
         * 
         * Note that:
-        * If configured to another value than the default value 10, any new channels created with
+        * If configured to another value than the default value `10`, any new channels created with
         * the non default value will cause versions of LDK prior to 0.0.104 to refuse to read the
         * `ChannelManager`.
         * 
@@ -156,9 +156,11 @@ public class ChannelHandshakeConfig : CommonBase {
         * See [`ChannelHandshakeConfig::our_to_self_delay`] and [`ChannelConfig::cltv_expiry_delta`]
         * for more information.
         * 
-        * Default value: 10.
-        * Minimum value: 1, any values less than 1 will be treated as 1 instead.
-        * Maximum value: 100, any values larger than 100 will be treated as 100 instead.
+        * Default value: `10`
+        * 
+        * Minimum value: `1` (Any values less will be treated as `1` instead.)
+        * 
+        * Maximum value: `100` (Any values larger will be treated as `100` instead.)
         */
        public byte get_max_inbound_htlc_value_in_flight_percent_of_channel() {
                byte ret = bindings.ChannelHandshakeConfig_get_max_inbound_htlc_value_in_flight_percent_of_channel(this.ptr);
@@ -174,7 +176,7 @@ public class ChannelHandshakeConfig : CommonBase {
         * channel value in whole percentages.
         * 
         * Note that:
-        * If configured to another value than the default value 10, any new channels created with
+        * If configured to another value than the default value `10`, any new channels created with
         * the non default value will cause versions of LDK prior to 0.0.104 to refuse to read the
         * `ChannelManager`.
         * 
@@ -187,9 +189,11 @@ public class ChannelHandshakeConfig : CommonBase {
         * See [`ChannelHandshakeConfig::our_to_self_delay`] and [`ChannelConfig::cltv_expiry_delta`]
         * for more information.
         * 
-        * Default value: 10.
-        * Minimum value: 1, any values less than 1 will be treated as 1 instead.
-        * Maximum value: 100, any values larger than 100 will be treated as 100 instead.
+        * Default value: `10`
+        * 
+        * Minimum value: `1` (Any values less will be treated as `1` instead.)
+        * 
+        * Maximum value: `100` (Any values larger will be treated as `100` instead.)
         */
        public void set_max_inbound_htlc_value_in_flight_percent_of_channel(byte val) {
                bindings.ChannelHandshakeConfig_set_max_inbound_htlc_value_in_flight_percent_of_channel(this.ptr, val);
@@ -212,10 +216,10 @@ public class ChannelHandshakeConfig : CommonBase {
         * private channel without that option.
         * 
         * Ignored if the channel is negotiated to be announced, see
-        * [`ChannelHandshakeConfig::announced_channel`] and
+        * [`ChannelHandshakeConfig::announce_for_forwarding`] and
         * [`ChannelHandshakeLimits::force_announced_channel_preference`] for more.
         * 
-        * Default value: false. This value is likely to change to true in the future.
+        * Default value: `false` (This value is likely to change to `true` in the future.)
         * 
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         * [`DecodeError::InvalidValue`]: crate::ln::msgs::DecodeError::InvalidValue
@@ -241,10 +245,10 @@ public class ChannelHandshakeConfig : CommonBase {
         * private channel without that option.
         * 
         * Ignored if the channel is negotiated to be announced, see
-        * [`ChannelHandshakeConfig::announced_channel`] and
+        * [`ChannelHandshakeConfig::announce_for_forwarding`] and
         * [`ChannelHandshakeLimits::force_announced_channel_preference`] for more.
         * 
-        * Default value: false. This value is likely to change to true in the future.
+        * Default value: `false` (This value is likely to change to `true` in the future.)
         * 
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         * [`DecodeError::InvalidValue`]: crate::ln::msgs::DecodeError::InvalidValue
@@ -264,10 +268,10 @@ public class ChannelHandshakeConfig : CommonBase {
         * As the node which funds a channel picks this value this will only apply for new outbound
         * channels unless [`ChannelHandshakeLimits::force_announced_channel_preference`] is set.
         * 
-        * Default value: false.
+        * Default value: `false`
         */
-       public bool get_announced_channel() {
-               bool ret = bindings.ChannelHandshakeConfig_get_announced_channel(this.ptr);
+       public bool get_announce_for_forwarding() {
+               bool ret = bindings.ChannelHandshakeConfig_get_announce_for_forwarding(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
@@ -281,10 +285,10 @@ public class ChannelHandshakeConfig : CommonBase {
         * As the node which funds a channel picks this value this will only apply for new outbound
         * channels unless [`ChannelHandshakeLimits::force_announced_channel_preference`] is set.
         * 
-        * Default value: false.
+        * Default value: `false`
         */
-       public void set_announced_channel(bool val) {
-               bindings.ChannelHandshakeConfig_set_announced_channel(this.ptr, val);
+       public void set_announce_for_forwarding(bool val) {
+               bindings.ChannelHandshakeConfig_set_announce_for_forwarding(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
@@ -300,7 +304,7 @@ public class ChannelHandshakeConfig : CommonBase {
         * 
         * The upfront key committed is provided from [`SignerProvider::get_shutdown_scriptpubkey`].
         * 
-        * Default value: true.
+        * Default value: `true`
         * 
         * [`SignerProvider::get_shutdown_scriptpubkey`]: crate::sign::SignerProvider::get_shutdown_scriptpubkey
         */
@@ -321,7 +325,7 @@ public class ChannelHandshakeConfig : CommonBase {
         * 
         * The upfront key committed is provided from [`SignerProvider::get_shutdown_scriptpubkey`].
         * 
-        * Default value: true.
+        * Default value: `true`
         * 
         * [`SignerProvider::get_shutdown_scriptpubkey`]: crate::sign::SignerProvider::get_shutdown_scriptpubkey
         */
@@ -349,11 +353,15 @@ public class ChannelHandshakeConfig : CommonBase {
         * Note: Versions of LDK earlier than v0.0.104 will fail to read channels with any channel reserve
         * other than the default value.
         * 
-        * Default value: 1% of channel value, i.e., configured as 10,000 millionths.
-        * Minimum value: If the calculated proportional value is less than 1000 sats, it will be treated
-        * as 1000 sats instead, which is a safe implementation-specific lower bound.
-        * Maximum value: 1,000,000, any values larger than 1 Million will be treated as 1 Million (or 100%)
-        * instead, although channel negotiations will fail in that case.
+        * Default value: `10_000` millionths (i.e., 1% of channel value)
+        * 
+        * Minimum value: If the calculated proportional value is less than `1000` sats, it will be
+        * treated as `1000` sats instead, which is a safe implementation-specific lower
+        * bound.
+        * 
+        * Maximum value: `1_000_000` (i.e., 100% of channel value. Any values larger than one million
+        * will be treated as one million instead, although channel negotiations will
+        * fail in that case.)
         */
        public int get_their_channel_reserve_proportional_millionths() {
                int ret = bindings.ChannelHandshakeConfig_get_their_channel_reserve_proportional_millionths(this.ptr);
@@ -379,11 +387,15 @@ public class ChannelHandshakeConfig : CommonBase {
         * Note: Versions of LDK earlier than v0.0.104 will fail to read channels with any channel reserve
         * other than the default value.
         * 
-        * Default value: 1% of channel value, i.e., configured as 10,000 millionths.
-        * Minimum value: If the calculated proportional value is less than 1000 sats, it will be treated
-        * as 1000 sats instead, which is a safe implementation-specific lower bound.
-        * Maximum value: 1,000,000, any values larger than 1 Million will be treated as 1 Million (or 100%)
-        * instead, although channel negotiations will fail in that case.
+        * Default value: `10_000` millionths (i.e., 1% of channel value)
+        * 
+        * Minimum value: If the calculated proportional value is less than `1000` sats, it will be
+        * treated as `1000` sats instead, which is a safe implementation-specific lower
+        * bound.
+        * 
+        * Maximum value: `1_000_000` (i.e., 100% of channel value. Any values larger than one million
+        * will be treated as one million instead, although channel negotiations will
+        * fail in that case.)
         */
        public void set_their_channel_reserve_proportional_millionths(int val) {
                bindings.ChannelHandshakeConfig_set_their_channel_reserve_proportional_millionths(this.ptr, val);
@@ -414,7 +426,7 @@ public class ChannelHandshakeConfig : CommonBase {
         * vulnerability after its deployment. For more context, see the [`SIGHASH_SINGLE + update_fee
         * Considered Harmful`] mailing list post.
         * 
-        * Default value: false. This value is likely to change to true in the future.
+        * Default value: `false` (This value is likely to change to `true` in the future.)
         * 
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
@@ -450,7 +462,7 @@ public class ChannelHandshakeConfig : CommonBase {
         * vulnerability after its deployment. For more context, see the [`SIGHASH_SINGLE + update_fee
         * Considered Harmful`] mailing list post.
         * 
-        * Default value: false. This value is likely to change to true in the future.
+        * Default value: `false` (This value is likely to change to `true` in the future.)
         * 
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
@@ -472,9 +484,10 @@ public class ChannelHandshakeConfig : CommonBase {
         * Note: Versions of LDK earlier than v0.0.115 will fail to read channels with a configuration
         * other than the default value.
         * 
-        * Default value: 50
-        * Maximum value: 483, any values larger will be treated as 483.
-        * This is the BOLT #2 spec limit on `max_accepted_htlcs`.
+        * Default value: `50`
+        * 
+        * Maximum value: `483` (Any values larger will be treated as `483`. This is the BOLT #2 spec
+        * limit on `max_accepted_htlcs`.)
         */
        public short get_our_max_accepted_htlcs() {
                short ret = bindings.ChannelHandshakeConfig_get_our_max_accepted_htlcs(this.ptr);
@@ -491,9 +504,10 @@ public class ChannelHandshakeConfig : CommonBase {
         * Note: Versions of LDK earlier than v0.0.115 will fail to read channels with a configuration
         * other than the default value.
         * 
-        * Default value: 50
-        * Maximum value: 483, any values larger will be treated as 483.
-        * This is the BOLT #2 spec limit on `max_accepted_htlcs`.
+        * Default value: `50`
+        * 
+        * Maximum value: `483` (Any values larger will be treated as `483`. This is the BOLT #2 spec
+        * limit on `max_accepted_htlcs`.)
         */
        public void set_our_max_accepted_htlcs(short val) {
                bindings.ChannelHandshakeConfig_set_our_max_accepted_htlcs(this.ptr, val);
@@ -504,14 +518,14 @@ public class ChannelHandshakeConfig : CommonBase {
        /**
         * Constructs a new ChannelHandshakeConfig given each field
         */
-       public static ChannelHandshakeConfig of(int minimum_depth_arg, short our_to_self_delay_arg, long our_htlc_minimum_msat_arg, byte max_inbound_htlc_value_in_flight_percent_of_channel_arg, bool negotiate_scid_privacy_arg, bool announced_channel_arg, bool commit_upfront_shutdown_pubkey_arg, int their_channel_reserve_proportional_millionths_arg, bool negotiate_anchors_zero_fee_htlc_tx_arg, short our_max_accepted_htlcs_arg) {
-               long ret = bindings.ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg, max_inbound_htlc_value_in_flight_percent_of_channel_arg, negotiate_scid_privacy_arg, announced_channel_arg, commit_upfront_shutdown_pubkey_arg, their_channel_reserve_proportional_millionths_arg, negotiate_anchors_zero_fee_htlc_tx_arg, our_max_accepted_htlcs_arg);
+       public static ChannelHandshakeConfig of(int minimum_depth_arg, short our_to_self_delay_arg, long our_htlc_minimum_msat_arg, byte max_inbound_htlc_value_in_flight_percent_of_channel_arg, bool negotiate_scid_privacy_arg, bool announce_for_forwarding_arg, bool commit_upfront_shutdown_pubkey_arg, int their_channel_reserve_proportional_millionths_arg, bool negotiate_anchors_zero_fee_htlc_tx_arg, short our_max_accepted_htlcs_arg) {
+               long ret = bindings.ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg, max_inbound_htlc_value_in_flight_percent_of_channel_arg, negotiate_scid_privacy_arg, announce_for_forwarding_arg, commit_upfront_shutdown_pubkey_arg, their_channel_reserve_proportional_millionths_arg, negotiate_anchors_zero_fee_htlc_tx_arg, our_max_accepted_htlcs_arg);
                GC.KeepAlive(minimum_depth_arg);
                GC.KeepAlive(our_to_self_delay_arg);
                GC.KeepAlive(our_htlc_minimum_msat_arg);
                GC.KeepAlive(max_inbound_htlc_value_in_flight_percent_of_channel_arg);
                GC.KeepAlive(negotiate_scid_privacy_arg);
-               GC.KeepAlive(announced_channel_arg);
+               GC.KeepAlive(announce_for_forwarding_arg);
                GC.KeepAlive(commit_upfront_shutdown_pubkey_arg);
                GC.KeepAlive(their_channel_reserve_proportional_millionths_arg);
                GC.KeepAlive(negotiate_anchors_zero_fee_htlc_tx_arg);
index 89360fbaa72169bc4bb10606b48d895b2df6bd57..1e472dccfbd736c0efba6e705eabb64ca16ea390 100644 (file)
@@ -11,7 +11,7 @@ namespace org { namespace ldk { namespace structs {
  * 
  * These limits are only applied to our counterparty's limits, not our own.
  * 
- * Use 0/`<type>::max_value()` as appropriate to skip checking.
+ * Use `0` or `<type>::max_value()` as appropriate to skip checking.
  * 
  * Provides sane defaults for most configurations.
  * 
@@ -29,7 +29,8 @@ public class ChannelHandshakeLimits : CommonBase {
         * Minimum allowed satoshis when a channel is funded. This is supplied by the sender and so
         * only applies to inbound channels.
         * 
-        * Default value: 0.
+        * Default value: `1000`
+        * (Minimum of [`ChannelHandshakeConfig::their_channel_reserve_proportional_millionths`])
         */
        public long get_min_funding_satoshis() {
                long ret = bindings.ChannelHandshakeLimits_get_min_funding_satoshis(this.ptr);
@@ -41,7 +42,8 @@ public class ChannelHandshakeLimits : CommonBase {
         * Minimum allowed satoshis when a channel is funded. This is supplied by the sender and so
         * only applies to inbound channels.
         * 
-        * Default value: 0.
+        * Default value: `1000`
+        * (Minimum of [`ChannelHandshakeConfig::their_channel_reserve_proportional_millionths`])
         */
        public void set_min_funding_satoshis(long val) {
                bindings.ChannelHandshakeLimits_set_min_funding_satoshis(this.ptr, val);
@@ -53,7 +55,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * Maximum allowed satoshis when a channel is funded. This is supplied by the sender and so
         * only applies to inbound channels.
         * 
-        * Default value: 2^24 - 1.
+        * Default value: `2^24 - 1`
         */
        public long get_max_funding_satoshis() {
                long ret = bindings.ChannelHandshakeLimits_get_max_funding_satoshis(this.ptr);
@@ -65,7 +67,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * Maximum allowed satoshis when a channel is funded. This is supplied by the sender and so
         * only applies to inbound channels.
         * 
-        * Default value: 2^24 - 1.
+        * Default value: `2^24 - 1`
         */
        public void set_max_funding_satoshis(long val) {
                bindings.ChannelHandshakeLimits_set_max_funding_satoshis(this.ptr, val);
@@ -77,7 +79,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * The remote node sets a limit on the minimum size of HTLCs we can send to them. This allows
         * you to limit the maximum minimum-size they can require.
         * 
-        * Default value: u64::max_value.
+        * Default value: `u64::max_value`
         */
        public long get_max_htlc_minimum_msat() {
                long ret = bindings.ChannelHandshakeLimits_get_max_htlc_minimum_msat(this.ptr);
@@ -89,7 +91,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * The remote node sets a limit on the minimum size of HTLCs we can send to them. This allows
         * you to limit the maximum minimum-size they can require.
         * 
-        * Default value: u64::max_value.
+        * Default value: `u64::max_value`
         */
        public void set_max_htlc_minimum_msat(long val) {
                bindings.ChannelHandshakeLimits_set_max_htlc_minimum_msat(this.ptr, val);
@@ -101,7 +103,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * The remote node sets a limit on the maximum value of pending HTLCs to them at any given
         * time to limit their funds exposure to HTLCs. This allows you to set a minimum such value.
         * 
-        * Default value: 0.
+        * Default value: `0`
         */
        public long get_min_max_htlc_value_in_flight_msat() {
                long ret = bindings.ChannelHandshakeLimits_get_min_max_htlc_value_in_flight_msat(this.ptr);
@@ -113,7 +115,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * The remote node sets a limit on the maximum value of pending HTLCs to them at any given
         * time to limit their funds exposure to HTLCs. This allows you to set a minimum such value.
         * 
-        * Default value: 0.
+        * Default value: `0`
         */
        public void set_min_max_htlc_value_in_flight_msat(long val) {
                bindings.ChannelHandshakeLimits_set_min_max_htlc_value_in_flight_msat(this.ptr, val);
@@ -126,7 +128,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * time, ensuring that we are able to be punished if we broadcast an old state. This allows to
         * you limit the amount which we will have to keep to ourselves (and cannot use for HTLCs).
         * 
-        * Default value: u64::max_value.
+        * Default value: `u64::max_value`.
         */
        public long get_max_channel_reserve_satoshis() {
                long ret = bindings.ChannelHandshakeLimits_get_max_channel_reserve_satoshis(this.ptr);
@@ -139,7 +141,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * time, ensuring that we are able to be punished if we broadcast an old state. This allows to
         * you limit the amount which we will have to keep to ourselves (and cannot use for HTLCs).
         * 
-        * Default value: u64::max_value.
+        * Default value: `u64::max_value`.
         */
        public void set_max_channel_reserve_satoshis(long val) {
                bindings.ChannelHandshakeLimits_set_max_channel_reserve_satoshis(this.ptr, val);
@@ -151,7 +153,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * The remote node sets a limit on the maximum number of pending HTLCs to them at any given
         * time. This allows you to set a minimum such value.
         * 
-        * Default value: 0.
+        * Default value: `0`
         */
        public short get_min_max_accepted_htlcs() {
                short ret = bindings.ChannelHandshakeLimits_get_min_max_accepted_htlcs(this.ptr);
@@ -163,7 +165,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * The remote node sets a limit on the maximum number of pending HTLCs to them at any given
         * time. This allows you to set a minimum such value.
         * 
-        * Default value: 0.
+        * Default value: `0`
         */
        public void set_min_max_accepted_htlcs(short val) {
                bindings.ChannelHandshakeLimits_set_min_max_accepted_htlcs(this.ptr, val);
@@ -177,7 +179,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * assume they aren't going to double-spend themselves).
         * This config allows you to set a limit on the maximum amount of time to wait.
         * 
-        * Default value: 144, or roughly one day and only applies to outbound channels.
+        * Default value: `144`, or roughly one day and only applies to outbound channels
         */
        public int get_max_minimum_depth() {
                int ret = bindings.ChannelHandshakeLimits_get_max_minimum_depth(this.ptr);
@@ -191,7 +193,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * assume they aren't going to double-spend themselves).
         * This config allows you to set a limit on the maximum amount of time to wait.
         * 
-        * Default value: 144, or roughly one day and only applies to outbound channels.
+        * Default value: `144`, or roughly one day and only applies to outbound channels
         */
        public void set_max_minimum_depth(int val) {
                bindings.ChannelHandshakeLimits_set_max_minimum_depth(this.ptr, val);
@@ -211,12 +213,12 @@ public class ChannelHandshakeLimits : CommonBase {
         * You may wish to un-set this if you allow the user to (or do in an automated fashion)
         * double-spend the funding transaction to RBF with an alternative channel open.
         * 
-        * This only applies if our counterparty set their confirmations-required value to 0, and we
-        * always trust our own funding transaction at 1 confirmation irrespective of this value.
+        * This only applies if our counterparty set their confirmations-required value to `0`, and we
+        * always trust our own funding transaction at `1` confirmation irrespective of this value.
         * Thus, this effectively acts as a `min_minimum_depth`, with the only possible values being
-        * `true` (0) and `false` (1).
+        * `true` (`0`) and `false` (`1`).
         * 
-        * Default value: true
+        * Default value: `true`
         */
        public bool get_trust_own_funding_0conf() {
                bool ret = bindings.ChannelHandshakeLimits_get_trust_own_funding_0conf(this.ptr);
@@ -236,12 +238,12 @@ public class ChannelHandshakeLimits : CommonBase {
         * You may wish to un-set this if you allow the user to (or do in an automated fashion)
         * double-spend the funding transaction to RBF with an alternative channel open.
         * 
-        * This only applies if our counterparty set their confirmations-required value to 0, and we
-        * always trust our own funding transaction at 1 confirmation irrespective of this value.
+        * This only applies if our counterparty set their confirmations-required value to `0`, and we
+        * always trust our own funding transaction at `1` confirmation irrespective of this value.
         * Thus, this effectively acts as a `min_minimum_depth`, with the only possible values being
-        * `true` (0) and `false` (1).
+        * `true` (`0`) and `false` (`1`).
         * 
-        * Default value: true
+        * Default value: `true`
         */
        public void set_trust_own_funding_0conf(bool val) {
                bindings.ChannelHandshakeLimits_set_trust_own_funding_0conf(this.ptr, val);
@@ -251,13 +253,13 @@ public class ChannelHandshakeLimits : CommonBase {
 
        /**
         * Set to force an incoming channel to match our announced channel preference in
-        * [`ChannelHandshakeConfig::announced_channel`].
+        * [`ChannelHandshakeConfig::announce_for_forwarding`].
         * 
         * For a node which is not online reliably, this should be set to true and
-        * [`ChannelHandshakeConfig::announced_channel`] set to false, ensuring that no announced (aka public)
+        * [`ChannelHandshakeConfig::announce_for_forwarding`] set to false, ensuring that no announced (aka public)
         * channels will ever be opened.
         * 
-        * Default value: true.
+        * Default value: `true`
         */
        public bool get_force_announced_channel_preference() {
                bool ret = bindings.ChannelHandshakeLimits_get_force_announced_channel_preference(this.ptr);
@@ -267,13 +269,13 @@ public class ChannelHandshakeLimits : CommonBase {
 
        /**
         * Set to force an incoming channel to match our announced channel preference in
-        * [`ChannelHandshakeConfig::announced_channel`].
+        * [`ChannelHandshakeConfig::announce_for_forwarding`].
         * 
         * For a node which is not online reliably, this should be set to true and
-        * [`ChannelHandshakeConfig::announced_channel`] set to false, ensuring that no announced (aka public)
+        * [`ChannelHandshakeConfig::announce_for_forwarding`] set to false, ensuring that no announced (aka public)
         * channels will ever be opened.
         * 
-        * Default value: true.
+        * Default value: `true`
         */
        public void set_force_announced_channel_preference(bool val) {
                bindings.ChannelHandshakeLimits_set_force_announced_channel_preference(this.ptr, val);
@@ -287,7 +289,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * Not checking this value would be a security issue, as our peer would be able to set it to
         * max relative lock-time (a year) and we would \"lose\" money as it would be locked for a long time.
         * 
-        * Default value: 2016, which we also enforce as a maximum value so you can tweak config to
+        * Default value: `2016`, which we also enforce as a maximum value so you can tweak config to
         * reduce the loss of having useless locked funds (if your peer accepts)
         */
        public short get_their_to_self_delay() {
@@ -302,7 +304,7 @@ public class ChannelHandshakeLimits : CommonBase {
         * Not checking this value would be a security issue, as our peer would be able to set it to
         * max relative lock-time (a year) and we would \"lose\" money as it would be locked for a long time.
         * 
-        * Default value: 2016, which we also enforce as a maximum value so you can tweak config to
+        * Default value: `2016`, which we also enforce as a maximum value so you can tweak config to
         * reduce the loss of having useless locked funds (if your peer accepts)
         */
        public void set_their_to_self_delay(short val) {
index b3615fe61fc984a4c437dacd23f2ec88b68121b8..d1f676fbfbbc46075762885f63ce6f7e5ce145a6 100644 (file)
@@ -117,7 +117,6 @@ public class ChannelId : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelId(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint); };
                return ret_hu_conv;
        }
 
index e1a30b942f3c4b7e0b106d3804b0fd165fead0ee..ec0efe9c148d2da2d911ad2005c2392e6c8ed766 100644 (file)
@@ -35,7 +35,6 @@ public class ChannelInfo : CommonBase {
                bindings.ChannelInfo_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -57,64 +56,57 @@ public class ChannelInfo : CommonBase {
                bindings.ChannelInfo_set_node_one(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
-        * Details about the first direction of a channel
-        * 
-        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Source node of the second direction of a channel
         */
-       public ChannelUpdateInfo get_one_to_two() {
-               long ret = bindings.ChannelInfo_get_one_to_two(this.ptr);
+       public NodeId get_node_two() {
+               long ret = bindings.ChannelInfo_get_node_two(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ChannelUpdateInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelUpdateInfo(null, ret); }
+               org.ldk.structs.NodeId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeId(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
        /**
-        * Details about the first direction of a channel
-        * 
-        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Source node of the second direction of a channel
         */
-       public void set_one_to_two(org.ldk.structs.ChannelUpdateInfo val) {
-               bindings.ChannelInfo_set_one_to_two(this.ptr, val == null ? 0 : val.ptr);
+       public void set_node_two(org.ldk.structs.NodeId val) {
+               bindings.ChannelInfo_set_node_two(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
-        * Source node of the second direction of a channel
+        * The channel capacity as seen on-chain, if chain lookup is available.
         */
-       public NodeId get_node_two() {
-               long ret = bindings.ChannelInfo_get_node_two(this.ptr);
+       public Option_u64Z get_capacity_sats() {
+               long ret = bindings.ChannelInfo_get_capacity_sats(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeId(null, ret); }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
        /**
-        * Source node of the second direction of a channel
+        * The channel capacity as seen on-chain, if chain lookup is available.
         */
-       public void set_node_two(org.ldk.structs.NodeId val) {
-               bindings.ChannelInfo_set_node_two(this.ptr, val.ptr);
+       public void set_capacity_sats(org.ldk.structs.Option_u64Z val) {
+               bindings.ChannelInfo_set_capacity_sats(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
-        * Details about the second direction of a channel
+        * Details about the first direction of a channel
         * 
         * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public ChannelUpdateInfo get_two_to_one() {
-               long ret = bindings.ChannelInfo_get_two_to_one(this.ptr);
+       public ChannelUpdateInfo get_one_to_two() {
+               long ret = bindings.ChannelInfo_get_one_to_two(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelUpdateInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelUpdateInfo(null, ret); }
@@ -123,37 +115,39 @@ public class ChannelInfo : CommonBase {
        }
 
        /**
-        * Details about the second direction of a channel
+        * Details about the first direction of a channel
         * 
         * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public void set_two_to_one(org.ldk.structs.ChannelUpdateInfo val) {
-               bindings.ChannelInfo_set_two_to_one(this.ptr, val == null ? 0 : val.ptr);
+       public void set_one_to_two(org.ldk.structs.ChannelUpdateInfo val) {
+               bindings.ChannelInfo_set_one_to_two(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
-        * The channel capacity as seen on-chain, if chain lookup is available.
+        * Details about the second direction of a channel
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public Option_u64Z get_capacity_sats() {
-               long ret = bindings.ChannelInfo_get_capacity_sats(this.ptr);
+       public ChannelUpdateInfo get_two_to_one() {
+               long ret = bindings.ChannelInfo_get_two_to_one(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               org.ldk.structs.ChannelUpdateInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelUpdateInfo(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
        /**
-        * The channel capacity as seen on-chain, if chain lookup is available.
+        * Details about the second direction of a channel
+        * 
+        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public void set_capacity_sats(org.ldk.structs.Option_u64Z val) {
-               bindings.ChannelInfo_set_capacity_sats(this.ptr, val.ptr);
+       public void set_two_to_one(org.ldk.structs.ChannelUpdateInfo val) {
+               bindings.ChannelInfo_set_two_to_one(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -185,7 +179,6 @@ public class ChannelInfo : CommonBase {
                bindings.ChannelInfo_set_announcement_message(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        internal long clone_ptr() {
index 0382bd758d0c30bc706848599917930dab733218..c43bc59c145199ca521e2cda785fc4c1a62515d5 100644 (file)
@@ -59,7 +59,7 @@ namespace org { namespace ldk { namespace structs {
  * 
  * ```
  * use bitcoin::BlockHash;
- * use bitcoin::network::constants::Network;
+ * use bitcoin::network::Network;
  * use lightning::chain::BestBlock;
  * # use lightning::chain::channelmonitor::ChannelMonitor;
  * use lightning::ln::channelmanager::{ChainParameters, ChannelManager, ChannelManagerReadArgs};
@@ -194,7 +194,8 @@ namespace org { namespace ldk { namespace structs {
  * }
  * 
  * On the event processing thread once the peer has responded
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::FundingGenerationReady {
  * temporary_channel_id, counterparty_node_id, channel_value_satoshis, output_script,
  * user_channel_id, ..
@@ -204,7 +205,7 @@ namespace org { namespace ldk { namespace structs {
  * channel_value_satoshis, output_script
  * );
  * match channel_manager.funding_transaction_generated(
- * &temporary_channel_id, &counterparty_node_id, funding_transaction
+ * temporary_channel_id, counterparty_node_id, funding_transaction
  * ) {
  * Ok(()) => println!(\"Funding channel {}\", temporary_channel_id),
  * Err(e) => println!(\"Error funding channel {}: {:?}\", temporary_channel_id, e),
@@ -223,6 +224,8 @@ namespace org { namespace ldk { namespace structs {
  * },
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -245,16 +248,18 @@ namespace org { namespace ldk { namespace structs {
  * #
  * # fn example<T: AChannelManager>(channel_manager: T) {
  * # let channel_manager = channel_manager.get_cm();
- * channel_manager.process_pending_events(&|event| match event {
+ * # let error_message = \"Channel force-closed\";
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::OpenChannelRequest { temporary_channel_id, counterparty_node_id, ..  } => {
  * if !is_trusted(counterparty_node_id) {
  * match channel_manager.force_close_without_broadcasting_txn(
- * &temporary_channel_id, &counterparty_node_id
+ * &temporary_channel_id, &counterparty_node_id, error_message.to_string()
  * ) {
  * Ok(()) => println!(\"Rejecting channel {}\", temporary_channel_id),
  * Err(e) => println!(\"Error rejecting channel {}: {:?}\", temporary_channel_id, e),
  * }
- * return;
+ * return Ok(());
  * }
  * 
  * let user_channel_id = 43;
@@ -267,6 +272,8 @@ namespace org { namespace ldk { namespace structs {
  * },
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -295,13 +302,16 @@ namespace org { namespace ldk { namespace structs {
  * }
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::ChannelClosed { channel_id, user_channel_id, ..  } => {
  * assert_eq!(user_channel_id, 42);
  * println!(\"Channel {} closed\", channel_id);
  * },
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -351,7 +361,8 @@ namespace org { namespace ldk { namespace structs {
  * };
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::PaymentClaimable { payment_hash, purpose, .. } => match purpose {
  * PaymentPurpose::Bolt11InvoicePayment { payment_preimage: Some(payment_preimage), .. } => {
  * assert_eq!(payment_hash, known_payment_hash);
@@ -367,14 +378,16 @@ namespace org { namespace ldk { namespace structs {
  * channel_manager.claim_funds(payment_preimage);
  * },
  * ...
- * #         _ => {},
+ * #           _ => {},
  * },
  * Event::PaymentClaimed { payment_hash, amount_msat, .. } => {
  * assert_eq!(payment_hash, known_payment_hash);
  * println!(\"Claimed {} msats\", amount_msat);
  * },
  * ...
- * #     _ => {},
+ * #       _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -417,11 +430,15 @@ namespace org { namespace ldk { namespace structs {
  * );
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::PaymentSent { payment_hash, .. } => println!(\"Paid {}\", payment_hash),
- * Event::PaymentFailed { payment_hash, .. } => println!(\"Failed paying {}\", payment_hash),
+ * Event::PaymentFailed { payment_hash: Some(payment_hash), .. } =>
+ * println!(\"Failed paying {}\", payment_hash),
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -442,8 +459,9 @@ namespace org { namespace ldk { namespace structs {
  * #
  * # fn example<T: AChannelManager>(channel_manager: T) -> Result<(), Bolt12SemanticError> {
  * # let channel_manager = channel_manager.get_cm();
+ * # let absolute_expiry = None;
  * let offer = channel_manager
- * .create_offer_builder()?
+ * .create_offer_builder(absolute_expiry)?
  * # ;
  * # // Needed for compiling for c_bindings
  * # let builder: lightning::offers::offer::OfferBuilder<_, _> = offer.into();
@@ -454,7 +472,8 @@ namespace org { namespace ldk { namespace structs {
  * let bech32_offer = offer.to_string();
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::PaymentClaimable { payment_hash, purpose, .. } => match purpose {
  * PaymentPurpose::Bolt12OfferPayment { payment_preimage: Some(payment_preimage), .. } => {
  * println!(\"Claiming payment {}\", payment_hash);
@@ -462,23 +481,23 @@ namespace org { namespace ldk { namespace structs {
  * },
  * PaymentPurpose::Bolt12OfferPayment { payment_preimage: None, .. } => {
  * println!(\"Unknown payment hash: {}\", payment_hash);
- * },
- * ...
- * #         _ => {},
+ * }
+ * #           _ => {},
  * },
  * Event::PaymentClaimed { payment_hash, amount_msat, .. } => {
  * println!(\"Claimed {} msats\", amount_msat);
  * },
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # Ok(())
  * # }
  * ```
  * 
  * Use [`pay_for_offer`] to initiated payment, which sends an [`InvoiceRequest`] for an [`Offer`]
- * and pays the [`Bolt12Invoice`] response. In addition to success and failure events,
- * [`ChannelManager`] may also generate an [`Event::InvoiceRequestFailed`].
+ * and pays the [`Bolt12Invoice`] response.
  * 
  * ```
  * # use lightning::events::{Event, EventsProvider};
@@ -516,12 +535,14 @@ namespace org { namespace ldk { namespace structs {
  * );
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::PaymentSent { payment_id: Some(payment_id), .. } => println!(\"Paid {}\", payment_id),
  * Event::PaymentFailed { payment_id, .. } => println!(\"Failed paying {}\", payment_id),
- * Event::InvoiceRequestFailed { payment_id, .. } => println!(\"Failed paying {}\", payment_id),
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -576,11 +597,14 @@ namespace org { namespace ldk { namespace structs {
  * );
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::PaymentSent { payment_id: Some(payment_id), .. } => println!(\"Paid {}\", payment_id),
  * Event::PaymentFailed { payment_id, .. } => println!(\"Failed paying {}\", payment_id),
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # Ok(())
  * # }
@@ -606,18 +630,19 @@ namespace org { namespace ldk { namespace structs {
  * };
  * 
  * On the event processing thread
- * channel_manager.process_pending_events(&|event| match event {
+ * channel_manager.process_pending_events(&|event| {
+ * match event {
  * Event::PaymentClaimable { payment_hash, purpose, .. } => match purpose {
- * \tPaymentPurpose::Bolt12RefundPayment { payment_preimage: Some(payment_preimage), .. } => {
+ * PaymentPurpose::Bolt12RefundPayment { payment_preimage: Some(payment_preimage), .. } => {
  * assert_eq!(payment_hash, known_payment_hash);
  * println!(\"Claiming payment {}\", payment_hash);
  * channel_manager.claim_funds(payment_preimage);
  * },
- * \tPaymentPurpose::Bolt12RefundPayment { payment_preimage: None, .. } => {
+ * PaymentPurpose::Bolt12RefundPayment { payment_preimage: None, .. } => {
  * println!(\"Unknown payment hash: {}\", payment_hash);
- * \t},
+ * },
  * ...
- * #         _ => {},
+ * #           _ => {},
  * },
  * Event::PaymentClaimed { payment_hash, amount_msat, .. } => {
  * assert_eq!(payment_hash, known_payment_hash);
@@ -625,6 +650,8 @@ namespace org { namespace ldk { namespace structs {
  * },
  * ...
  * #     _ => {},
+ * }
+ * Ok(())
  * });
  * # }
  * ```
@@ -767,8 +794,6 @@ public class ChannelManager : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(signer_provider); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(config); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(_params); };
                return ret_hu_conv;
        }
 
@@ -832,8 +857,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(override_config);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelIdAPIErrorZ ret_hu_conv = Result_ChannelIdAPIErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(temporary_channel_id); };
-               if (this != null) { this.ptrs_to.AddLast(override_config); };
                return ret_hu_conv;
        }
 
@@ -1006,22 +1029,25 @@ public class ChannelManager : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(channel_id); };
-               if (this != null) { this.ptrs_to.AddLast(target_feerate_sats_per_1000_weight); };
-               if (this != null) { this.ptrs_to.AddLast(shutdown_script); };
                return ret_hu_conv;
        }
 
        /**
-        * Force closes a channel, immediately broadcasting the latest local transaction(s) and
-        * rejecting new HTLCs on the given channel. Fails if `channel_id` is unknown to
-        * the manager, or if the `counterparty_node_id` isn't the counterparty of the corresponding
-        * channel.
+        * Force closes a channel, immediately broadcasting the latest local transaction(s),
+        * rejecting new HTLCs.
+        * 
+        * The provided `error_message` is sent to connected peers for closing
+        * channels and should be a human-readable description of what went wrong.
+        * 
+        * Fails if `channel_id` is unknown to the manager, or if the `counterparty_node_id`
+        * isn't the counterparty of the corresponding channel.
         */
-       public Result_NoneAPIErrorZ force_close_broadcasting_latest_txn(org.ldk.structs.ChannelId channel_id, byte[] counterparty_node_id) {
-               long ret = bindings.ChannelManager_force_close_broadcasting_latest_txn(this.ptr, channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)));
+       public Result_NoneAPIErrorZ force_close_broadcasting_latest_txn(org.ldk.structs.ChannelId channel_id, byte[] counterparty_node_id, string error_message) {
+               long ret = bindings.ChannelManager_force_close_broadcasting_latest_txn(this.ptr, channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)), InternalUtils.encodeString(error_message));
                GC.KeepAlive(this);
                GC.KeepAlive(channel_id);
                GC.KeepAlive(counterparty_node_id);
+               GC.KeepAlive(error_message);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(channel_id); };
@@ -1030,17 +1056,22 @@ public class ChannelManager : CommonBase {
 
        /**
         * Force closes a channel, rejecting new HTLCs on the given channel but skips broadcasting
-        * the latest local transaction(s). Fails if `channel_id` is unknown to the manager, or if the
-        * `counterparty_node_id` isn't the counterparty of the corresponding channel.
+        * the latest local transaction(s).
         * 
+        * The provided `error_message` is sent to connected peers for closing channels and should
+        * be a human-readable description of what went wrong.
+        * 
+        * Fails if `channel_id` is unknown to the manager, or if the
+        * `counterparty_node_id` isn't the counterparty of the corresponding channel.
         * You can always broadcast the latest local transaction(s) via
         * [`ChannelMonitor::broadcast_latest_holder_commitment_txn`].
         */
-       public Result_NoneAPIErrorZ force_close_without_broadcasting_txn(org.ldk.structs.ChannelId channel_id, byte[] counterparty_node_id) {
-               long ret = bindings.ChannelManager_force_close_without_broadcasting_txn(this.ptr, channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)));
+       public Result_NoneAPIErrorZ force_close_without_broadcasting_txn(org.ldk.structs.ChannelId channel_id, byte[] counterparty_node_id, string error_message) {
+               long ret = bindings.ChannelManager_force_close_without_broadcasting_txn(this.ptr, channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)), InternalUtils.encodeString(error_message));
                GC.KeepAlive(this);
                GC.KeepAlive(channel_id);
                GC.KeepAlive(counterparty_node_id);
+               GC.KeepAlive(error_message);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(channel_id); };
@@ -1050,24 +1081,36 @@ public class ChannelManager : CommonBase {
        /**
         * Force close all channels, immediately broadcasting the latest local commitment transaction
         * for each to the chain and rejecting new HTLCs on each.
+        * 
+        * The provided `error_message` is sent to connected peers for closing channels and should
+        * be a human-readable description of what went wrong.
         */
-       public void force_close_all_channels_broadcasting_latest_txn() {
-               bindings.ChannelManager_force_close_all_channels_broadcasting_latest_txn(this.ptr);
+       public void force_close_all_channels_broadcasting_latest_txn(string error_message) {
+               bindings.ChannelManager_force_close_all_channels_broadcasting_latest_txn(this.ptr, InternalUtils.encodeString(error_message));
                GC.KeepAlive(this);
+               GC.KeepAlive(error_message);
        }
 
        /**
         * Force close all channels rejecting new HTLCs on each but without broadcasting the latest
         * local transaction(s).
+        * 
+        * The provided `error_message` is sent to connected peers for closing channels and
+        * should be a human-readable description of what went wrong.
         */
-       public void force_close_all_channels_without_broadcasting_txn() {
-               bindings.ChannelManager_force_close_all_channels_without_broadcasting_txn(this.ptr);
+       public void force_close_all_channels_without_broadcasting_txn(string error_message) {
+               bindings.ChannelManager_force_close_all_channels_without_broadcasting_txn(this.ptr, InternalUtils.encodeString(error_message));
                GC.KeepAlive(this);
+               GC.KeepAlive(error_message);
        }
 
        /**
         * Sends a payment along a given route.
         * 
+        * This method is *DEPRECATED*, use [`Self::send_payment`] instead. If you wish to fix the
+        * route for a payment, do so by matching the [`PaymentId`] passed to
+        * [`Router::find_route_with_id`].
+        * 
         * Value parameters are provided via the last hop in route, see documentation for [`RouteHop`]
         * fields for more info.
         * 
@@ -1127,8 +1170,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(route); };
-               if (this != null) { this.ptrs_to.AddLast(recipient_onion); };
                return ret_hu_conv;
        }
 
@@ -1146,9 +1187,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(retry_strategy);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneRetryableSendFailureZ ret_hu_conv = Result_NoneRetryableSendFailureZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(recipient_onion); };
-               if (this != null) { this.ptrs_to.AddLast(route_params); };
-               if (this != null) { this.ptrs_to.AddLast(retry_strategy); };
                return ret_hu_conv;
        }
 
@@ -1169,15 +1207,13 @@ public class ChannelManager : CommonBase {
         * # Requested Invoices
         * 
         * In the case of paying a [`Bolt12Invoice`] via [`ChannelManager::pay_for_offer`], abandoning
-        * the payment prior to receiving the invoice will result in an [`Event::InvoiceRequestFailed`]
-        * and prevent any attempts at paying it once received. The other events may only be generated
-        * once the invoice has been received.
+        * the payment prior to receiving the invoice will result in an [`Event::PaymentFailed`] and
+        * prevent any attempts at paying it once received.
         * 
         * # Restart Behavior
         * 
         * If an [`Event::PaymentFailed`] is generated and we restart without first persisting the
-        * [`ChannelManager`], another [`Event::PaymentFailed`] may be generated; likewise for
-        * [`Event::InvoiceRequestFailed`].
+        * [`ChannelManager`], another [`Event::PaymentFailed`] may be generated.
         * 
         * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
         */
@@ -1212,8 +1248,6 @@ public class ChannelManager : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesPaymentSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesPaymentSendFailureZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(route); };
-               if (this != null) { this.ptrs_to.AddLast(payment_preimage); };
-               if (this != null) { this.ptrs_to.AddLast(recipient_onion); };
                return ret_hu_conv;
        }
 
@@ -1236,10 +1270,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(retry_strategy);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesRetryableSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesRetryableSendFailureZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(payment_preimage); };
-               if (this != null) { this.ptrs_to.AddLast(recipient_onion); };
-               if (this != null) { this.ptrs_to.AddLast(route_params); };
-               if (this != null) { this.ptrs_to.AddLast(retry_strategy); };
                return ret_hu_conv;
        }
 
@@ -1254,7 +1284,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(path);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(path); };
                return ret_hu_conv;
        }
 
@@ -1273,7 +1302,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(liquidity_limit_multiplier);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(liquidity_limit_multiplier); };
                return ret_hu_conv;
        }
 
@@ -1300,8 +1328,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(liquidity_limit_multiplier);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(route_params); };
-               if (this != null) { this.ptrs_to.AddLast(liquidity_limit_multiplier); };
                return ret_hu_conv;
        }
 
@@ -1345,7 +1371,46 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(funding_transaction);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(temporary_channel_id); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Unsafe**: This method does not validate the spent output. It is the caller's
+        * responsibility to ensure the spent outputs are SegWit, as well as making sure the funding
+        * transaction has a final absolute locktime, i.e., its locktime is lower than the next block height.
+        * 
+        * For a safer method, please refer to [`ChannelManager::funding_transaction_generated`].
+        * 
+        * Call this in response to a [`Event::FundingGenerationReady`] event.
+        * 
+        * Note that if this method is called successfully, the funding transaction won't be
+        * broadcasted and you are expected to broadcast it manually when receiving the
+        * [`Event::FundingTxBroadcastSafe`] event.
+        * 
+        * Returns [`APIError::ChannelUnavailable`] if a funding transaction has already been provided
+        * for the channel or if the channel has been closed as indicated by [`Event::ChannelClosed`].
+        * 
+        * May panic if the funding output is duplicative with some other channel (note that this
+        * should be trivially prevented by using unique funding transaction keys per-channel).
+        * 
+        * Note to keep the miner incentives aligned in moving the blockchain forward, we recommend
+        * the wallet software generating the funding transaction to apply anti-fee sniping as
+        * implemented by Bitcoin Core wallet. See <https://bitcoinops.org/en/topics/fee-sniping/> for
+        * more details.
+        * 
+        * [`Event::FundingGenerationReady`]: crate::events::Event::FundingGenerationReady
+        * [`Event::FundingTxBroadcastSafe`]: crate::events::Event::FundingTxBroadcastSafe
+        * [`Event::ChannelClosed`]: crate::events::Event::ChannelClosed
+        * [`ChannelManager::funding_transaction_generated`]: crate::ln::channelmanager::ChannelManager::funding_transaction_generated
+        */
+       public Result_NoneAPIErrorZ unsafe_manual_funding_transaction_generated(org.ldk.structs.ChannelId temporary_channel_id, byte[] counterparty_node_id, org.ldk.structs.OutPoint funding) {
+               long ret = bindings.ChannelManager_unsafe_manual_funding_transaction_generated(this.ptr, temporary_channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)), funding.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(temporary_channel_id);
+               GC.KeepAlive(counterparty_node_id);
+               GC.KeepAlive(funding);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
@@ -1403,7 +1468,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(config_update);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
-               foreach (ChannelId channel_ids_conv_11 in channel_ids) { if (this != null) { this.ptrs_to.AddLast(channel_ids_conv_11); }; };
                if (this != null) { this.ptrs_to.AddLast(config_update); };
                return ret_hu_conv;
        }
@@ -1440,7 +1504,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(config);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
-               foreach (ChannelId channel_ids_conv_11 in channel_ids) { if (this != null) { this.ptrs_to.AddLast(channel_ids_conv_11); }; };
                if (this != null) { this.ptrs_to.AddLast(config); };
                return ret_hu_conv;
        }
@@ -1572,7 +1635,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(this);
                GC.KeepAlive(payment_hash);
                GC.KeepAlive(failure_code);
-               if (this != null) { this.ptrs_to.AddLast(failure_code); };
        }
 
        /**
@@ -1699,16 +1761,15 @@ public class ChannelManager : CommonBase {
 
        /**
         * Creates an [`OfferBuilder`] such that the [`Offer`] it builds is recognized by the
-        * [`ChannelManager`] when handling [`InvoiceRequest`] messages for the offer. The offer will
-        * not have an expiration unless otherwise set on the builder.
+        * [`ChannelManager`] when handling [`InvoiceRequest`] messages for the offer. The offer's
+        * expiration will be `absolute_expiry` if `Some`, otherwise it will not expire.
         * 
         * # Privacy
         * 
-        * Uses [`MessageRouter::create_blinded_paths`] to construct a [`BlindedPath`] for the offer.
-        * However, if one is not found, uses a one-hop [`BlindedPath`] with
-        * [`ChannelManager::get_our_node_id`] as the introduction node instead. In the latter case,
-        * the node must be announced, otherwise, there is no way to find a path to the introduction in
-        * order to send the [`InvoiceRequest`].
+        * Uses [`MessageRouter`] to construct a [`BlindedMessagePath`] for the offer based on the given
+        * `absolute_expiry` according to [`MAX_SHORT_LIVED_RELATIVE_EXPIRY`]. See those docs for
+        * privacy implications as well as those of the parameterized [`Router`], which implements
+        * [`MessageRouter`].
         * 
         * Also, uses a derived signing pubkey in the offer for recipient privacy.
         * 
@@ -1724,9 +1785,10 @@ public class ChannelManager : CommonBase {
         * [`Offer`]: crate::offers::offer::Offer
         * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
         */
-       public Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ create_offer_builder() {
-               long ret = bindings.ChannelManager_create_offer_builder(this.ptr);
+       public Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ create_offer_builder(org.ldk.structs.Option_u64Z absolute_expiry) {
+               long ret = bindings.ChannelManager_create_offer_builder(this.ptr, absolute_expiry.ptr);
                GC.KeepAlive(this);
+               GC.KeepAlive(absolute_expiry);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ ret_hu_conv = Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -1748,18 +1810,17 @@ public class ChannelManager : CommonBase {
         * 
         * To revoke the refund, use [`ChannelManager::abandon_payment`] prior to receiving the
         * invoice. If abandoned, or an invoice isn't received before expiration, the payment will fail
-        * with an [`Event::InvoiceRequestFailed`].
+        * with an [`Event::PaymentFailed`].
         * 
         * If `max_total_routing_fee_msat` is not specified, The default from
         * [`RouteParameters::from_payment_params_and_value`] is applied.
         * 
         * # Privacy
         * 
-        * Uses [`MessageRouter::create_blinded_paths`] to construct a [`BlindedPath`] for the refund.
-        * However, if one is not found, uses a one-hop [`BlindedPath`] with
-        * [`ChannelManager::get_our_node_id`] as the introduction node instead. In the latter case,
-        * the node must be announced, otherwise, there is no way to find a path to the introduction in
-        * order to send the [`Bolt12Invoice`].
+        * Uses [`MessageRouter`] to construct a [`BlindedMessagePath`] for the refund based on the given
+        * `absolute_expiry` according to [`MAX_SHORT_LIVED_RELATIVE_EXPIRY`]. See those docs for
+        * privacy implications as well as those of the parameterized [`Router`], which implements
+        * [`MessageRouter`].
         * 
         * Also, uses a derived payer id in the refund for payer privacy.
         * 
@@ -1790,8 +1851,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(max_total_routing_fee_msat);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ ret_hu_conv = Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(retry_strategy); };
-               if (this != null) { this.ptrs_to.AddLast(max_total_routing_fee_msat); };
                return ret_hu_conv;
        }
 
@@ -1819,14 +1878,13 @@ public class ChannelManager : CommonBase {
         * 
         * To revoke the request, use [`ChannelManager::abandon_payment`] prior to receiving the
         * invoice. If abandoned, or an invoice isn't received in a reasonable amount of time, the
-        * payment will fail with an [`Event::InvoiceRequestFailed`].
+        * payment will fail with an [`Event::PaymentFailed`].
         * 
         * # Privacy
         * 
-        * Uses a one-hop [`BlindedPath`] for the reply path with [`ChannelManager::get_our_node_id`]
-        * as the introduction node and a derived payer id for payer privacy. As such, currently, the
-        * node must be announced. Otherwise, there is no way to find a path to the introduction node
-        * in order to send the [`Bolt12Invoice`].
+        * For payer privacy, uses a derived payer id and uses [`MessageRouter::create_blinded_paths`]
+        * to construct a [`BlindedMessagePath`] for the reply path. For further privacy implications, see the
+        * docs of the parameterized [`Router`], which implements [`MessageRouter`].
         * 
         * # Limitations
         * 
@@ -1864,11 +1922,6 @@ public class ChannelManager : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneBolt12SemanticErrorZ ret_hu_conv = Result_NoneBolt12SemanticErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(offer); };
-               if (this != null) { this.ptrs_to.AddLast(quantity); };
-               if (this != null) { this.ptrs_to.AddLast(amount_msats); };
-               if (this != null) { this.ptrs_to.AddLast(payer_note); };
-               if (this != null) { this.ptrs_to.AddLast(retry_strategy); };
-               if (this != null) { this.ptrs_to.AddLast(max_total_routing_fee_msat); };
                return ret_hu_conv;
        }
 
@@ -1877,8 +1930,8 @@ public class ChannelManager : CommonBase {
         * message.
         * 
         * The resulting invoice uses a [`PaymentHash`] recognized by the [`ChannelManager`] and a
-        * [`BlindedPath`] containing the [`PaymentSecret`] needed to reconstruct the corresponding
-        * [`PaymentPreimage`]. It is returned purely for informational purposes.
+        * [`BlindedPaymentPath`] containing the [`PaymentSecret`] needed to reconstruct the
+        * corresponding [`PaymentPreimage`]. It is returned purely for informational purposes.
         * 
         * # Limitations
         * 
@@ -1946,8 +1999,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(min_value_msat); };
-               if (this != null) { this.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
                return ret_hu_conv;
        }
 
@@ -2008,8 +2059,6 @@ public class ChannelManager : CommonBase {
                GC.KeepAlive(min_final_cltv_expiry);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(min_value_msat); };
-               if (this != null) { this.ptrs_to.AddLast(min_final_cltv_expiry); };
                return ret_hu_conv;
        }
 
@@ -2256,6 +2305,19 @@ public class ChannelManager : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Constructs a new AsyncPaymentsMessageHandler which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned AsyncPaymentsMessageHandler must be freed before this_arg is
+        */
+       public AsyncPaymentsMessageHandler as_AsyncPaymentsMessageHandler() {
+               long ret = bindings.ChannelManager_as_AsyncPaymentsMessageHandler(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               AsyncPaymentsMessageHandler ret_hu_conv = new AsyncPaymentsMessageHandler(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
        /**
         * Constructs a new NodeIdLookUp which calls the relevant methods on this_arg.
         * This copies the `inner` pointer in this_arg and thus the returned NodeIdLookUp must be freed before this_arg is
index 9687cd3ce8e16aaadceee6dd9397c8b5cc93f804..b5b6bc27c82294a0934d428cc4ead1315717993d 100644 (file)
@@ -271,7 +271,6 @@ public class ChannelManagerReadArgs : CommonBase {
                bindings.ChannelManagerReadArgs_set_default_config(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -302,7 +301,6 @@ public class ChannelManagerReadArgs : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(tx_broadcaster); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(router); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(default_config); };
                foreach (ChannelMonitor channel_monitors_conv_16 in channel_monitors) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_monitors_conv_16); }; };
                return ret_hu_conv;
        }
index 44ba387426633ecc6e553c0924d45c0c80e40030..ec1728fffc48fbe254742612724eb06342670545 100644 (file)
@@ -360,7 +360,6 @@ public class ChannelMessageHandler : CommonBase {
                        Option_CVec_ThirtyTwoBytesZZ ret = arg.get_chain_hashes();
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
-                       if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret); };
                        return result;
                }
        }
index 3476e527ad3e177cbfc7676896dc6708c40b200b..df2cbe5fa308353eae3921ee468ffbf3a55a3c84 100644 (file)
@@ -176,14 +176,19 @@ public class ChannelMonitor : CommonBase {
         * An [`EventHandler`] may safely call back to the provider, though this shouldn't be needed in
         * order to handle these events.
         * 
+        * Will return a [`ReplayEvent`] error if event handling failed and should eventually be retried.
+        * 
         * [`SpendableOutputs`]: crate::events::Event::SpendableOutputs
         * [`BumpTransaction`]: crate::events::Event::BumpTransaction
         */
-       public void process_pending_events(org.ldk.structs.EventHandler handler) {
-               bindings.ChannelMonitor_process_pending_events(this.ptr, handler.ptr);
+       public Result_NoneReplayEventZ process_pending_events(org.ldk.structs.EventHandler handler) {
+               long ret = bindings.ChannelMonitor_process_pending_events(this.ptr, handler.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(handler);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneReplayEventZ ret_hu_conv = Result_NoneReplayEventZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(handler); };
+               return ret_hu_conv;
        }
 
        /**
@@ -512,6 +517,15 @@ public class ChannelMonitor : CommonBase {
                if (this != null) { this.ptrs_to.AddLast(logger); };
        }
 
+       /**
+        * Returns true if the monitor has pending claim requests that are not fully confirmed yet.
+        */
+       public bool has_pending_claims() {
+               bool ret = bindings.ChannelMonitor_has_pending_claims(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Triggers rebroadcasts of pending claims from a force-closed channel after a transaction
         * signature generation failure.
index 265a3a7214ca3c7a9113cae6abc025e9ac9fa049..8bde5ff244aa49c8bc84b9e1ce47db797d21416d 100644 (file)
@@ -96,7 +96,6 @@ public class ChannelMonitorUpdate : CommonBase {
                bindings.ChannelMonitorUpdate_set_channel_id(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        internal long clone_ptr() {
diff --git a/c_sharp/src/org/ldk/structs/ChannelParameters.cs b/c_sharp/src/org/ldk/structs/ChannelParameters.cs
new file mode 100644 (file)
index 0000000..8a78800
--- /dev/null
@@ -0,0 +1,198 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A subset of [`CommonOpenChannelFields`], containing various parameters which are set by the
+ * channel initiator and which are not part of the channel funding transaction.
+ */
+public class ChannelParameters : CommonBase {
+       internal ChannelParameters(object _dummy, long ptr) : base(ptr) { }
+       ~ChannelParameters() {
+               if (ptr != 0) { bindings.ChannelParameters_free(ptr); }
+       }
+
+       /**
+        * The threshold below which outputs on transactions broadcast by the channel initiator will be
+        * omitted.
+        */
+       public long get_dust_limit_satoshis() {
+               long ret = bindings.ChannelParameters_get_dust_limit_satoshis(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The threshold below which outputs on transactions broadcast by the channel initiator will be
+        * omitted.
+        */
+       public void set_dust_limit_satoshis(long val) {
+               bindings.ChannelParameters_set_dust_limit_satoshis(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The maximum inbound HTLC value in flight towards channel initiator, in milli-satoshi
+        */
+       public long get_max_htlc_value_in_flight_msat() {
+               long ret = bindings.ChannelParameters_get_max_htlc_value_in_flight_msat(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The maximum inbound HTLC value in flight towards channel initiator, in milli-satoshi
+        */
+       public void set_max_htlc_value_in_flight_msat(long val) {
+               bindings.ChannelParameters_set_max_htlc_value_in_flight_msat(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The minimum HTLC size for HTLCs towards the channel initiator, in milli-satoshi
+        */
+       public long get_htlc_minimum_msat() {
+               long ret = bindings.ChannelParameters_get_htlc_minimum_msat(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The minimum HTLC size for HTLCs towards the channel initiator, in milli-satoshi
+        */
+       public void set_htlc_minimum_msat(long val) {
+               bindings.ChannelParameters_set_htlc_minimum_msat(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The feerate for the commitment transaction set by the channel initiator until updated by
+        * [`UpdateFee`]
+        */
+       public int get_commitment_feerate_sat_per_1000_weight() {
+               int ret = bindings.ChannelParameters_get_commitment_feerate_sat_per_1000_weight(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The feerate for the commitment transaction set by the channel initiator until updated by
+        * [`UpdateFee`]
+        */
+       public void set_commitment_feerate_sat_per_1000_weight(int val) {
+               bindings.ChannelParameters_set_commitment_feerate_sat_per_1000_weight(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The number of blocks which the non-channel-initator will have to wait to claim on-chain
+        * funds if they broadcast a commitment transaction.
+        */
+       public short get_to_self_delay() {
+               short ret = bindings.ChannelParameters_get_to_self_delay(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The number of blocks which the non-channel-initator will have to wait to claim on-chain
+        * funds if they broadcast a commitment transaction.
+        */
+       public void set_to_self_delay(short val) {
+               bindings.ChannelParameters_set_to_self_delay(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The maximum number of pending HTLCs towards the channel initiator.
+        */
+       public short get_max_accepted_htlcs() {
+               short ret = bindings.ChannelParameters_get_max_accepted_htlcs(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The maximum number of pending HTLCs towards the channel initiator.
+        */
+       public void set_max_accepted_htlcs(short val) {
+               bindings.ChannelParameters_set_max_accepted_htlcs(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new ChannelParameters given each field
+        */
+       public static ChannelParameters of(long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, int commitment_feerate_sat_per_1000_weight_arg, short to_self_delay_arg, short max_accepted_htlcs_arg) {
+               long ret = bindings.ChannelParameters_new(dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, htlc_minimum_msat_arg, commitment_feerate_sat_per_1000_weight_arg, to_self_delay_arg, max_accepted_htlcs_arg);
+               GC.KeepAlive(dust_limit_satoshis_arg);
+               GC.KeepAlive(max_htlc_value_in_flight_msat_arg);
+               GC.KeepAlive(htlc_minimum_msat_arg);
+               GC.KeepAlive(commitment_feerate_sat_per_1000_weight_arg);
+               GC.KeepAlive(to_self_delay_arg);
+               GC.KeepAlive(max_accepted_htlcs_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelParameters(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.ChannelParameters_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ChannelParameters
+        */
+       public ChannelParameters clone() {
+               long ret = bindings.ChannelParameters_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelParameters(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Generates a non-cryptographic 64-bit hash of the ChannelParameters.
+        */
+       public long hash() {
+               long ret = bindings.ChannelParameters_hash(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       public override int GetHashCode() {
+               return (int)this.hash();
+       }
+       /**
+        * Checks if two ChannelParameterss contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.ChannelParameters b) {
+               bool ret = bindings.ChannelParameters_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is ChannelParameters)) return false;
+               return this.eq((ChannelParameters)o);
+       }
+}
+} } }
index c5ca229e8314a6c401552e6573ac7f3525436809..6d31ef7db17596f13668462f8370c8457cc20618 100644 (file)
@@ -38,7 +38,7 @@ public class ChannelPublicKeys : CommonBase {
        }
 
        /**
-        * The base point which is used (with derive_public_revocation_key) to derive per-commitment
+        * The base point which is used (with [`RevocationKey::from_basepoint`]) to derive per-commitment
         * revocation keys. This is combined with the per-commitment-secret generated by the
         * counterparty to create a secret which the counterparty can reveal to revoke previous
         * states.
@@ -53,7 +53,7 @@ public class ChannelPublicKeys : CommonBase {
        }
 
        /**
-        * The base point which is used (with derive_public_revocation_key) to derive per-commitment
+        * The base point which is used (with [`RevocationKey::from_basepoint`]) to derive per-commitment
         * revocation keys. This is combined with the per-commitment-secret generated by the
         * counterparty to create a secret which the counterparty can reveal to revoke previous
         * states.
@@ -62,7 +62,6 @@ public class ChannelPublicKeys : CommonBase {
                bindings.ChannelPublicKeys_set_revocation_basepoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -112,7 +111,6 @@ public class ChannelPublicKeys : CommonBase {
                bindings.ChannelPublicKeys_set_delayed_payment_basepoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -136,7 +134,6 @@ public class ChannelPublicKeys : CommonBase {
                bindings.ChannelPublicKeys_set_htlc_basepoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -152,9 +149,6 @@ public class ChannelPublicKeys : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelPublicKeys ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelPublicKeys(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(revocation_basepoint_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(delayed_payment_basepoint_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlc_basepoint_arg); };
                return ret_hu_conv;
        }
 
index 58f84613a9cca5c00bb230c4575af4a46fb4b0ec..0152e2cd2b9722aef0dfe0bf34175f8458f8219c 100644 (file)
@@ -36,7 +36,6 @@ public class ChannelReady : CommonBase {
                bindings.ChannelReady_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -84,7 +83,6 @@ public class ChannelReady : CommonBase {
                bindings.ChannelReady_set_short_channel_id_alias(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -98,8 +96,6 @@ public class ChannelReady : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelReady ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelReady(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(short_channel_id_alias_arg); };
                return ret_hu_conv;
        }
 
index eafbfed2c66e2f0d2c7b46ee3433b2c162d709a1..3942aba225819de080aa4c7301acbf076e028fa5 100644 (file)
@@ -36,7 +36,6 @@ public class ChannelReestablish : CommonBase {
                bindings.ChannelReestablish_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -136,7 +135,6 @@ public class ChannelReestablish : CommonBase {
                bindings.ChannelReestablish_set_next_funding_txid(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -153,8 +151,6 @@ public class ChannelReestablish : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelReestablish ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelReestablish(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(next_funding_txid_arg); };
                return ret_hu_conv;
        }
 
index 1be5e84b733b585ed29aceece9c3f8d1033bf3a4..dbeb65032a2cb93acb9ac7f5f867c49035941c7e 100644 (file)
@@ -13,8 +13,12 @@ public interface ChannelSignerInterface {
        /**Gets the per-commitment point for a specific commitment number
         * 
         * Note that the commitment number starts at `(1 << 48) - 1` and counts backwards.
+        * 
+        * If the signer returns `Err`, then the user is responsible for either force-closing the channel
+        * or calling `ChannelManager::signer_unblocked` (this method is only available when the
+        * `async_signing` cfg flag is enabled) once the signature is ready.
         */
-       byte[] get_per_commitment_point(long idx);
+       Result_PublicKeyNoneZ get_per_commitment_point(long idx);
        /**Gets the commitment secret for a specific commitment number as part of the revocation process
         * 
         * An external signer implementation should error here if the commitment was already signed
@@ -24,7 +28,7 @@ public interface ChannelSignerInterface {
         * 
         * Note that the commitment number starts at `(1 << 48) - 1` and counts backwards.
         */
-       byte[] release_commitment_secret(long idx);
+       Result__u832NoneZ release_commitment_secret(long idx);
        /**Validate the counterparty's signatures on the holder commitment transaction and HTLCs.
         * 
         * This is required in order for the signer to make sure that releasing a commitment
@@ -67,6 +71,10 @@ public interface ChannelSignerInterface {
 /**
  * A trait to handle Lightning channel key material without concretizing the channel type or
  * the signature mechanism.
+ * 
+ * Several methods allow error types to be returned to support async signing. This feature
+ * is not yet complete, and panics may occur in certain situations when returning errors
+ * for these methods.
  */
 public class ChannelSigner : CommonBase {
        internal bindings.LDKChannelSigner bindings_instance;
@@ -83,15 +91,15 @@ public class ChannelSigner : CommonBase {
                private ChannelSignerInterface arg;
                private LDKChannelSignerHolder impl_holder;
                public long get_per_commitment_point(long _idx) {
-                       byte[] ret = arg.get_per_commitment_point(_idx);
+                       Result_PublicKeyNoneZ ret = arg.get_per_commitment_point(_idx);
                                GC.KeepAlive(arg);
-                       long result = InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(ret, 33));
+                       long result = ret.clone_ptr();
                        return result;
                }
                public long release_commitment_secret(long _idx) {
-                       byte[] ret = arg.release_commitment_secret(_idx);
+                       Result__u832NoneZ ret = arg.release_commitment_secret(_idx);
                                GC.KeepAlive(arg);
-                       long result = InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(ret, 32));
+                       long result = ret.clone_ptr();
                        return result;
                }
                public long validate_holder_commitment(long _holder_tx, long _outbound_htlc_preimages) {
@@ -145,14 +153,18 @@ public class ChannelSigner : CommonBase {
         * Gets the per-commitment point for a specific commitment number
         * 
         * Note that the commitment number starts at `(1 << 48) - 1` and counts backwards.
+        * 
+        * If the signer returns `Err`, then the user is responsible for either force-closing the channel
+        * or calling `ChannelManager::signer_unblocked` (this method is only available when the
+        * `async_signing` cfg flag is enabled) once the signature is ready.
         */
-       public byte[] get_per_commitment_point(long idx) {
+       public Result_PublicKeyNoneZ get_per_commitment_point(long idx) {
                long ret = bindings.ChannelSigner_get_per_commitment_point(this.ptr, idx);
                GC.KeepAlive(this);
                GC.KeepAlive(idx);
                if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               Result_PublicKeyNoneZ ret_hu_conv = Result_PublicKeyNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
        }
 
        /**
@@ -165,13 +177,13 @@ public class ChannelSigner : CommonBase {
         * 
         * Note that the commitment number starts at `(1 << 48) - 1` and counts backwards.
         */
-       public byte[] release_commitment_secret(long idx) {
+       public Result__u832NoneZ release_commitment_secret(long idx) {
                long ret = bindings.ChannelSigner_release_commitment_secret(this.ptr, idx);
                GC.KeepAlive(this);
                GC.KeepAlive(idx);
                if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               Result__u832NoneZ ret_hu_conv = Result__u832NoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
        }
 
        /**
index a411cec1577ee9b51337f4533790806b4e4fb615..8c61a14902e5883f493b62ea3174f766e47fe2d7 100644 (file)
@@ -38,7 +38,6 @@ public class ChannelTransactionParameters : CommonBase {
                bindings.ChannelTransactionParameters_set_holder_pubkeys(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -104,7 +103,6 @@ public class ChannelTransactionParameters : CommonBase {
                bindings.ChannelTransactionParameters_set_counterparty_parameters(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -130,7 +128,6 @@ public class ChannelTransactionParameters : CommonBase {
                bindings.ChannelTransactionParameters_set_funding_outpoint(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -154,7 +151,6 @@ public class ChannelTransactionParameters : CommonBase {
                bindings.ChannelTransactionParameters_set_channel_type_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -174,10 +170,6 @@ public class ChannelTransactionParameters : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelTransactionParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelTransactionParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(holder_pubkeys_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(counterparty_parameters_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_outpoint_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type_features_arg); };
                return ret_hu_conv;
        }
 
index 908c3f1659e4816a9e52539ee3a49298c232b49e..d2ac6dd351f609397c6432d174fffa2201321be7 100644 (file)
@@ -24,6 +24,28 @@ public class ChannelTypeFeatures : CommonBase {
                if (ptr != 0) { bindings.ChannelTypeFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the ChannelTypeFeatures object into a byte array which can be read by ChannelTypeFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.ChannelTypeFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a ChannelTypeFeatures from a byte array, created by ChannelTypeFeatures_write
+        */
+       public static Result_ChannelTypeFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.ChannelTypeFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelTypeFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelTypeFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two ChannelTypeFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -71,6 +93,28 @@ public class ChannelTypeFeatures : CommonBase {
        public override int GetHashCode() {
                return (int)this.hash();
        }
+       /**
+        * Constructs a ChannelTypeFeatures with only static_remotekey set
+        */
+       public static ChannelTypeFeatures only_static_remote_key() {
+               long ret = bindings.ChannelTypeFeatures_only_static_remote_key();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelTypeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelTypeFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a ChannelTypeFeatures with anchors support
+        */
+       public static ChannelTypeFeatures anchors_zero_htlc_fee_and_dependencies() {
+               long ret = bindings.ChannelTypeFeatures_anchors_zero_htlc_fee_and_dependencies();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelTypeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelTypeFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        /**
         * Create a blank Features with no features set
         */
@@ -82,6 +126,27 @@ public class ChannelTypeFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.ChannelTypeFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.ChannelTypeFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -93,6 +158,19 @@ public class ChannelTypeFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.ChannelTypeFeatures other) {
+               long ret = bindings.ChannelTypeFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -103,6 +181,15 @@ public class ChannelTypeFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.ChannelTypeFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -176,25 +263,19 @@ public class ChannelTypeFeatures : CommonBase {
        }
 
        /**
-        * Serialize the ChannelTypeFeatures object into a byte array which can be read by ChannelTypeFeatures_read
+        * Unsets the `scid_privacy` feature
         */
-       public byte[] write() {
-               long ret = bindings.ChannelTypeFeatures_write(this.ptr);
+       public void clear_scid_privacy() {
+               bindings.ChannelTypeFeatures_clear_scid_privacy(this.ptr);
                GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
        }
 
        /**
-        * Read a ChannelTypeFeatures from a byte array, created by ChannelTypeFeatures_write
+        * Unsets the `anchors_zero_fee_htlc_tx` feature
         */
-       public static Result_ChannelTypeFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.ChannelTypeFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ChannelTypeFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelTypeFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
+       public void clear_anchors_zero_fee_htlc_tx() {
+               bindings.ChannelTypeFeatures_clear_anchors_zero_fee_htlc_tx(this.ptr);
+               GC.KeepAlive(this);
        }
 
        /**
index 4a47de099d1e92bef82261ba65074b8d1463db79..7e46741db0a53be7431adfab88bba168dd4a13ba 100644 (file)
@@ -56,7 +56,6 @@ public class ChannelUpdate : CommonBase {
                bindings.ChannelUpdate_set_contents(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -69,7 +68,6 @@ public class ChannelUpdate : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelUpdate(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents_arg); };
                return ret_hu_conv;
        }
 
index cbf72512c7931b362f3914f4c04a16005dfabb3a..e1ba1e069614d2e23f8ab510ffd37cfb873158a9 100644 (file)
@@ -16,117 +16,116 @@ public class ChannelUpdateInfo : CommonBase {
        }
 
        /**
-        * When the last update to the channel direction was issued.
-        * Value is opaque, as set in the announcement.
+        * The minimum value, which must be relayed to the next hop via the channel
         */
-       public int get_last_update() {
-               int ret = bindings.ChannelUpdateInfo_get_last_update(this.ptr);
+       public long get_htlc_minimum_msat() {
+               long ret = bindings.ChannelUpdateInfo_get_htlc_minimum_msat(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
 
        /**
-        * When the last update to the channel direction was issued.
-        * Value is opaque, as set in the announcement.
+        * The minimum value, which must be relayed to the next hop via the channel
         */
-       public void set_last_update(int val) {
-               bindings.ChannelUpdateInfo_set_last_update(this.ptr, val);
+       public void set_htlc_minimum_msat(long val) {
+               bindings.ChannelUpdateInfo_set_htlc_minimum_msat(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * Whether the channel can be currently used for payments (in this one direction).
+        * The maximum value which may be relayed to the next hop via the channel.
         */
-       public bool get_enabled() {
-               bool ret = bindings.ChannelUpdateInfo_get_enabled(this.ptr);
+       public long get_htlc_maximum_msat() {
+               long ret = bindings.ChannelUpdateInfo_get_htlc_maximum_msat(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
 
        /**
-        * Whether the channel can be currently used for payments (in this one direction).
+        * The maximum value which may be relayed to the next hop via the channel.
         */
-       public void set_enabled(bool val) {
-               bindings.ChannelUpdateInfo_set_enabled(this.ptr, val);
+       public void set_htlc_maximum_msat(long val) {
+               bindings.ChannelUpdateInfo_set_htlc_maximum_msat(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * The difference in CLTV values that you must have when routing through this channel.
+        * Fees charged when the channel is used for routing
         */
-       public short get_cltv_expiry_delta() {
-               short ret = bindings.ChannelUpdateInfo_get_cltv_expiry_delta(this.ptr);
+       public RoutingFees get_fees() {
+               long ret = bindings.ChannelUpdateInfo_get_fees(this.ptr);
                GC.KeepAlive(this);
-               return ret;
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.RoutingFees ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RoutingFees(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
        }
 
        /**
-        * The difference in CLTV values that you must have when routing through this channel.
+        * Fees charged when the channel is used for routing
         */
-       public void set_cltv_expiry_delta(short val) {
-               bindings.ChannelUpdateInfo_set_cltv_expiry_delta(this.ptr, val);
+       public void set_fees(org.ldk.structs.RoutingFees val) {
+               bindings.ChannelUpdateInfo_set_fees(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * The minimum value, which must be relayed to the next hop via the channel
+        * When the last update to the channel direction was issued.
+        * Value is opaque, as set in the announcement.
         */
-       public long get_htlc_minimum_msat() {
-               long ret = bindings.ChannelUpdateInfo_get_htlc_minimum_msat(this.ptr);
+       public int get_last_update() {
+               int ret = bindings.ChannelUpdateInfo_get_last_update(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
 
        /**
-        * The minimum value, which must be relayed to the next hop via the channel
+        * When the last update to the channel direction was issued.
+        * Value is opaque, as set in the announcement.
         */
-       public void set_htlc_minimum_msat(long val) {
-               bindings.ChannelUpdateInfo_set_htlc_minimum_msat(this.ptr, val);
+       public void set_last_update(int val) {
+               bindings.ChannelUpdateInfo_set_last_update(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * The maximum value which may be relayed to the next hop via the channel.
+        * The difference in CLTV values that you must have when routing through this channel.
         */
-       public long get_htlc_maximum_msat() {
-               long ret = bindings.ChannelUpdateInfo_get_htlc_maximum_msat(this.ptr);
+       public short get_cltv_expiry_delta() {
+               short ret = bindings.ChannelUpdateInfo_get_cltv_expiry_delta(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
 
        /**
-        * The maximum value which may be relayed to the next hop via the channel.
+        * The difference in CLTV values that you must have when routing through this channel.
         */
-       public void set_htlc_maximum_msat(long val) {
-               bindings.ChannelUpdateInfo_set_htlc_maximum_msat(this.ptr, val);
+       public void set_cltv_expiry_delta(short val) {
+               bindings.ChannelUpdateInfo_set_cltv_expiry_delta(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * Fees charged when the channel is used for routing
+        * Whether the channel can be currently used for payments (in this one direction).
         */
-       public RoutingFees get_fees() {
-               long ret = bindings.ChannelUpdateInfo_get_fees(this.ptr);
+       public bool get_enabled() {
+               bool ret = bindings.ChannelUpdateInfo_get_enabled(this.ptr);
                GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.RoutingFees ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RoutingFees(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
+               return ret;
        }
 
        /**
-        * Fees charged when the channel is used for routing
+        * Whether the channel can be currently used for payments (in this one direction).
         */
-       public void set_fees(org.ldk.structs.RoutingFees val) {
-               bindings.ChannelUpdateInfo_set_fees(this.ptr, val.ptr);
+       public void set_enabled(bool val) {
+               bindings.ChannelUpdateInfo_set_enabled(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -158,7 +157,6 @@ public class ChannelUpdateInfo : CommonBase {
                bindings.ChannelUpdateInfo_set_last_update_message(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -166,20 +164,18 @@ public class ChannelUpdateInfo : CommonBase {
         * 
         * Note that last_update_message_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ChannelUpdateInfo of(int last_update_arg, bool enabled_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, org.ldk.structs.RoutingFees fees_arg, org.ldk.structs.ChannelUpdate last_update_message_arg) {
-               long ret = bindings.ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg.ptr, last_update_message_arg == null ? 0 : last_update_message_arg.ptr);
-               GC.KeepAlive(last_update_arg);
-               GC.KeepAlive(enabled_arg);
-               GC.KeepAlive(cltv_expiry_delta_arg);
+       public static ChannelUpdateInfo of(long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, org.ldk.structs.RoutingFees fees_arg, int last_update_arg, short cltv_expiry_delta_arg, bool enabled_arg, org.ldk.structs.ChannelUpdate last_update_message_arg) {
+               long ret = bindings.ChannelUpdateInfo_new(htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg.ptr, last_update_arg, cltv_expiry_delta_arg, enabled_arg, last_update_message_arg == null ? 0 : last_update_message_arg.ptr);
                GC.KeepAlive(htlc_minimum_msat_arg);
                GC.KeepAlive(htlc_maximum_msat_arg);
                GC.KeepAlive(fees_arg);
+               GC.KeepAlive(last_update_arg);
+               GC.KeepAlive(cltv_expiry_delta_arg);
+               GC.KeepAlive(enabled_arg);
                GC.KeepAlive(last_update_message_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelUpdateInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelUpdateInfo(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fees_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(last_update_message_arg); };
                return ret_hu_conv;
        }
 
index 8d20c5deb4f045338723da842789e6ce594ae29c..5370e8d475d6917aa3efde4e78c58acf376a2187 100644 (file)
@@ -72,7 +72,6 @@ public class ChannelUsage : CommonBase {
                bindings.ChannelUsage_set_effective_capacity(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -86,7 +85,6 @@ public class ChannelUsage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ChannelUsage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelUsage(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(effective_capacity_arg); };
                return ret_hu_conv;
        }
 
index 890d3e476d32c2296d012a7ada82c370c4752669..f836a275da31eab3394fb6e3555a6b57c58ad252 100644 (file)
@@ -34,7 +34,6 @@ public class ClaimedHTLC : CommonBase {
                bindings.ClaimedHTLC_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -154,7 +153,6 @@ public class ClaimedHTLC : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ClaimedHTLC ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ClaimedHTLC(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 9f47f3db5fa1cc5aec04a9ab6900084ac9a6a1e2..8f678f4c8c9b5b77c7c3d5c708a2b1cb399dad4f 100644 (file)
@@ -36,7 +36,6 @@ public class ClosingSigned : CommonBase {
                bindings.ClosingSigned_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -102,7 +101,6 @@ public class ClosingSigned : CommonBase {
                bindings.ClosingSigned_set_fee_range(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -119,8 +117,6 @@ public class ClosingSigned : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ClosingSigned ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ClosingSigned(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fee_range_arg); };
                return ret_hu_conv;
        }
 
index c30ec343fe5fbdb621221e561d4a2b884e0fa7ef..bc295416a33bbb5a1e194f128f1698d9cb4c313f 100644 (file)
@@ -79,7 +79,6 @@ public class ClosingTransaction : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ClosingTransaction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ClosingTransaction(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_outpoint); };
                return ret_hu_conv;
        }
 
@@ -114,7 +113,6 @@ public class ClosingTransaction : CommonBase {
                GC.KeepAlive(funding_outpoint);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TrustedClosingTransactionNoneZ ret_hu_conv = Result_TrustedClosingTransactionNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(funding_outpoint); };
                return ret_hu_conv;
        }
 
index e5d179771057f3118415a63bc32d021907475056..8a8f598e26e138500ac0906c1c21d9b24c3b0da4 100644 (file)
@@ -30,6 +30,7 @@ public class ClosureReason : CommonBase {
                        case 10: return new ClosureReason_CounterpartyCoopClosedUnfundedChannel(ptr);
                        case 11: return new ClosureReason_FundingBatchClosure(ptr);
                        case 12: return new ClosureReason_HTLCsTimedOut(ptr);
+                       case 13: return new ClosureReason_PeerFeerateTooLow(ptr);
                        default:
                                throw new ArgumentException("Impossible enum variant");
                }
@@ -56,7 +57,26 @@ public class ClosureReason : CommonBase {
        }
        /** A ClosureReason of type HolderForceClosed */
        public class ClosureReason_HolderForceClosed : ClosureReason {
+               /**
+                * Whether or not the latest transaction was broadcasted when the channel was force
+                * closed.
+                * 
+                * Channels closed using [`ChannelManager::force_close_broadcasting_latest_txn`] will have
+                * this field set to true, whereas channels closed using [`ChannelManager::force_close_without_broadcasting_txn`]
+                * or force-closed prior to being funded will have this field set to false.
+                * 
+                * This will be `None` for objects generated or written by LDK 0.0.123 and
+                * earlier.
+                * 
+                * [`ChannelManager::force_close_broadcasting_latest_txn`]: crate::ln::channelmanager::ChannelManager::force_close_broadcasting_latest_txn.
+                * [`ChannelManager::force_close_without_broadcasting_txn`]: crate::ln::channelmanager::ChannelManager::force_close_without_broadcasting_txn.
+                */
+               public Option_boolZ broadcasted_latest_txn;
                internal ClosureReason_HolderForceClosed(long ptr) : base(null, ptr) {
+                       long broadcasted_latest_txn = bindings.LDKClosureReason_HolderForceClosed_get_broadcasted_latest_txn(ptr);
+                       org.ldk.structs.Option_boolZ broadcasted_latest_txn_hu_conv = org.ldk.structs.Option_boolZ.constr_from_ptr(broadcasted_latest_txn);
+                       if (broadcasted_latest_txn_hu_conv != null) { broadcasted_latest_txn_hu_conv.ptrs_to.AddLast(this); };
+                       this.broadcasted_latest_txn = broadcasted_latest_txn_hu_conv;
                }
        }
        /** A ClosureReason of type LegacyCooperativeClosure */
@@ -121,6 +141,23 @@ public class ClosureReason : CommonBase {
                internal ClosureReason_HTLCsTimedOut(long ptr) : base(null, ptr) {
                }
        }
+       /** A ClosureReason of type PeerFeerateTooLow */
+       public class ClosureReason_PeerFeerateTooLow : ClosureReason {
+               /**
+                * The feerate on our channel set by our peer.
+                */
+               public int peer_feerate_sat_per_kw;
+               /**
+                * The required feerate we enforce, from our [`FeeEstimator`].
+                * 
+                * [`FeeEstimator`]: crate::chain::chaininterface::FeeEstimator
+                */
+               public int required_feerate_sat_per_kw;
+               internal ClosureReason_PeerFeerateTooLow(long ptr) : base(null, ptr) {
+                       this.peer_feerate_sat_per_kw = bindings.LDKClosureReason_PeerFeerateTooLow_get_peer_feerate_sat_per_kw(ptr);
+                       this.required_feerate_sat_per_kw = bindings.LDKClosureReason_PeerFeerateTooLow_get_required_feerate_sat_per_kw(ptr);
+               }
+       }
        internal long clone_ptr() {
                long ret = bindings.ClosureReason_clone_ptr(this.ptr);
                GC.KeepAlive(this);
@@ -148,15 +185,15 @@ public class ClosureReason : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(peer_msg); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new HolderForceClosed-variant ClosureReason
         */
-       public static ClosureReason holder_force_closed() {
-               long ret = bindings.ClosureReason_holder_force_closed();
+       public static ClosureReason holder_force_closed(org.ldk.structs.Option_boolZ broadcasted_latest_txn) {
+               long ret = bindings.ClosureReason_holder_force_closed(broadcasted_latest_txn.ptr);
+               GC.KeepAlive(broadcasted_latest_txn);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
@@ -285,6 +322,19 @@ public class ClosureReason : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Utility method to constructs a new PeerFeerateTooLow-variant ClosureReason
+        */
+       public static ClosureReason peer_feerate_too_low(int peer_feerate_sat_per_kw, int required_feerate_sat_per_kw) {
+               long ret = bindings.ClosureReason_peer_feerate_too_low(peer_feerate_sat_per_kw, required_feerate_sat_per_kw);
+               GC.KeepAlive(peer_feerate_sat_per_kw);
+               GC.KeepAlive(required_feerate_sat_per_kw);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two ClosureReasons contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index d136e2e617321b5017ce0c54716715a9379f27dc..3df0eeb60cd597bf039c24d0e48edfb26dfe7e9d 100644 (file)
@@ -44,7 +44,6 @@ public class CoinSelection : CommonBase {
                bindings.CoinSelection_set_confirmed_utxos(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_6 => val_conv_6.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (Utxo val_conv_6 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_6); }; };
        }
 
        /**
@@ -72,7 +71,6 @@ public class CoinSelection : CommonBase {
                bindings.CoinSelection_set_change_output(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -85,8 +83,6 @@ public class CoinSelection : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CoinSelection ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CoinSelection(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (Utxo confirmed_utxos_arg_conv_6 in confirmed_utxos_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(confirmed_utxos_arg_conv_6); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(change_output_arg); };
                return ret_hu_conv;
        }
 
index 4ac1715be3b0b8aad0ef55bc3af7f053119ecb86..55e149a4ac91769de3019a7af2673e169e92f837 100644 (file)
@@ -149,7 +149,6 @@ public class CoinSelectionSource : CommonBase {
                GC.KeepAlive(target_feerate_sat_per_1000_weight);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CoinSelectionNoneZ ret_hu_conv = Result_CoinSelectionNoneZ.constr_from_ptr(ret);
-               foreach (Input must_spend_conv_7 in must_spend) { if (this != null) { this.ptrs_to.AddLast(must_spend_conv_7); }; };
                return ret_hu_conv;
        }
 
index 34124aade13726b898454ee1521042e2b22d88b7..f38bfff26f0460bbfc2dd313c99ed12904bc8795 100644 (file)
@@ -36,7 +36,6 @@ public class CommitmentSigned : CommonBase {
                bindings.CommitmentSigned_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -88,18 +87,45 @@ public class CommitmentSigned : CommonBase {
                GC.KeepAlive(val);
        }
 
+       /**
+        * Optional batch size and other parameters
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public CommitmentSignedBatch get_batch() {
+               long ret = bindings.CommitmentSigned_get_batch(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.CommitmentSignedBatch ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommitmentSignedBatch(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Optional batch size and other parameters
+        * 
+        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public void set_batch(org.ldk.structs.CommitmentSignedBatch val) {
+               bindings.CommitmentSigned_set_batch(this.ptr, val == null ? 0 : val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
        /**
         * Constructs a new CommitmentSigned given each field
+        * 
+        * Note that batch_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static CommitmentSigned of(org.ldk.structs.ChannelId channel_id_arg, byte[] signature_arg, byte[][] htlc_signatures_arg) {
-               long ret = bindings.CommitmentSigned_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(signature_arg, 64)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(htlc_signatures_arg, htlc_signatures_arg_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(htlc_signatures_arg_conv_8, 64)))));
+       public static CommitmentSigned of(org.ldk.structs.ChannelId channel_id_arg, byte[] signature_arg, byte[][] htlc_signatures_arg, org.ldk.structs.CommitmentSignedBatch batch_arg) {
+               long ret = bindings.CommitmentSigned_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(signature_arg, 64)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(htlc_signatures_arg, htlc_signatures_arg_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(htlc_signatures_arg_conv_8, 64)))), batch_arg == null ? 0 : batch_arg.ptr);
                GC.KeepAlive(channel_id_arg);
                GC.KeepAlive(signature_arg);
                GC.KeepAlive(htlc_signatures_arg);
+               GC.KeepAlive(batch_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CommitmentSigned ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommitmentSigned(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/CommitmentSignedBatch.cs b/c_sharp/src/org/ldk/structs/CommitmentSignedBatch.cs
new file mode 100644 (file)
index 0000000..5811959
--- /dev/null
@@ -0,0 +1,139 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * Optional batch parameters for `commitment_signed` message.
+ */
+public class CommitmentSignedBatch : CommonBase {
+       internal CommitmentSignedBatch(object _dummy, long ptr) : base(ptr) { }
+       ~CommitmentSignedBatch() {
+               if (ptr != 0) { bindings.CommitmentSignedBatch_free(ptr); }
+       }
+
+       /**
+        * Batch size N: all N `commitment_signed` messages must be received before being processed
+        */
+       public short get_batch_size() {
+               short ret = bindings.CommitmentSignedBatch_get_batch_size(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Batch size N: all N `commitment_signed` messages must be received before being processed
+        */
+       public void set_batch_size(short val) {
+               bindings.CommitmentSignedBatch_set_batch_size(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The funding transaction, to discriminate among multiple pending funding transactions (e.g. in case of splicing)
+        */
+       public byte[] get_funding_txid() {
+               long ret = bindings.CommitmentSignedBatch_get_funding_txid(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The funding transaction, to discriminate among multiple pending funding transactions (e.g. in case of splicing)
+        */
+       public void set_funding_txid(byte[] val) {
+               bindings.CommitmentSignedBatch_set_funding_txid(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 32)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new CommitmentSignedBatch given each field
+        */
+       public static CommitmentSignedBatch of(short batch_size_arg, byte[] funding_txid_arg) {
+               long ret = bindings.CommitmentSignedBatch_new(batch_size_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(funding_txid_arg, 32)));
+               GC.KeepAlive(batch_size_arg);
+               GC.KeepAlive(funding_txid_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.CommitmentSignedBatch ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommitmentSignedBatch(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CommitmentSignedBatch_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the CommitmentSignedBatch
+        */
+       public CommitmentSignedBatch clone() {
+               long ret = bindings.CommitmentSignedBatch_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.CommitmentSignedBatch ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommitmentSignedBatch(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Generates a non-cryptographic 64-bit hash of the CommitmentSignedBatch.
+        */
+       public long hash() {
+               long ret = bindings.CommitmentSignedBatch_hash(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       public override int GetHashCode() {
+               return (int)this.hash();
+       }
+       /**
+        * Checks if two CommitmentSignedBatchs contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.CommitmentSignedBatch b) {
+               bool ret = bindings.CommitmentSignedBatch_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is CommitmentSignedBatch)) return false;
+               return this.eq((CommitmentSignedBatch)o);
+       }
+       /**
+        * Serialize the CommitmentSignedBatch object into a byte array which can be read by CommitmentSignedBatch_read
+        */
+       public byte[] write() {
+               long ret = bindings.CommitmentSignedBatch_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a CommitmentSignedBatch from a byte array, created by CommitmentSignedBatch_write
+        */
+       public static Result_CommitmentSignedBatchDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.CommitmentSignedBatch_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CommitmentSignedBatchDecodeErrorZ ret_hu_conv = Result_CommitmentSignedBatchDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 4eed1ff67454fcb86d8df2c91b786b1bf117cb7e..577e58ddae7b283a431e78bb3a6820218ec6a378 100644 (file)
@@ -42,7 +42,6 @@ public class CommitmentUpdate : CommonBase {
                bindings.CommitmentUpdate_set_update_add_htlcs(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_15 => val_conv_15.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (UpdateAddHTLC val_conv_15 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_15); }; };
        }
 
        /**
@@ -71,7 +70,6 @@ public class CommitmentUpdate : CommonBase {
                bindings.CommitmentUpdate_set_update_fulfill_htlcs(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_19 => val_conv_19.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (UpdateFulfillHTLC val_conv_19 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_19); }; };
        }
 
        /**
@@ -100,7 +98,6 @@ public class CommitmentUpdate : CommonBase {
                bindings.CommitmentUpdate_set_update_fail_htlcs(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_16 => val_conv_16.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (UpdateFailHTLC val_conv_16 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_16); }; };
        }
 
        /**
@@ -129,7 +126,6 @@ public class CommitmentUpdate : CommonBase {
                bindings.CommitmentUpdate_set_update_fail_malformed_htlcs(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_25 => val_conv_25.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (UpdateFailMalformedHTLC val_conv_25 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_25); }; };
        }
 
        /**
@@ -155,7 +151,6 @@ public class CommitmentUpdate : CommonBase {
                bindings.CommitmentUpdate_set_update_fee(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -177,7 +172,6 @@ public class CommitmentUpdate : CommonBase {
                bindings.CommitmentUpdate_set_commitment_signed(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -196,12 +190,6 @@ public class CommitmentUpdate : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CommitmentUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommitmentUpdate(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (UpdateAddHTLC update_add_htlcs_arg_conv_15 in update_add_htlcs_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_add_htlcs_arg_conv_15); }; };
-               foreach (UpdateFulfillHTLC update_fulfill_htlcs_arg_conv_19 in update_fulfill_htlcs_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_fulfill_htlcs_arg_conv_19); }; };
-               foreach (UpdateFailHTLC update_fail_htlcs_arg_conv_16 in update_fail_htlcs_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_fail_htlcs_arg_conv_16); }; };
-               foreach (UpdateFailMalformedHTLC update_fail_malformed_htlcs_arg_conv_25 in update_fail_malformed_htlcs_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_fail_malformed_htlcs_arg_conv_25); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_fee_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(commitment_signed_arg); };
                return ret_hu_conv;
        }
 
index 5c0a34d90f02ff1dc00064c88d5159e609336567..b4ab048340ee2f76407ab9c479d7cf22c7a5da56 100644 (file)
@@ -36,7 +36,6 @@ public class CommonAcceptChannelFields : CommonBase {
                bindings.CommonAcceptChannelFields_set_temporary_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -294,7 +293,6 @@ public class CommonAcceptChannelFields : CommonBase {
                bindings.CommonAcceptChannelFields_set_shutdown_scriptpubkey(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -330,7 +328,6 @@ public class CommonAcceptChannelFields : CommonBase {
                bindings.CommonAcceptChannelFields_set_channel_type(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -358,9 +355,6 @@ public class CommonAcceptChannelFields : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CommonAcceptChannelFields ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommonAcceptChannelFields(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(temporary_channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(shutdown_scriptpubkey_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type_arg); };
                return ret_hu_conv;
        }
 
index 11626a7de88296f78bcb1c41f01d7926e5a6b8e5..149508211167f0004af811ba880cc190cf9c6fc1 100644 (file)
@@ -60,7 +60,6 @@ public class CommonOpenChannelFields : CommonBase {
                bindings.CommonOpenChannelFields_set_temporary_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -358,7 +357,6 @@ public class CommonOpenChannelFields : CommonBase {
                bindings.CommonOpenChannelFields_set_shutdown_scriptpubkey(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -390,7 +388,6 @@ public class CommonOpenChannelFields : CommonBase {
                bindings.CommonOpenChannelFields_set_channel_type(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -421,9 +418,6 @@ public class CommonOpenChannelFields : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CommonOpenChannelFields ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommonOpenChannelFields(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(temporary_channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(shutdown_scriptpubkey_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type_arg); };
                return ret_hu_conv;
        }
 
@@ -474,5 +468,17 @@ public class CommonOpenChannelFields : CommonBase {
                if (!(o is CommonOpenChannelFields)) return false;
                return this.eq((CommonOpenChannelFields)o);
        }
+       /**
+        * The [`ChannelParameters`] for this channel.
+        */
+       public ChannelParameters channel_parameters() {
+               long ret = bindings.CommonOpenChannelFields_channel_parameters(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelParameters(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
 }
 } } }
index bd949cce22985ebb359365bd188c04045758bdca..47a3207e6421215203a965a3451823775710f162 100644 (file)
@@ -34,7 +34,6 @@ public class CounterpartyChannelTransactionParameters : CommonBase {
                bindings.CounterpartyChannelTransactionParameters_set_pubkeys(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -65,7 +64,6 @@ public class CounterpartyChannelTransactionParameters : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.CounterpartyChannelTransactionParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CounterpartyChannelTransactionParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(pubkeys_arg); };
                return ret_hu_conv;
        }
 
index 9184b690f6d9c5d220d47c9e66cacf2327767514..915b42b371a15cbcb7c9f323d3582f091f5f0a65 100644 (file)
@@ -20,6 +20,16 @@ public interface CustomMessageHandlerInterface {
         * connection to the node exists, then the message is simply not sent.
         */
        TwoTuple_PublicKeyTypeZ[] get_and_clear_pending_msg();
+       /**Indicates a peer disconnected.
+        */
+       void peer_disconnected(byte[] their_node_id);
+       /**Handle a peer connecting.
+        * 
+        * May return an `Err(())` if the features the peer supports are not sufficient to communicate
+        * with us. Implementors should be somewhat conservative about doing so, however, as other
+        * message handlers may still wish to communicate with this peer.
+        */
+       Result_NoneNoneZ peer_connected(byte[] their_node_id, Init msg, bool inbound);
        /**Gets the node feature flags which this handler itself supports. All available handlers are
         * queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
         * which are broadcasted in our [`NodeAnnouncement`] message.
@@ -75,6 +85,19 @@ public class CustomMessageHandler : CommonBase {
                        long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_25 => ret_conv_25.clone_ptr()));
                        return result;
                }
+               public void peer_disconnected(long _their_node_id) {
+                       byte[] _their_node_id_conv = InternalUtils.decodeUint8Array(_their_node_id);
+                       arg.peer_disconnected(_their_node_id_conv);
+                               GC.KeepAlive(arg);
+               }
+               public long peer_connected(long _their_node_id, long _msg, bool _inbound) {
+                       byte[] _their_node_id_conv = InternalUtils.decodeUint8Array(_their_node_id);
+                       org.ldk.structs.Init _msg_hu_conv = null; if (_msg < 0 || _msg > 4096) { _msg_hu_conv = new org.ldk.structs.Init(null, _msg); }
+                       Result_NoneNoneZ ret = arg.peer_connected(_their_node_id_conv, _msg_hu_conv, _inbound);
+                               GC.KeepAlive(arg);
+                       long result = ret.clone_ptr();
+                       return result;
+               }
                public long provided_node_features() {
                        NodeFeatures ret = arg.provided_node_features();
                                GC.KeepAlive(arg);
@@ -141,6 +164,34 @@ public class CustomMessageHandler : CommonBase {
                return ret_conv_25_arr;
        }
 
+       /**
+        * Indicates a peer disconnected.
+        */
+       public void peer_disconnected(byte[] their_node_id) {
+               bindings.CustomMessageHandler_peer_disconnected(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(their_node_id, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(their_node_id);
+       }
+
+       /**
+        * Handle a peer connecting.
+        * 
+        * May return an `Err(())` if the features the peer supports are not sufficient to communicate
+        * with us. Implementors should be somewhat conservative about doing so, however, as other
+        * message handlers may still wish to communicate with this peer.
+        */
+       public Result_NoneNoneZ peer_connected(byte[] their_node_id, org.ldk.structs.Init msg, bool inbound) {
+               long ret = bindings.CustomMessageHandler_peer_connected(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(their_node_id, 33)), msg.ptr, inbound);
+               GC.KeepAlive(this);
+               GC.KeepAlive(their_node_id);
+               GC.KeepAlive(msg);
+               GC.KeepAlive(inbound);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(msg); };
+               return ret_hu_conv;
+       }
+
        /**
         * Gets the node feature flags which this handler itself supports. All available handlers are
         * queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
index 95565d2b41eba4899753cad507c989389ca28b51..4021917192126be7d1e9c30ae34fff3c7006ad19 100644 (file)
@@ -13,8 +13,10 @@ public interface CustomOnionMessageHandlerInterface {
        /**Called with the custom message that was received, returning a response to send, if any.
         * 
         * The returned [`Self::CustomMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
+        * 
+        * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       Option_OnionMessageContentsZ handle_custom_message(OnionMessageContents msg);
+       Option_C2Tuple_OnionMessageContentsResponseInstructionZZ handle_custom_message(OnionMessageContents message, Option_CVec_u8ZZ context, Responder responder);
        /**Read a custom message of type `message_type` from `buffer`, returning `Ok(None)` if the
         * message type is unknown.
         */
@@ -24,7 +26,7 @@ public interface CustomOnionMessageHandlerInterface {
         * Typically, this is used for messages initiating a message flow rather than in response to
         * another message. The latter should use the return value of [`Self::handle_custom_message`].
         */
-       ThreeTuple_OnionMessageContentsDestinationBlindedPathZ[] release_pending_custom_messages();
+       TwoTuple_OnionMessageContentsMessageSendInstructionsZ[] release_pending_custom_messages();
 }
 
 /**
@@ -53,13 +55,16 @@ public class CustomOnionMessageHandler : CommonBase {
                internal LDKCustomOnionMessageHandlerImpl(CustomOnionMessageHandlerInterface arg, LDKCustomOnionMessageHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
                private CustomOnionMessageHandlerInterface arg;
                private LDKCustomOnionMessageHandlerHolder impl_holder;
-               public long handle_custom_message(long _msg) {
-                       OnionMessageContents ret_hu_conv = new OnionMessageContents(null, _msg);
+               public long handle_custom_message(long _message, long _context, long _responder) {
+                       OnionMessageContents ret_hu_conv = new OnionMessageContents(null, _message);
                        if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-                       Option_OnionMessageContentsZ ret = arg.handle_custom_message(ret_hu_conv);
+                       org.ldk.structs.Option_CVec_u8ZZ _context_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(_context);
+                       if (_context_hu_conv != null) { _context_hu_conv.ptrs_to.AddLast(this); };
+                       org.ldk.structs.Responder _responder_hu_conv = null; if (_responder < 0 || _responder > 4096) { _responder_hu_conv = new org.ldk.structs.Responder(null, _responder); }
+                       if (_responder_hu_conv != null) { _responder_hu_conv.ptrs_to.AddLast(this); };
+                       Option_C2Tuple_OnionMessageContentsResponseInstructionZZ ret = arg.handle_custom_message(ret_hu_conv, _context_hu_conv, _responder_hu_conv);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
-                       if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret); };
                        return result;
                }
                public long read_custom_message(long _message_type, long _buffer) {
@@ -70,9 +75,9 @@ public class CustomOnionMessageHandler : CommonBase {
                        return result;
                }
                public long release_pending_custom_messages() {
-                       ThreeTuple_OnionMessageContentsDestinationBlindedPathZ[] ret = arg.release_pending_custom_messages();
+                       TwoTuple_OnionMessageContentsMessageSendInstructionsZ[] ret = arg.release_pending_custom_messages();
                                GC.KeepAlive(arg);
-                       long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_56 => ret_conv_56.clone_ptr()));
+                       long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_55 => ret_conv_55.clone_ptr()));
                        return result;
                }
        }
@@ -93,15 +98,19 @@ public class CustomOnionMessageHandler : CommonBase {
         * Called with the custom message that was received, returning a response to send, if any.
         * 
         * The returned [`Self::CustomMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
+        * 
+        * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public Option_OnionMessageContentsZ handle_custom_message(org.ldk.structs.OnionMessageContents msg) {
-               long ret = bindings.CustomOnionMessageHandler_handle_custom_message(this.ptr, msg.ptr);
+       public Option_C2Tuple_OnionMessageContentsResponseInstructionZZ handle_custom_message(org.ldk.structs.OnionMessageContents message, org.ldk.structs.Option_CVec_u8ZZ context, org.ldk.structs.Responder responder) {
+               long ret = bindings.CustomOnionMessageHandler_handle_custom_message(this.ptr, message.ptr, context.ptr, responder == null ? 0 : responder.ptr);
                GC.KeepAlive(this);
-               GC.KeepAlive(msg);
+               GC.KeepAlive(message);
+               GC.KeepAlive(context);
+               GC.KeepAlive(responder);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_OnionMessageContentsZ ret_hu_conv = org.ldk.structs.Option_OnionMessageContentsZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(msg); };
+               if (this != null) { this.ptrs_to.AddLast(message); };
                return ret_hu_conv;
        }
 
@@ -125,20 +134,20 @@ public class CustomOnionMessageHandler : CommonBase {
         * Typically, this is used for messages initiating a message flow rather than in response to
         * another message. The latter should use the return value of [`Self::handle_custom_message`].
         */
-       public ThreeTuple_OnionMessageContentsDestinationBlindedPathZ[] release_pending_custom_messages() {
+       public TwoTuple_OnionMessageContentsMessageSendInstructionsZ[] release_pending_custom_messages() {
                long ret = bindings.CustomOnionMessageHandler_release_pending_custom_messages(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_56_len = InternalUtils.getArrayLength(ret);
-               ThreeTuple_OnionMessageContentsDestinationBlindedPathZ[] ret_conv_56_arr = new ThreeTuple_OnionMessageContentsDestinationBlindedPathZ[ret_conv_56_len];
-               for (int e = 0; e < ret_conv_56_len; e++) {
-                       long ret_conv_56 = InternalUtils.getU64ArrayElem(ret, e);
-                       ThreeTuple_OnionMessageContentsDestinationBlindedPathZ ret_conv_56_hu_conv = new ThreeTuple_OnionMessageContentsDestinationBlindedPathZ(null, ret_conv_56);
-                       if (ret_conv_56_hu_conv != null) { ret_conv_56_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_56_arr[e] = ret_conv_56_hu_conv;
+               int ret_conv_55_len = InternalUtils.getArrayLength(ret);
+               TwoTuple_OnionMessageContentsMessageSendInstructionsZ[] ret_conv_55_arr = new TwoTuple_OnionMessageContentsMessageSendInstructionsZ[ret_conv_55_len];
+               for (int d = 0; d < ret_conv_55_len; d++) {
+                       long ret_conv_55 = InternalUtils.getU64ArrayElem(ret, d);
+                       TwoTuple_OnionMessageContentsMessageSendInstructionsZ ret_conv_55_hu_conv = new TwoTuple_OnionMessageContentsMessageSendInstructionsZ(null, ret_conv_55);
+                       if (ret_conv_55_hu_conv != null) { ret_conv_55_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_55_arr[d] = ret_conv_55_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_56_arr;
+               return ret_conv_55_arr;
        }
 
 }
index 170bdb2ec6fd8ebb44804b945829fee9a523dc50..838ba3b16f0b336c10a128dfa1f83de874aa4f24 100644 (file)
@@ -8,6 +8,13 @@ namespace org { namespace ldk { namespace structs {
 
 /**
  * A [`MessageRouter`] that can only route to a directly connected [`Destination`].
+ * 
+ * # Privacy
+ * 
+ * Creating [`BlindedMessagePath`]s may affect privacy since, if a suitable path cannot be found,
+ * it will create a one-hop path using the recipient as the introduction node if it is a announced
+ * node. Otherwise, there is no way to find a path to the introduction node in order to send a
+ * message, and thus an `Err` is returned.
  */
 public class DefaultMessageRouter : CommonBase {
        internal DefaultMessageRouter(object _dummy, long ptr) : base(ptr) { }
index 8d72125365fd0b46299ee36d3a2fd3ff83efc974..b0f535f720aafc06f6ac58f9ea1a74860efceb56 100644 (file)
@@ -8,6 +8,11 @@ namespace org { namespace ldk { namespace structs {
 
 /**
  * A [`Router`] implemented using [`find_route`].
+ * 
+ * # Privacy
+ * 
+ * Implements [`MessageRouter`] by delegating to [`DefaultMessageRouter`]. See those docs for
+ * privacy implications.
  */
 public class DefaultRouter : CommonBase {
        internal DefaultRouter(object _dummy, long ptr) : base(ptr) { }
@@ -32,7 +37,6 @@ public class DefaultRouter : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(scorer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(score_params); };
                return ret_hu_conv;
        }
 
index 35cf8924331453ad33428605e705f0d7d45a0006..168dd1c374a5a06e09ee29af7ee60986a81e2a12 100644 (file)
@@ -14,7 +14,7 @@ namespace org { namespace ldk { namespace structs {
  * punish and claim all the channel funds if the state broadcasted was previously revoked.
  * 
  * [See the BOLT specs]
- * (https://github.com/lightning/bolts/blob/master/03-transactions.md#localpubkey-local_htlcpubkey-remote_htlcpubkey-local_delayedpubkey-and-remote_delayedpubkey-derivation)
+ * <https://github.com/lightning/bolts/blob/master/03-transactions.md#localpubkey-local_htlcpubkey-remote_htlcpubkey-local_delayedpubkey-and-remote_delayedpubkey-derivation>
  * for more information on key derivation details.
  */
 public class DelayedPaymentKey : CommonBase {
index 3dd136d3c492c06b338ff410ac8fe9332de1b30e..330eaabdef0edefdd600ca5f6a4257775682a043 100644 (file)
@@ -36,7 +36,6 @@ public class DelayedPaymentOutputDescriptor : CommonBase {
                bindings.DelayedPaymentOutputDescriptor_set_outpoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -120,7 +119,6 @@ public class DelayedPaymentOutputDescriptor : CommonBase {
                bindings.DelayedPaymentOutputDescriptor_set_revocation_pubkey(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -192,7 +190,6 @@ public class DelayedPaymentOutputDescriptor : CommonBase {
                bindings.DelayedPaymentOutputDescriptor_set_channel_transaction_parameters(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -213,9 +210,6 @@ public class DelayedPaymentOutputDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.DelayedPaymentOutputDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.DelayedPaymentOutputDescriptor(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(revocation_pubkey_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_transaction_parameters_arg); };
                return ret_hu_conv;
        }
 
index 271abfc30b822e65d27554da88f8ba0ff99e5cf9..ecd664f34ddab235232512b6714afcd55e2f00ab 100644 (file)
@@ -66,8 +66,8 @@ public class Description : CommonBase {
                return this.eq((Description)o);
        }
        /**
-        * Creates a new `Description` if `description` is at most 1023 __bytes__ long,
-        * returns [`CreationError::DescriptionTooLong`] otherwise
+        * Creates a new `Description` if `description` is at most 1023 * 5 bits (i.e., 639 bytes)
+        * long, and returns [`CreationError::DescriptionTooLong`] otherwise.
         * 
         * Please note that single characters may use more than one byte due to UTF8 encoding.
         */
@@ -88,7 +88,19 @@ public class Description : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UntrustedString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UntrustedString(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Get a reference to the underlying description [`UntrustedString`]
+        */
+       public UntrustedString as_inner() {
+               long ret = bindings.Description_as_inner(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.UntrustedString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UntrustedString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
index 74cf38c85afd63228a88e1cb5212f0fe3995165f..8209a8b040ef9efa225191ca9104bc71144e7608 100644 (file)
@@ -35,10 +35,10 @@ public class Destination : CommonBase {
        }
        /** A Destination of type BlindedPath */
        public class Destination_BlindedPath : Destination {
-               public BlindedPath blinded_path;
+               public BlindedMessagePath blinded_path;
                internal Destination_BlindedPath(long ptr) : base(null, ptr) {
                        long blinded_path = bindings.LDKDestination_BlindedPath_get_blinded_path(ptr);
-                       org.ldk.structs.BlindedPath blinded_path_hu_conv = null; if (blinded_path < 0 || blinded_path > 4096) { blinded_path_hu_conv = new org.ldk.structs.BlindedPath(null, blinded_path); }
+                       org.ldk.structs.BlindedMessagePath blinded_path_hu_conv = null; if (blinded_path < 0 || blinded_path > 4096) { blinded_path_hu_conv = new org.ldk.structs.BlindedMessagePath(null, blinded_path); }
                        if (blinded_path_hu_conv != null) { blinded_path_hu_conv.ptrs_to.AddLast(this); };
                        this.blinded_path = blinded_path_hu_conv;
                }
@@ -76,13 +76,12 @@ public class Destination : CommonBase {
        /**
         * Utility method to constructs a new BlindedPath-variant Destination
         */
-       public static Destination blinded_path(org.ldk.structs.BlindedPath a) {
+       public static Destination blinded_path(org.ldk.structs.BlindedMessagePath a) {
                long ret = bindings.Destination_blinded_path(a.ptr);
                GC.KeepAlive(a);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Destination ret_hu_conv = org.ldk.structs.Destination.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 92f2a1ed99587487c5aec9a93141ef4ed5380a41..913116c8519a2692571ac3401e3f12666e8ac0e7 100644 (file)
@@ -556,5 +556,23 @@ public class EcdsaChannelSigner : CommonBase {
                return ret_hu_conv;
        }
 
+       internal long clone_ptr() {
+               long ret = bindings.EcdsaChannelSigner_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of a EcdsaChannelSigner
+        */
+       public EcdsaChannelSigner clone() {
+               long ret = bindings.EcdsaChannelSigner_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               EcdsaChannelSigner ret_hu_conv = new EcdsaChannelSigner(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
 }
 } } }
index 1d70fe1f567418689e84a330f87fcf05c0b86b02..c3cd1f73675b83739d7559e094b3f9da2b21ece7 100644 (file)
@@ -57,7 +57,6 @@ public class ErroneousField : CommonBase {
                bindings.ErroneousField_set_suggested_value(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -70,7 +69,6 @@ public class ErroneousField : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ErroneousField ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ErroneousField(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(suggested_value_arg); };
                return ret_hu_conv;
        }
 
index c137b8578317de9c31c1d6619fdb6140ac09f8f6..33be0e728130f672956bb7aa52afea2cb174e47c 100644 (file)
@@ -134,7 +134,6 @@ public class ErrorAction : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ErrorAction ret_hu_conv = org.ldk.structs.ErrorAction.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -147,7 +146,6 @@ public class ErrorAction : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ErrorAction ret_hu_conv = org.ldk.structs.ErrorAction.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -194,7 +192,6 @@ public class ErrorAction : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ErrorAction ret_hu_conv = org.ldk.structs.ErrorAction.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -208,7 +205,6 @@ public class ErrorAction : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ErrorAction ret_hu_conv = org.ldk.structs.ErrorAction.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
index c2f4971f13c96663eb04f8dcd7bb504791cb94b0..aa86e14fe669a00646b98b0d7710c41e4a0c9395 100644 (file)
@@ -42,7 +42,6 @@ public class ErrorMessage : CommonBase {
                bindings.ErrorMessage_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -83,7 +82,6 @@ public class ErrorMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ErrorMessage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ErrorMessage(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 342adec38375d5de4389b7557f4760ef07cb72c4..2732bd374a6ca8d428aface21f674c07cb06b0c1 100644 (file)
@@ -22,27 +22,30 @@ public class Event : CommonBase {
                long raw_ty = bindings.LDKEvent_ty_from_ptr(ptr);
                switch (raw_ty) {
                        case 0: return new Event_FundingGenerationReady(ptr);
-                       case 1: return new Event_PaymentClaimable(ptr);
-                       case 2: return new Event_PaymentClaimed(ptr);
-                       case 3: return new Event_ConnectionNeeded(ptr);
-                       case 4: return new Event_InvoiceRequestFailed(ptr);
-                       case 5: return new Event_PaymentSent(ptr);
-                       case 6: return new Event_PaymentFailed(ptr);
-                       case 7: return new Event_PaymentPathSuccessful(ptr);
-                       case 8: return new Event_PaymentPathFailed(ptr);
-                       case 9: return new Event_ProbeSuccessful(ptr);
-                       case 10: return new Event_ProbeFailed(ptr);
-                       case 11: return new Event_PendingHTLCsForwardable(ptr);
-                       case 12: return new Event_HTLCIntercepted(ptr);
-                       case 13: return new Event_SpendableOutputs(ptr);
-                       case 14: return new Event_PaymentForwarded(ptr);
-                       case 15: return new Event_ChannelPending(ptr);
-                       case 16: return new Event_ChannelReady(ptr);
-                       case 17: return new Event_ChannelClosed(ptr);
-                       case 18: return new Event_DiscardFunding(ptr);
-                       case 19: return new Event_OpenChannelRequest(ptr);
-                       case 20: return new Event_HTLCHandlingFailed(ptr);
-                       case 21: return new Event_BumpTransaction(ptr);
+                       case 1: return new Event_FundingTxBroadcastSafe(ptr);
+                       case 2: return new Event_PaymentClaimable(ptr);
+                       case 3: return new Event_PaymentClaimed(ptr);
+                       case 4: return new Event_ConnectionNeeded(ptr);
+                       case 5: return new Event_InvoiceReceived(ptr);
+                       case 6: return new Event_PaymentSent(ptr);
+                       case 7: return new Event_PaymentFailed(ptr);
+                       case 8: return new Event_PaymentPathSuccessful(ptr);
+                       case 9: return new Event_PaymentPathFailed(ptr);
+                       case 10: return new Event_ProbeSuccessful(ptr);
+                       case 11: return new Event_ProbeFailed(ptr);
+                       case 12: return new Event_PendingHTLCsForwardable(ptr);
+                       case 13: return new Event_HTLCIntercepted(ptr);
+                       case 14: return new Event_SpendableOutputs(ptr);
+                       case 15: return new Event_PaymentForwarded(ptr);
+                       case 16: return new Event_ChannelPending(ptr);
+                       case 17: return new Event_ChannelReady(ptr);
+                       case 18: return new Event_ChannelClosed(ptr);
+                       case 19: return new Event_DiscardFunding(ptr);
+                       case 20: return new Event_OpenChannelRequest(ptr);
+                       case 21: return new Event_HTLCHandlingFailed(ptr);
+                       case 22: return new Event_BumpTransaction(ptr);
+                       case 23: return new Event_OnionMessageIntercepted(ptr);
+                       case 24: return new Event_OnionMessagePeerConnected(ptr);
                        default:
                                throw new ArgumentException("Impossible enum variant");
                }
@@ -101,6 +104,51 @@ public class Event : CommonBase {
                        this.user_channel_id = user_channel_id_conv;
                }
        }
+       /** A Event of type FundingTxBroadcastSafe */
+       public class Event_FundingTxBroadcastSafe : Event {
+               /**
+                * The `channel_id` indicating which channel has reached this stage.
+                */
+               public ChannelId channel_id;
+               /**
+                * The `user_channel_id` value passed in to [`ChannelManager::create_channel`].
+                * 
+                * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
+                */
+               public UInt128 user_channel_id;
+               /**
+                * The outpoint of the channel's funding transaction.
+                */
+               public OutPoint funding_txo;
+               /**
+                * The `node_id` of the channel counterparty.
+                */
+               public byte[] counterparty_node_id;
+               /**
+                * The `temporary_channel_id` this channel used to be known by during channel establishment.
+                */
+               public ChannelId former_temporary_channel_id;
+               internal Event_FundingTxBroadcastSafe(long ptr) : base(null, ptr) {
+                       long channel_id = bindings.LDKEvent_FundingTxBroadcastSafe_get_channel_id(ptr);
+                       org.ldk.structs.ChannelId channel_id_hu_conv = null; if (channel_id < 0 || channel_id > 4096) { channel_id_hu_conv = new org.ldk.structs.ChannelId(null, channel_id); }
+                       if (channel_id_hu_conv != null) { channel_id_hu_conv.ptrs_to.AddLast(this); };
+                       this.channel_id = channel_id_hu_conv;
+                       long user_channel_id = bindings.LDKEvent_FundingTxBroadcastSafe_get_user_channel_id(ptr);
+                       org.ldk.util.UInt128 user_channel_id_conv = new org.ldk.util.UInt128(user_channel_id);
+                       this.user_channel_id = user_channel_id_conv;
+                       long funding_txo = bindings.LDKEvent_FundingTxBroadcastSafe_get_funding_txo(ptr);
+                       org.ldk.structs.OutPoint funding_txo_hu_conv = null; if (funding_txo < 0 || funding_txo > 4096) { funding_txo_hu_conv = new org.ldk.structs.OutPoint(null, funding_txo); }
+                       if (funding_txo_hu_conv != null) { funding_txo_hu_conv.ptrs_to.AddLast(this); };
+                       this.funding_txo = funding_txo_hu_conv;
+                       long counterparty_node_id = bindings.LDKEvent_FundingTxBroadcastSafe_get_counterparty_node_id(ptr);
+                       byte[] counterparty_node_id_conv = InternalUtils.decodeUint8Array(counterparty_node_id);
+                       this.counterparty_node_id = counterparty_node_id_conv;
+                       long former_temporary_channel_id = bindings.LDKEvent_FundingTxBroadcastSafe_get_former_temporary_channel_id(ptr);
+                       org.ldk.structs.ChannelId former_temporary_channel_id_hu_conv = null; if (former_temporary_channel_id < 0 || former_temporary_channel_id > 4096) { former_temporary_channel_id_hu_conv = new org.ldk.structs.ChannelId(null, former_temporary_channel_id); }
+                       if (former_temporary_channel_id_hu_conv != null) { former_temporary_channel_id_hu_conv.ptrs_to.AddLast(this); };
+                       this.former_temporary_channel_id = former_temporary_channel_id_hu_conv;
+               }
+       }
        /** A Event of type PaymentClaimable */
        public class Event_PaymentClaimable : Event {
                /**
@@ -245,6 +293,15 @@ public class Event : CommonBase {
                 * serialized prior to LDK version 0.0.117.
                 */
                public Option_u64Z sender_intended_total_msat;
+               /**
+                * The fields in the onion which were received with each HTLC. Only fields which were
+                * identical in each HTLC involved in the payment will be included here.
+                * 
+                * Payments received on LDK versions prior to 0.0.124 will have this field unset.
+                * 
+                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
+                */
+               public RecipientOnionFields onion_fields;
                internal Event_PaymentClaimed(long ptr) : base(null, ptr) {
                        long receiver_node_id = bindings.LDKEvent_PaymentClaimed_get_receiver_node_id(ptr);
                        byte[] receiver_node_id_conv = InternalUtils.decodeUint8Array(receiver_node_id);
@@ -272,6 +329,10 @@ public class Event : CommonBase {
                        org.ldk.structs.Option_u64Z sender_intended_total_msat_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(sender_intended_total_msat);
                        if (sender_intended_total_msat_hu_conv != null) { sender_intended_total_msat_hu_conv.ptrs_to.AddLast(this); };
                        this.sender_intended_total_msat = sender_intended_total_msat_hu_conv;
+                       long onion_fields = bindings.LDKEvent_PaymentClaimed_get_onion_fields(ptr);
+                       org.ldk.structs.RecipientOnionFields onion_fields_hu_conv = null; if (onion_fields < 0 || onion_fields > 4096) { onion_fields_hu_conv = new org.ldk.structs.RecipientOnionFields(null, onion_fields); }
+                       if (onion_fields_hu_conv != null) { onion_fields_hu_conv.ptrs_to.AddLast(this); };
+                       this.onion_fields = onion_fields_hu_conv;
                }
        }
        /** A Event of type ConnectionNeeded */
@@ -301,16 +362,48 @@ public class Event : CommonBase {
                        this.addresses = addresses_conv_15_arr;
                }
        }
-       /** A Event of type InvoiceRequestFailed */
-       public class Event_InvoiceRequestFailed : Event {
+       /** A Event of type InvoiceReceived */
+       public class Event_InvoiceReceived : Event {
                /**
-                * The `payment_id` to have been associated with payment for the requested invoice.
+                * The `payment_id` associated with payment for the invoice.
                 */
                public byte[] payment_id;
-               internal Event_InvoiceRequestFailed(long ptr) : base(null, ptr) {
-                       long payment_id = bindings.LDKEvent_InvoiceRequestFailed_get_payment_id(ptr);
+               /**
+                * The invoice to pay.
+                */
+               public Bolt12Invoice invoice;
+               /**
+                * The context of the [`BlindedMessagePath`] used to send the invoice.
+                * 
+                * [`BlindedMessagePath`]: crate::blinded_path::message::BlindedMessagePath
+                */
+               public Option_OffersContextZ context;
+               /**
+                * A responder for replying with an [`InvoiceError`] if needed.
+                * 
+                * `None` if the invoice wasn't sent with a reply path.
+                * 
+                * [`InvoiceError`]: crate::offers::invoice_error::InvoiceError
+                * 
+                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
+                */
+               public Responder responder;
+               internal Event_InvoiceReceived(long ptr) : base(null, ptr) {
+                       long payment_id = bindings.LDKEvent_InvoiceReceived_get_payment_id(ptr);
                        byte[] payment_id_conv = InternalUtils.decodeUint8Array(payment_id);
                        this.payment_id = payment_id_conv;
+                       long invoice = bindings.LDKEvent_InvoiceReceived_get_invoice(ptr);
+                       org.ldk.structs.Bolt12Invoice invoice_hu_conv = null; if (invoice < 0 || invoice > 4096) { invoice_hu_conv = new org.ldk.structs.Bolt12Invoice(null, invoice); }
+                       if (invoice_hu_conv != null) { invoice_hu_conv.ptrs_to.AddLast(this); };
+                       this.invoice = invoice_hu_conv;
+                       long context = bindings.LDKEvent_InvoiceReceived_get_context(ptr);
+                       org.ldk.structs.Option_OffersContextZ context_hu_conv = org.ldk.structs.Option_OffersContextZ.constr_from_ptr(context);
+                       if (context_hu_conv != null) { context_hu_conv.ptrs_to.AddLast(this); };
+                       this.context = context_hu_conv;
+                       long responder = bindings.LDKEvent_InvoiceReceived_get_responder(ptr);
+                       org.ldk.structs.Responder responder_hu_conv = null; if (responder < 0 || responder > 4096) { responder_hu_conv = new org.ldk.structs.Responder(null, responder); }
+                       if (responder_hu_conv != null) { responder_hu_conv.ptrs_to.AddLast(this); };
+                       this.responder = responder_hu_conv;
                }
        }
        /** A Event of type PaymentSent */
@@ -342,6 +435,8 @@ public class Event : CommonBase {
                 * If the recipient or an intermediate node misbehaves and gives us free money, this may
                 * overstate the amount paid, though this is unlikely.
                 * 
+                * This is only `None` for payments initiated on LDK versions prior to 0.0.103.
+                * 
                 * [`Route::get_total_fees`]: crate::routing::router::Route::get_total_fees
                 */
                public Option_u64Z fee_paid_msat;
@@ -371,14 +466,17 @@ public class Event : CommonBase {
                 */
                public byte[] payment_id;
                /**
-                * The hash that was given to [`ChannelManager::send_payment`].
+                * The hash that was given to [`ChannelManager::send_payment`]. `None` if the payment failed
+                * before receiving an invoice when paying a BOLT12 [`Offer`].
                 * 
                 * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
+                * [`Offer`]: crate::offers::offer::Offer
                 */
-               public byte[] payment_hash;
+               public Option_ThirtyTwoBytesZ payment_hash;
                /**
                 * The reason the payment failed. This is only `None` for events generated or serialized
-                * by versions prior to 0.0.115.
+                * by versions prior to 0.0.115, or when downgrading to a version with a reason that was
+                * added after.
                 */
                public Option_PaymentFailureReasonZ reason;
                internal Event_PaymentFailed(long ptr) : base(null, ptr) {
@@ -386,8 +484,9 @@ public class Event : CommonBase {
                        byte[] payment_id_conv = InternalUtils.decodeUint8Array(payment_id);
                        this.payment_id = payment_id_conv;
                        long payment_hash = bindings.LDKEvent_PaymentFailed_get_payment_hash(ptr);
-                       byte[] payment_hash_conv = InternalUtils.decodeUint8Array(payment_hash);
-                       this.payment_hash = payment_hash_conv;
+                       org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(payment_hash);
+                       if (payment_hash_hu_conv != null) { payment_hash_hu_conv.ptrs_to.AddLast(this); };
+                       this.payment_hash = payment_hash_hu_conv;
                        long reason = bindings.LDKEvent_PaymentFailed_get_reason(ptr);
                        org.ldk.structs.Option_PaymentFailureReasonZ reason_hu_conv = org.ldk.structs.Option_PaymentFailureReasonZ.constr_from_ptr(reason);
                        if (reason_hu_conv != null) { reason_hu_conv.ptrs_to.AddLast(this); };
@@ -955,15 +1054,16 @@ public class Event : CommonBase {
                /**
                 * The full transaction received from the user
                 */
-               public byte[] transaction;
+               public FundingInfo funding_info;
                internal Event_DiscardFunding(long ptr) : base(null, ptr) {
                        long channel_id = bindings.LDKEvent_DiscardFunding_get_channel_id(ptr);
                        org.ldk.structs.ChannelId channel_id_hu_conv = null; if (channel_id < 0 || channel_id > 4096) { channel_id_hu_conv = new org.ldk.structs.ChannelId(null, channel_id); }
                        if (channel_id_hu_conv != null) { channel_id_hu_conv.ptrs_to.AddLast(this); };
                        this.channel_id = channel_id_hu_conv;
-                       long transaction = bindings.LDKEvent_DiscardFunding_get_transaction(ptr);
-                       byte[] transaction_conv = InternalUtils.decodeUint8Array(transaction);
-                       this.transaction = transaction_conv;
+                       long funding_info = bindings.LDKEvent_DiscardFunding_get_funding_info(ptr);
+                       org.ldk.structs.FundingInfo funding_info_hu_conv = org.ldk.structs.FundingInfo.constr_from_ptr(funding_info);
+                       if (funding_info_hu_conv != null) { funding_info_hu_conv.ptrs_to.AddLast(this); };
+                       this.funding_info = funding_info_hu_conv;
                }
        }
        /** A Event of type OpenChannelRequest */
@@ -1017,6 +1117,14 @@ public class Event : CommonBase {
                 * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
                 */
                public ChannelTypeFeatures channel_type;
+               /**
+                * True if this channel is (or will be) publicly-announced.
+                */
+               public bool is_announced;
+               /**
+                * Channel parameters given by the counterparty.
+                */
+               public ChannelParameters _params;
                internal Event_OpenChannelRequest(long ptr) : base(null, ptr) {
                        long temporary_channel_id = bindings.LDKEvent_OpenChannelRequest_get_temporary_channel_id(ptr);
                        org.ldk.structs.ChannelId temporary_channel_id_hu_conv = null; if (temporary_channel_id < 0 || temporary_channel_id > 4096) { temporary_channel_id_hu_conv = new org.ldk.structs.ChannelId(null, temporary_channel_id); }
@@ -1031,6 +1139,11 @@ public class Event : CommonBase {
                        org.ldk.structs.ChannelTypeFeatures channel_type_hu_conv = null; if (channel_type < 0 || channel_type > 4096) { channel_type_hu_conv = new org.ldk.structs.ChannelTypeFeatures(null, channel_type); }
                        if (channel_type_hu_conv != null) { channel_type_hu_conv.ptrs_to.AddLast(this); };
                        this.channel_type = channel_type_hu_conv;
+                       this.is_announced = bindings.LDKEvent_OpenChannelRequest_get_is_announced(ptr);
+                       long _params = bindings.LDKEvent_OpenChannelRequest_get_params(ptr);
+                       org.ldk.structs.ChannelParameters params_hu_conv = null; if (_params < 0 || _params > 4096) { params_hu_conv = new org.ldk.structs.ChannelParameters(null, _params); }
+                       if (params_hu_conv != null) { params_hu_conv.ptrs_to.AddLast(this); };
+                       this._params = params_hu_conv;
                }
        }
        /** A Event of type HTLCHandlingFailed */
@@ -1064,6 +1177,39 @@ public class Event : CommonBase {
                        this.bump_transaction = bump_transaction_hu_conv;
                }
        }
+       /** A Event of type OnionMessageIntercepted */
+       public class Event_OnionMessageIntercepted : Event {
+               /**
+                * The node id of the offline peer.
+                */
+               public byte[] peer_node_id;
+               /**
+                * The onion message intended to be forwarded to `peer_node_id`.
+                */
+               public OnionMessage message;
+               internal Event_OnionMessageIntercepted(long ptr) : base(null, ptr) {
+                       long peer_node_id = bindings.LDKEvent_OnionMessageIntercepted_get_peer_node_id(ptr);
+                       byte[] peer_node_id_conv = InternalUtils.decodeUint8Array(peer_node_id);
+                       this.peer_node_id = peer_node_id_conv;
+                       long message = bindings.LDKEvent_OnionMessageIntercepted_get_message(ptr);
+                       org.ldk.structs.OnionMessage message_hu_conv = null; if (message < 0 || message > 4096) { message_hu_conv = new org.ldk.structs.OnionMessage(null, message); }
+                       if (message_hu_conv != null) { message_hu_conv.ptrs_to.AddLast(this); };
+                       this.message = message_hu_conv;
+               }
+       }
+       /** A Event of type OnionMessagePeerConnected */
+       public class Event_OnionMessagePeerConnected : Event {
+               /**
+                * The node id of the peer we just connected to, who advertises support for
+                * onion messages.
+                */
+               public byte[] peer_node_id;
+               internal Event_OnionMessagePeerConnected(long ptr) : base(null, ptr) {
+                       long peer_node_id = bindings.LDKEvent_OnionMessagePeerConnected_get_peer_node_id(ptr);
+                       byte[] peer_node_id_conv = InternalUtils.decodeUint8Array(peer_node_id);
+                       this.peer_node_id = peer_node_id_conv;
+               }
+       }
        internal long clone_ptr() {
                long ret = bindings.Event_clone_ptr(this.ptr);
                GC.KeepAlive(this);
@@ -1095,7 +1241,22 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(temporary_channel_id); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new FundingTxBroadcastSafe-variant Event
+        */
+       public static Event funding_tx_broadcast_safe(org.ldk.structs.ChannelId channel_id, org.ldk.util.UInt128 user_channel_id, org.ldk.structs.OutPoint funding_txo, byte[] counterparty_node_id, org.ldk.structs.ChannelId former_temporary_channel_id) {
+               long ret = bindings.Event_funding_tx_broadcast_safe(channel_id.ptr, InternalUtils.encodeUint8Array(user_channel_id.getLEBytes()), funding_txo.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)), former_temporary_channel_id.ptr);
+               GC.KeepAlive(channel_id);
+               GC.KeepAlive(user_channel_id);
+               GC.KeepAlive(funding_txo);
+               GC.KeepAlive(counterparty_node_id);
+               GC.KeepAlive(former_temporary_channel_id);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
                return ret_hu_conv;
        }
 
@@ -1116,31 +1277,24 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(onion_fields); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(purpose); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(via_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(via_user_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(claim_deadline); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new PaymentClaimed-variant Event
         */
-       public static Event payment_claimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, org.ldk.structs.PaymentPurpose purpose, ClaimedHTLC[] htlcs, org.ldk.structs.Option_u64Z sender_intended_total_msat) {
-               long ret = bindings.Event_payment_claimed(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(receiver_node_id, 33)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), amount_msat, purpose.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(htlcs, htlcs_conv_13 => htlcs_conv_13.ptr)), sender_intended_total_msat.ptr);
+       public static Event payment_claimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, org.ldk.structs.PaymentPurpose purpose, ClaimedHTLC[] htlcs, org.ldk.structs.Option_u64Z sender_intended_total_msat, org.ldk.structs.RecipientOnionFields onion_fields) {
+               long ret = bindings.Event_payment_claimed(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(receiver_node_id, 33)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), amount_msat, purpose.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(htlcs, htlcs_conv_13 => htlcs_conv_13.ptr)), sender_intended_total_msat.ptr, onion_fields.ptr);
                GC.KeepAlive(receiver_node_id);
                GC.KeepAlive(payment_hash);
                GC.KeepAlive(amount_msat);
                GC.KeepAlive(purpose);
                GC.KeepAlive(htlcs);
                GC.KeepAlive(sender_intended_total_msat);
+               GC.KeepAlive(onion_fields);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(purpose); };
-               foreach (ClaimedHTLC htlcs_conv_13 in htlcs) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlcs_conv_13); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(sender_intended_total_msat); };
                return ret_hu_conv;
        }
 
@@ -1154,16 +1308,18 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (SocketAddress addresses_conv_15 in addresses) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(addresses_conv_15); }; };
                return ret_hu_conv;
        }
 
        /**
-        * Utility method to constructs a new InvoiceRequestFailed-variant Event
+        * Utility method to constructs a new InvoiceReceived-variant Event
         */
-       public static Event invoice_request_failed(byte[] payment_id) {
-               long ret = bindings.Event_invoice_request_failed(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
+       public static Event invoice_received(byte[] payment_id, org.ldk.structs.Bolt12Invoice invoice, org.ldk.structs.Option_OffersContextZ context, org.ldk.structs.Responder responder) {
+               long ret = bindings.Event_invoice_received(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)), invoice.ptr, context.ptr, responder.ptr);
                GC.KeepAlive(payment_id);
+               GC.KeepAlive(invoice);
+               GC.KeepAlive(context);
+               GC.KeepAlive(responder);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
@@ -1182,23 +1338,20 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fee_paid_msat); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new PaymentFailed-variant Event
         */
-       public static Event payment_failed(byte[] payment_id, byte[] payment_hash, org.ldk.structs.Option_PaymentFailureReasonZ reason) {
-               long ret = bindings.Event_payment_failed(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), reason.ptr);
+       public static Event payment_failed(byte[] payment_id, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, org.ldk.structs.Option_PaymentFailureReasonZ reason) {
+               long ret = bindings.Event_payment_failed(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)), payment_hash.ptr, reason.ptr);
                GC.KeepAlive(payment_id);
                GC.KeepAlive(payment_hash);
                GC.KeepAlive(reason);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(reason); };
                return ret_hu_conv;
        }
 
@@ -1213,8 +1366,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_hash); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(path); };
                return ret_hu_conv;
        }
 
@@ -1232,10 +1383,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(failure); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(path); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(short_channel_id); };
                return ret_hu_conv;
        }
 
@@ -1250,7 +1397,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(path); };
                return ret_hu_conv;
        }
 
@@ -1266,8 +1412,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(path); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(short_channel_id); };
                return ret_hu_conv;
        }
 
@@ -1309,8 +1453,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (SpendableOutputDescriptor outputs_conv_27 in outputs) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outputs_conv_27); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
                return ret_hu_conv;
        }
 
@@ -1330,13 +1472,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(prev_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(next_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(prev_user_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(next_user_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(total_fee_earned_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(skimmed_fee_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outbound_amount_forwarded_msat); };
                return ret_hu_conv;
        }
 
@@ -1354,10 +1489,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(former_temporary_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_txo); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type); };
                return ret_hu_conv;
        }
 
@@ -1373,8 +1504,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type); };
                return ret_hu_conv;
        }
 
@@ -1392,42 +1521,37 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(reason); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_capacity_sats); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_funding_txo); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new DiscardFunding-variant Event
         */
-       public static Event discard_funding(org.ldk.structs.ChannelId channel_id, byte[] transaction) {
-               long ret = bindings.Event_discard_funding(channel_id.ptr, InternalUtils.encodeUint8Array(transaction));
+       public static Event discard_funding(org.ldk.structs.ChannelId channel_id, org.ldk.structs.FundingInfo funding_info) {
+               long ret = bindings.Event_discard_funding(channel_id.ptr, funding_info.ptr);
                GC.KeepAlive(channel_id);
-               GC.KeepAlive(transaction);
+               GC.KeepAlive(funding_info);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new OpenChannelRequest-variant Event
         */
-       public static Event open_channel_request(org.ldk.structs.ChannelId temporary_channel_id, byte[] counterparty_node_id, long funding_satoshis, long push_msat, org.ldk.structs.ChannelTypeFeatures channel_type) {
-               long ret = bindings.Event_open_channel_request(temporary_channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)), funding_satoshis, push_msat, channel_type.ptr);
+       public static Event open_channel_request(org.ldk.structs.ChannelId temporary_channel_id, byte[] counterparty_node_id, long funding_satoshis, long push_msat, org.ldk.structs.ChannelTypeFeatures channel_type, bool is_announced, org.ldk.structs.ChannelParameters _params) {
+               long ret = bindings.Event_open_channel_request(temporary_channel_id.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(counterparty_node_id, 33)), funding_satoshis, push_msat, channel_type.ptr, is_announced, _params.ptr);
                GC.KeepAlive(temporary_channel_id);
                GC.KeepAlive(counterparty_node_id);
                GC.KeepAlive(funding_satoshis);
                GC.KeepAlive(push_msat);
                GC.KeepAlive(channel_type);
+               GC.KeepAlive(is_announced);
+               GC.KeepAlive(_params);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(temporary_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_type); };
                return ret_hu_conv;
        }
 
@@ -1441,8 +1565,6 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(prev_channel_id); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(failed_next_destination); };
                return ret_hu_conv;
        }
 
@@ -1455,7 +1577,31 @@ public class Event : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new OnionMessageIntercepted-variant Event
+        */
+       public static Event onion_message_intercepted(byte[] peer_node_id, org.ldk.structs.OnionMessage message) {
+               long ret = bindings.Event_onion_message_intercepted(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peer_node_id, 33)), message.ptr);
+               GC.KeepAlive(peer_node_id);
+               GC.KeepAlive(message);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new OnionMessagePeerConnected-variant Event
+        */
+       public static Event onion_message_peer_connected(byte[] peer_node_id) {
+               long ret = bindings.Event_onion_message_peer_connected(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peer_node_id, 33)));
+               GC.KeepAlive(peer_node_id);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
                return ret_hu_conv;
        }
 
index 718935df0f86e6ec49bf9a0c00fbe1baa5322333..569de2b4bc2b06e4db103fc75ab0a91e993aa153 100644 (file)
@@ -14,7 +14,7 @@ public interface EventHandlerInterface {
         * 
         * See [`EventsProvider`] for details that must be considered when implementing this method.
         */
-       void handle_event(Event _event);
+       Result_NoneReplayEventZ handle_event(Event _event);
 }
 
 /**
@@ -22,7 +22,7 @@ public interface EventHandlerInterface {
  * 
  * An async variation also exists for implementations of [`EventsProvider`] that support async
  * event handling. The async event handler should satisfy the generic bounds: `F:
- * core::future::Future, H: Fn(Event) -> F`.
+ * core::future::Future<Output = Result<(), ReplayEvent>>, H: Fn(Event) -> F`.
  */
 public class EventHandler : CommonBase {
        internal bindings.LDKEventHandler bindings_instance;
@@ -38,11 +38,13 @@ public class EventHandler : CommonBase {
                internal LDKEventHandlerImpl(EventHandlerInterface arg, LDKEventHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
                private EventHandlerInterface arg;
                private LDKEventHandlerHolder impl_holder;
-               public void handle_event(long _event) {
+               public long handle_event(long _event) {
                        org.ldk.structs.Event _event_hu_conv = org.ldk.structs.Event.constr_from_ptr(_event);
                        if (_event_hu_conv != null) { _event_hu_conv.ptrs_to.AddLast(this); };
-                       arg.handle_event(_event_hu_conv);
+                       Result_NoneReplayEventZ ret = arg.handle_event(_event_hu_conv);
                                GC.KeepAlive(arg);
+                       long result = ret.clone_ptr();
+                       return result;
                }
        }
 
@@ -63,11 +65,13 @@ public class EventHandler : CommonBase {
         * 
         * See [`EventsProvider`] for details that must be considered when implementing this method.
         */
-       public void handle_event(org.ldk.structs.Event _event) {
-               bindings.EventHandler_handle_event(this.ptr, _event.ptr);
+       public Result_NoneReplayEventZ handle_event(org.ldk.structs.Event _event) {
+               long ret = bindings.EventHandler_handle_event(this.ptr, _event.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(_event);
-               if (this != null) { this.ptrs_to.AddLast(_event); };
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneReplayEventZ ret_hu_conv = Result_NoneReplayEventZ.constr_from_ptr(ret);
+               return ret_hu_conv;
        }
 
 }
index cc42c27d4d399752ce5785b738e476de056c001f..42a2c0b1eecbf2f1b4c9fe1e10e910672f8c8b62 100644 (file)
@@ -33,8 +33,12 @@ public interface EventsProviderInterface {
  * 
  * In order to ensure no [`Event`]s are lost, implementors of this trait will persist [`Event`]s
  * and replay any unhandled events on startup. An [`Event`] is considered handled when
- * [`process_pending_events`] returns, thus handlers MUST fully handle [`Event`]s and persist any
- * relevant changes to disk *before* returning.
+ * [`process_pending_events`] returns `Ok(())`, thus handlers MUST fully handle [`Event`]s and
+ * persist any relevant changes to disk *before* returning `Ok(())`. In case of an error (e.g.,
+ * persistence failure) implementors should return `Err(ReplayEvent())`, signalling to the
+ * [`EventsProvider`] to replay unhandled events on the next invocation (generally immediately).
+ * Note that some events might not be replayed, please refer to the documentation for
+ * the individual [`Event`] variants for more detail.
  * 
  * Further, because an application may crash between an [`Event`] being handled and the
  * implementor of this trait being re-serialized, [`Event`] handling must be idempotent - in
index 9b5d88bb7cd1098e722d1664fd758958255fd8c4..dc168b73b0af85a57be7704511405d1e89b3c188 100644 (file)
@@ -114,7 +114,6 @@ public class FailureCode : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.FailureCode ret_hu_conv = org.ldk.structs.FailureCode.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index f27d0a52b89562f31e5e738a8fcb8d6889604bc6..066fd3312c6fc97bd7cb6c5352f280a139122914 100644 (file)
@@ -12,6 +12,11 @@ namespace org { namespace ldk { namespace structs {
 public interface FilterInterface {
        /**Registers interest in a transaction with `txid` and having an output with `script_pubkey` as
         * a spending condition.
+        * 
+        * This may be used, for example, to monitor for when a funding transaction confirms.
+        * 
+        * The `script_pubkey` is provided for informational purposes and may be useful for block
+        * sources which only support filtering on scripts.
         */
        void register_tx(byte[] txid, byte[] script_pubkey);
        /**Registers interest in spends of a transaction output.
@@ -20,6 +25,9 @@ public interface FilterInterface {
         * to ensure that also dependent output spents within an already connected block are correctly
         * handled, e.g., by re-scanning the block in question whenever new outputs have been
         * registered mid-processing.
+        * 
+        * This may be used, for example, to monitor for when a funding output is spent (by any
+        * transaction).
         */
        void register_output(WatchedOutput output);
 }
@@ -89,6 +97,11 @@ public class Filter : CommonBase {
        /**
         * Registers interest in a transaction with `txid` and having an output with `script_pubkey` as
         * a spending condition.
+        * 
+        * This may be used, for example, to monitor for when a funding transaction confirms.
+        * 
+        * The `script_pubkey` is provided for informational purposes and may be useful for block
+        * sources which only support filtering on scripts.
         */
        public void register_tx(byte[] txid, byte[] script_pubkey) {
                bindings.Filter_register_tx(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(txid, 32)), InternalUtils.encodeUint8Array(script_pubkey));
@@ -104,12 +117,14 @@ public class Filter : CommonBase {
         * to ensure that also dependent output spents within an already connected block are correctly
         * handled, e.g., by re-scanning the block in question whenever new outputs have been
         * registered mid-processing.
+        * 
+        * This may be used, for example, to monitor for when a funding output is spent (by any
+        * transaction).
         */
        public void register_output(org.ldk.structs.WatchedOutput output) {
                bindings.Filter_register_output(this.ptr, output.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(output);
-               if (this != null) { this.ptrs_to.AddLast(output); };
        }
 
 }
diff --git a/c_sharp/src/org/ldk/structs/ForwardNode.cs b/c_sharp/src/org/ldk/structs/ForwardNode.cs
deleted file mode 100644 (file)
index 82c4edb..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * An intermediate node, its outbound channel, and relay parameters.
- */
-public class ForwardNode : CommonBase {
-       internal ForwardNode(object _dummy, long ptr) : base(ptr) { }
-       ~ForwardNode() {
-               if (ptr != 0) { bindings.ForwardNode_free(ptr); }
-       }
-
-       /**
-        * The TLVs for this node's [`BlindedHop`], where the fee parameters contained within are also
-        * used for [`BlindedPayInfo`] construction.
-        */
-       public ForwardTlvs get_tlvs() {
-               long ret = bindings.ForwardNode_get_tlvs(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ForwardTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardTlvs(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * The TLVs for this node's [`BlindedHop`], where the fee parameters contained within are also
-        * used for [`BlindedPayInfo`] construction.
-        */
-       public void set_tlvs(org.ldk.structs.ForwardTlvs val) {
-               bindings.ForwardNode_set_tlvs(this.ptr, val.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
-       }
-
-       /**
-        * This node's pubkey.
-        */
-       public byte[] get_node_id() {
-               long ret = bindings.ForwardNode_get_node_id(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * This node's pubkey.
-        */
-       public void set_node_id(byte[] val) {
-               bindings.ForwardNode_set_node_id(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * The maximum value, in msat, that may be accepted by this node.
-        */
-       public long get_htlc_maximum_msat() {
-               long ret = bindings.ForwardNode_get_htlc_maximum_msat(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * The maximum value, in msat, that may be accepted by this node.
-        */
-       public void set_htlc_maximum_msat(long val) {
-               bindings.ForwardNode_set_htlc_maximum_msat(this.ptr, val);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * Constructs a new ForwardNode given each field
-        */
-       public static ForwardNode of(org.ldk.structs.ForwardTlvs tlvs_arg, byte[] node_id_arg, long htlc_maximum_msat_arg) {
-               long ret = bindings.ForwardNode_new(tlvs_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id_arg, 33)), htlc_maximum_msat_arg);
-               GC.KeepAlive(tlvs_arg);
-               GC.KeepAlive(node_id_arg);
-               GC.KeepAlive(htlc_maximum_msat_arg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardNode(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(tlvs_arg); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.ForwardNode_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a copy of the ForwardNode
-        */
-       public ForwardNode clone() {
-               long ret = bindings.ForwardNode_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardNode(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-}
-} } }
index d703878b905459f4d1574fc19ced35a75564523c..ee2be8e7cd7ca0329e7d2e7c40f33a8c614026ac 100644 (file)
@@ -52,7 +52,6 @@ public class ForwardTlvs : CommonBase {
                bindings.ForwardTlvs_set_payment_relay(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -74,7 +73,6 @@ public class ForwardTlvs : CommonBase {
                bindings.ForwardTlvs_set_payment_constraints(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -102,24 +100,49 @@ public class ForwardTlvs : CommonBase {
                bindings.ForwardTlvs_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
+       }
+
+       /**
+        * Set if this [`BlindedPaymentPath`] is concatenated to another, to indicate the
+        * [`BlindedPaymentPath::blinding_point`] of the appended blinded path.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public byte[] get_next_blinding_override() {
+               long ret = bindings.ForwardTlvs_get_next_blinding_override(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Set if this [`BlindedPaymentPath`] is concatenated to another, to indicate the
+        * [`BlindedPaymentPath::blinding_point`] of the appended blinded path.
+        * 
+        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public void set_next_blinding_override(byte[] val) {
+               bindings.ForwardTlvs_set_next_blinding_override(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
        }
 
        /**
         * Constructs a new ForwardTlvs given each field
+        * 
+        * Note that next_blinding_override_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ForwardTlvs of(long short_channel_id_arg, org.ldk.structs.PaymentRelay payment_relay_arg, org.ldk.structs.PaymentConstraints payment_constraints_arg, org.ldk.structs.BlindedHopFeatures features_arg) {
-               long ret = bindings.ForwardTlvs_new(short_channel_id_arg, payment_relay_arg.ptr, payment_constraints_arg.ptr, features_arg.ptr);
+       public static ForwardTlvs of(long short_channel_id_arg, org.ldk.structs.PaymentRelay payment_relay_arg, org.ldk.structs.PaymentConstraints payment_constraints_arg, org.ldk.structs.BlindedHopFeatures features_arg, byte[] next_blinding_override_arg) {
+               long ret = bindings.ForwardTlvs_new(short_channel_id_arg, payment_relay_arg.ptr, payment_constraints_arg.ptr, features_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(next_blinding_override_arg, 33)));
                GC.KeepAlive(short_channel_id_arg);
                GC.KeepAlive(payment_relay_arg);
                GC.KeepAlive(payment_constraints_arg);
                GC.KeepAlive(features_arg);
+               GC.KeepAlive(next_blinding_override_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ForwardTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardTlvs(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_relay_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_constraints_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
                return ret_hu_conv;
        }
 
index daeb4f10da44c00992e01e9a0216e6c4e35a2030..031ae6ad9db042394f4d4f9e28d20a8035d0ddcb 100644 (file)
@@ -100,9 +100,6 @@ public class FourTuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZ : CommonBas
                if (ret >= 0 && ret <= 4096) { return null; }
                FourTuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZ ret_hu_conv = new FourTuple_OutPointChannelIdCVec_MonitorEventZPublicKeyZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               foreach (MonitorEvent c_conv_14 in c) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c_conv_14); }; };
                return ret_hu_conv;
        }
 
index 0e15eaf89c10c5cac84353e6bc2a37d2fd94ff22..83b06b18291cc84a316b2cd1bb0ecf66ab2ff920 100644 (file)
@@ -38,7 +38,6 @@ public class FundingCreated : CommonBase {
                bindings.FundingCreated_set_temporary_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -111,7 +110,6 @@ public class FundingCreated : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.FundingCreated ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.FundingCreated(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(temporary_channel_id_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/FundingInfo.cs b/c_sharp/src/org/ldk/structs/FundingInfo.cs
new file mode 100644 (file)
index 0000000..1202040
--- /dev/null
@@ -0,0 +1,139 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * `FundingInfo` holds information about a channel's funding transaction.
+ * 
+ * When LDK is set to manual propagation of the funding transaction
+ * (via [`ChannelManager::unsafe_manual_funding_transaction_generated`),
+ * LDK does not have the full transaction data. Instead, the `OutPoint`
+ * for the funding is provided here.
+ * 
+ * [`ChannelManager::unsafe_manual_funding_transaction_generated`]: crate::ln::channelmanager::ChannelManager::unsafe_manual_funding_transaction_generated
+ */
+public class FundingInfo : CommonBase {
+       protected FundingInfo(object _dummy, long ptr) : base(ptr) { }
+       ~FundingInfo() {
+               if (ptr != 0) { bindings.FundingInfo_free(ptr); }
+       }
+
+       internal static FundingInfo constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKFundingInfo_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new FundingInfo_Tx(ptr);
+                       case 1: return new FundingInfo_OutPoint(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A FundingInfo of type Tx */
+       public class FundingInfo_Tx : FundingInfo {
+               /**
+                * The funding transaction
+                */
+               public byte[] transaction;
+               internal FundingInfo_Tx(long ptr) : base(null, ptr) {
+                       long transaction = bindings.LDKFundingInfo_Tx_get_transaction(ptr);
+                       byte[] transaction_conv = InternalUtils.decodeUint8Array(transaction);
+                       this.transaction = transaction_conv;
+               }
+       }
+       /** A FundingInfo of type OutPoint */
+       public class FundingInfo_OutPoint : FundingInfo {
+               /**
+                * The outpoint of the funding
+                */
+               public OutPoint outpoint;
+               internal FundingInfo_OutPoint(long ptr) : base(null, ptr) {
+                       long outpoint = bindings.LDKFundingInfo_OutPoint_get_outpoint(ptr);
+                       org.ldk.structs.OutPoint outpoint_hu_conv = null; if (outpoint < 0 || outpoint > 4096) { outpoint_hu_conv = new org.ldk.structs.OutPoint(null, outpoint); }
+                       if (outpoint_hu_conv != null) { outpoint_hu_conv.ptrs_to.AddLast(this); };
+                       this.outpoint = outpoint_hu_conv;
+               }
+       }
+       internal long clone_ptr() {
+               long ret = bindings.FundingInfo_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the FundingInfo
+        */
+       public FundingInfo clone() {
+               long ret = bindings.FundingInfo_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FundingInfo ret_hu_conv = org.ldk.structs.FundingInfo.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new Tx-variant FundingInfo
+        */
+       public static FundingInfo tx(byte[] transaction) {
+               long ret = bindings.FundingInfo_tx(InternalUtils.encodeUint8Array(transaction));
+               GC.KeepAlive(transaction);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FundingInfo ret_hu_conv = org.ldk.structs.FundingInfo.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new OutPoint-variant FundingInfo
+        */
+       public static FundingInfo out_point(org.ldk.structs.OutPoint outpoint) {
+               long ret = bindings.FundingInfo_out_point(outpoint.ptr);
+               GC.KeepAlive(outpoint);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FundingInfo ret_hu_conv = org.ldk.structs.FundingInfo.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two FundingInfos contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public bool eq(org.ldk.structs.FundingInfo b) {
+               bool ret = bindings.FundingInfo_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is FundingInfo)) return false;
+               return this.eq((FundingInfo)o);
+       }
+       /**
+        * Serialize the FundingInfo object into a byte array which can be read by FundingInfo_read
+        */
+       public byte[] write() {
+               long ret = bindings.FundingInfo_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a FundingInfo from a byte array, created by FundingInfo_write
+        */
+       public static Result_FundingInfoDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.FundingInfo_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_FundingInfoDecodeErrorZ ret_hu_conv = Result_FundingInfoDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 8ca3f344295a6a875948b83f289c2cdc5e81d72b..1e318e2ee8ed3632d04d285e39e51ebe58ec7f6d 100644 (file)
@@ -38,7 +38,6 @@ public class FundingSigned : CommonBase {
                bindings.FundingSigned_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -71,7 +70,6 @@ public class FundingSigned : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.FundingSigned ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.FundingSigned(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 2aadea96a8e7c192e26a6fbcc7ed6f10ed29caaa..7a5b7c0ef142fd3aeb24adfd2bc53b2c1f2a1344 100644 (file)
@@ -71,7 +71,6 @@ public class GraphSyncError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.GraphSyncError ret_hu_conv = org.ldk.structs.GraphSyncError.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -84,7 +83,6 @@ public class GraphSyncError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.GraphSyncError ret_hu_conv = org.ldk.structs.GraphSyncError.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 0197978ea848312a2037f9b7be8968fd65d584aa..629d11f0b0ced8289de7f7a5a8608e7e966c3968 100644 (file)
@@ -34,7 +34,6 @@ public class HTLCDescriptor : CommonBase {
                bindings.HTLCDescriptor_set_channel_derivation_parameters(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -144,7 +143,6 @@ public class HTLCDescriptor : CommonBase {
                bindings.HTLCDescriptor_set_htlc(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -168,7 +166,6 @@ public class HTLCDescriptor : CommonBase {
                bindings.HTLCDescriptor_set_preimage(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -207,9 +204,6 @@ public class HTLCDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.HTLCDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.HTLCDescriptor(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_derivation_parameters_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlc_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(preimage_arg); };
                return ret_hu_conv;
        }
 
@@ -347,12 +341,12 @@ public class HTLCDescriptor : CommonBase {
        /**
         * Derives the channel signer required to sign the HTLC input.
         */
-       public WriteableEcdsaChannelSigner derive_channel_signer(org.ldk.structs.SignerProvider signer_provider) {
+       public EcdsaChannelSigner derive_channel_signer(org.ldk.structs.SignerProvider signer_provider) {
                long ret = bindings.HTLCDescriptor_derive_channel_signer(this.ptr, signer_provider.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(signer_provider);
                if (ret >= 0 && ret <= 4096) { return null; }
-               WriteableEcdsaChannelSigner ret_hu_conv = new WriteableEcdsaChannelSigner(null, ret);
+               EcdsaChannelSigner ret_hu_conv = new EcdsaChannelSigner(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                if (this != null) { this.ptrs_to.AddLast(signer_provider); };
                return ret_hu_conv;
index 256ad5c38bed8fa13dfd60ad9057c747542e9418..ffa3d95c6d13f7c2c40da6d74b4a2740d350ee03 100644 (file)
@@ -116,7 +116,6 @@ public class HTLCDestination : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.HTLCDestination ret_hu_conv = org.ldk.structs.HTLCDestination.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
                return ret_hu_conv;
        }
 
index e2866c4e764d2807df30c33a27a3aaf1257bec18..2cade7de9ad1f1bfd2f871fc3ea924930da5d82a 100644 (file)
@@ -120,7 +120,6 @@ public class HTLCOutputInCommitment : CommonBase {
                bindings.HTLCOutputInCommitment_set_transaction_output_index(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -136,7 +135,6 @@ public class HTLCOutputInCommitment : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.HTLCOutputInCommitment ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.HTLCOutputInCommitment(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(transaction_output_index_arg); };
                return ret_hu_conv;
        }
 
@@ -175,6 +173,17 @@ public class HTLCOutputInCommitment : CommonBase {
                if (!(o is HTLCOutputInCommitment)) return false;
                return this.eq((HTLCOutputInCommitment)o);
        }
+       /**
+        * Converts HTLC's value with millisatoshi precision into [bitcoin::Amount] with satoshi precision.
+        * Typically this conversion is needed when transitioning from LN into base-layer Bitcoin,
+        * e. g. in commitment transactions.
+        */
+       public long to_bitcoin_amount() {
+               long ret = bindings.HTLCOutputInCommitment_to_bitcoin_amount(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Serialize the HTLCOutputInCommitment object into a byte array which can be read by HTLCOutputInCommitment_read
         */
diff --git a/c_sharp/src/org/ldk/structs/HeldHtlcAvailable.cs b/c_sharp/src/org/ldk/structs/HeldHtlcAvailable.cs
new file mode 100644 (file)
index 0000000..7488b81
--- /dev/null
@@ -0,0 +1,93 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * An HTLC destined for the recipient of this message is being held upstream. The reply path
+ * accompanying this onion message should be used to send a [`ReleaseHeldHtlc`] response, which
+ * will cause the upstream HTLC to be released.
+ */
+public class HeldHtlcAvailable : CommonBase {
+       internal HeldHtlcAvailable(object _dummy, long ptr) : base(ptr) { }
+       ~HeldHtlcAvailable() {
+               if (ptr != 0) { bindings.HeldHtlcAvailable_free(ptr); }
+       }
+
+       /**
+        * The secret that will be used by the recipient of this message to release the held HTLC.
+        */
+       public byte[] get_payment_release_secret() {
+               long ret = bindings.HeldHtlcAvailable_get_payment_release_secret(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The secret that will be used by the recipient of this message to release the held HTLC.
+        */
+       public void set_payment_release_secret(byte[] val) {
+               bindings.HeldHtlcAvailable_set_payment_release_secret(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 32)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new HeldHtlcAvailable given each field
+        */
+       public static HeldHtlcAvailable of(byte[] payment_release_secret_arg) {
+               long ret = bindings.HeldHtlcAvailable_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_release_secret_arg, 32)));
+               GC.KeepAlive(payment_release_secret_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.HeldHtlcAvailable ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.HeldHtlcAvailable(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.HeldHtlcAvailable_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the HeldHtlcAvailable
+        */
+       public HeldHtlcAvailable clone() {
+               long ret = bindings.HeldHtlcAvailable_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.HeldHtlcAvailable ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.HeldHtlcAvailable(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the HeldHtlcAvailable object into a byte array which can be read by HeldHtlcAvailable_read
+        */
+       public byte[] write() {
+               long ret = bindings.HeldHtlcAvailable_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a HeldHtlcAvailable from a byte array, created by HeldHtlcAvailable_write
+        */
+       public static Result_HeldHtlcAvailableDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.HeldHtlcAvailable_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HeldHtlcAvailableDecodeErrorZ ret_hu_conv = Result_HeldHtlcAvailableDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index d7fdec8fd9088f52b8b329c2b31ebde277ca4457..1a3f1ef42dc9054885e7e2dfe0d6f7cf11eb0a7e 100644 (file)
@@ -120,7 +120,6 @@ public class HolderCommitmentTransaction : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.HolderCommitmentTransaction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.HolderCommitmentTransaction(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(commitment_tx); };
                return ret_hu_conv;
        }
 
index 5e1d45457da7f681e99c09d2560e9994696792c6..6ed4de1696c316dcf81749f9976009a3e52efda6 100644 (file)
@@ -14,7 +14,7 @@ namespace org { namespace ldk { namespace structs {
  * Thus, both channel counterparties' HTLC keys will appears in each HTLC output's script.
  * 
  * [See the BOLT specs]
- * (https://github.com/lightning/bolts/blob/master/03-transactions.md#localpubkey-local_htlcpubkey-remote_htlcpubkey-local_delayedpubkey-and-remote_delayedpubkey-derivation)
+ * <https://github.com/lightning/bolts/blob/master/03-transactions.md#localpubkey-local_htlcpubkey-remote_htlcpubkey-local_delayedpubkey-and-remote_delayedpubkey-derivation>
  * for more information on key derivation details.
  */
 public class HtlcKey : CommonBase {
index 4b9d0662c6000ca5f73c3c0bf0b883f33d408e3c..99bde4a38fe016b5a37be7bc8e5d369559b0184b 100644 (file)
@@ -27,19 +27,6 @@ public class IgnoringMessageHandler : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Constructs a new EventsProvider which calls the relevant methods on this_arg.
-        * This copies the `inner` pointer in this_arg and thus the returned EventsProvider must be freed before this_arg is
-        */
-       public EventsProvider as_EventsProvider() {
-               long ret = bindings.IgnoringMessageHandler_as_EventsProvider(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               EventsProvider ret_hu_conv = new EventsProvider(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
        /**
         * Constructs a new MessageSendEventsProvider which calls the relevant methods on this_arg.
         * This copies the `inner` pointer in this_arg and thus the returned MessageSendEventsProvider must be freed before this_arg is
@@ -92,6 +79,19 @@ public class IgnoringMessageHandler : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Constructs a new AsyncPaymentsMessageHandler which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned AsyncPaymentsMessageHandler must be freed before this_arg is
+        */
+       public AsyncPaymentsMessageHandler as_AsyncPaymentsMessageHandler() {
+               long ret = bindings.IgnoringMessageHandler_as_AsyncPaymentsMessageHandler(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               AsyncPaymentsMessageHandler ret_hu_conv = new AsyncPaymentsMessageHandler(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
        /**
         * Constructs a new CustomOnionMessageHandler which calls the relevant methods on this_arg.
         * This copies the `inner` pointer in this_arg and thus the returned CustomOnionMessageHandler must be freed before this_arg is
index c6fdea4ae4c07acbb4bd8651d9309848fc9de23b..1e0f31a44b404d8a9ade7c0f1d59d51d526caf6c 100644 (file)
@@ -7,7 +7,7 @@ namespace org { namespace ldk { namespace structs {
 
 
 /**
- * A simple implementation of [`WriteableEcdsaChannelSigner`] that just keeps the private keys in memory.
+ * A simple implementation of [`EcdsaChannelSigner`] that just keeps the private keys in memory.
  * 
  * This implementation performs no policy checks and is insufficient by itself as
  * a secure external signer.
@@ -382,19 +382,6 @@ public class InMemorySigner : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Constructs a new WriteableEcdsaChannelSigner which calls the relevant methods on this_arg.
-        * This copies the `inner` pointer in this_arg and thus the returned WriteableEcdsaChannelSigner must be freed before this_arg is
-        */
-       public WriteableEcdsaChannelSigner as_WriteableEcdsaChannelSigner() {
-               long ret = bindings.InMemorySigner_as_WriteableEcdsaChannelSigner(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               WriteableEcdsaChannelSigner ret_hu_conv = new WriteableEcdsaChannelSigner(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
        /**
         * Serialize the InMemorySigner object into a byte array which can be read by InMemorySigner_read
         */
index fd089bff26362d3d58f616312465e42e8c133947..371e438704067b87c88e059d65aab99994f171d7 100644 (file)
@@ -130,7 +130,6 @@ public class InboundHTLCDetails : CommonBase {
                bindings.InboundHTLCDetails_set_state(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -185,7 +184,6 @@ public class InboundHTLCDetails : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.InboundHTLCDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InboundHTLCDetails(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(state_arg); };
                return ret_hu_conv;
        }
 
index d65f1b0e629aebc960594734ed9c731389b5bf83..322829966879674e554418ec4e7675d81ddbd88b 100644 (file)
@@ -36,7 +36,6 @@ public class Init : CommonBase {
                bindings.Init_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -64,7 +63,6 @@ public class Init : CommonBase {
                bindings.Init_set_networks(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -96,7 +94,6 @@ public class Init : CommonBase {
                bindings.Init_set_remote_network_address(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -110,9 +107,6 @@ public class Init : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Init ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Init(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(networks_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(remote_network_address_arg); };
                return ret_hu_conv;
        }
 
index 2b5d514cc9b58c21c9a8290ac54901b435fb17f8..ea98e4ec74a0ccc4db6b22fea96681f6e5540d4e 100644 (file)
@@ -15,6 +15,28 @@ public class InitFeatures : CommonBase {
                if (ptr != 0) { bindings.InitFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the InitFeatures object into a byte array which can be read by InitFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.InitFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a InitFeatures from a byte array, created by InitFeatures_write
+        */
+       public static Result_InitFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.InitFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_InitFeaturesDecodeErrorZ ret_hu_conv = Result_InitFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two InitFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -73,6 +95,27 @@ public class InitFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.InitFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.InitFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +127,19 @@ public class InitFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.InitFeatures other) {
+               long ret = bindings.InitFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +150,15 @@ public class InitFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.InitFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -167,27 +232,68 @@ public class InitFeatures : CommonBase {
        }
 
        /**
-        * Serialize the InitFeatures object into a byte array which can be read by InitFeatures_read
+        * Unsets the `upfront_shutdown_script` feature
         */
-       public byte[] write() {
-               long ret = bindings.InitFeatures_write(this.ptr);
+       public InitFeatures clear_upfront_shutdown_script() {
+               long ret = bindings.InitFeatures_clear_upfront_shutdown_script(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               org.ldk.structs.InitFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InitFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
        }
 
        /**
-        * Read a InitFeatures from a byte array, created by InitFeatures_write
+        * Unsets the `shutdown_anysegwit` feature
         */
-       public static Result_InitFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.InitFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
+       public InitFeatures clear_shutdown_anysegwit() {
+               long ret = bindings.InitFeatures_clear_shutdown_anysegwit(this.ptr);
+               GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_InitFeaturesDecodeErrorZ ret_hu_conv = Result_InitFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               org.ldk.structs.InitFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InitFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
+       /**
+        * Unsets the `wumbo` feature
+        */
+       public InitFeatures clear_wumbo() {
+               long ret = bindings.InitFeatures_clear_wumbo(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.InitFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InitFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Unsets the `scid_privacy` feature
+        */
+       public void clear_scid_privacy() {
+               bindings.InitFeatures_clear_scid_privacy(this.ptr);
+               GC.KeepAlive(this);
+       }
+
+       /**
+        * Unsets the `anchors_zero_fee_htlc_tx` feature
+        */
+       public void clear_anchors_zero_fee_htlc_tx() {
+               bindings.InitFeatures_clear_anchors_zero_fee_htlc_tx(this.ptr);
+               GC.KeepAlive(this);
+       }
+
+       /**
+        * Unsets the `route_blinding` feature
+        */
+       public void clear_route_blinding() {
+               bindings.InitFeatures_clear_route_blinding(this.ptr);
+               GC.KeepAlive(this);
+       }
+
        /**
         * Set this feature as optional.
         */
index f3436002f3a6a0b2859ea72d1a34030d40949e2e..072075b19a3240f30cb3fb589309b16210dc6fc3 100644 (file)
@@ -36,7 +36,6 @@ public class Input : CommonBase {
                bindings.Input_set_outpoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -92,7 +91,6 @@ public class Input : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Input ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Input(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint_arg); };
                return ret_hu_conv;
        }
 
index 7e1dee9d28cfd6674f41e473c046670b432a6ea0..ddf28dda902b64200ba702c1fcd00f81a00235a1 100644 (file)
@@ -6,7 +6,7 @@ using System;
 namespace org { namespace ldk { namespace structs {
 
 /**
- * The unblinded node in a [`BlindedPath`].
+ * The unblinded node in a blinded path.
  */
 public class IntroductionNode : CommonBase {
        protected IntroductionNode(object _dummy, long ptr) : base(ptr) { }
index 78194b68ce35f16cb13aed75c4dd143e120dabbe..05340a248e48f6a05c82e56fb13bf107a65501f9 100644 (file)
@@ -47,7 +47,6 @@ public class InvoiceError : CommonBase {
                bindings.InvoiceError_set_erroneous_field(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -69,7 +68,6 @@ public class InvoiceError : CommonBase {
                bindings.InvoiceError_set_message(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -84,8 +82,6 @@ public class InvoiceError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.InvoiceError ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceError(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(erroneous_field_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(message_arg); };
                return ret_hu_conv;
        }
 
index f84df90374bd8ccbef69f11a5a6b8f2e4e2e5445..91e5b16c67fe355d24c66e626cfa8a913c7a0972 100644 (file)
@@ -144,20 +144,20 @@ public class InvoiceRequest : CommonBase {
         * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
         * recipient privacy by obfuscating its node id.
         */
-       public BlindedPath[] paths() {
+       public BlindedMessagePath[] paths() {
                long ret = bindings.InvoiceRequest_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
@@ -284,8 +284,8 @@ public class InvoiceRequest : CommonBase {
         * 
         * [`Duration`]: core::time::Duration
         */
-       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with(TwoTuple_BlindedPayInfoBlindedPathZ[] payment_paths, byte[] payment_hash) {
-               long ret = bindings.InvoiceRequest_respond_with(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_37 => payment_paths_conv_37.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
+       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with(BlindedPaymentPath[] payment_paths, byte[] payment_hash) {
+               long ret = bindings.InvoiceRequest_respond_with(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_20 => payment_paths_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
                GC.KeepAlive(this);
                GC.KeepAlive(payment_paths);
                GC.KeepAlive(payment_hash);
@@ -314,13 +314,15 @@ public class InvoiceRequest : CommonBase {
         * # Note
         * 
         * If the originating [`Offer`] was created using [`OfferBuilder::deriving_signing_pubkey`],
-        * then use [`InvoiceRequest::verify`] and [`VerifiedInvoiceRequest`] methods instead.
+        * then first use [`InvoiceRequest::verify_using_metadata`] or
+        * [`InvoiceRequest::verify_using_recipient_data`] and then [`VerifiedInvoiceRequest`] methods
+        * instead.
         * 
         * [`Bolt12Invoice::created_at`]: crate::offers::invoice::Bolt12Invoice::created_at
         * [`OfferBuilder::deriving_signing_pubkey`]: crate::offers::offer::OfferBuilder::deriving_signing_pubkey
         */
-       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with_no_std(TwoTuple_BlindedPayInfoBlindedPathZ[] payment_paths, byte[] payment_hash, long created_at) {
-               long ret = bindings.InvoiceRequest_respond_with_no_std(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_37 => payment_paths_conv_37.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), created_at);
+       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with_no_std(BlindedPaymentPath[] payment_paths, byte[] payment_hash, long created_at) {
+               long ret = bindings.InvoiceRequest_respond_with_no_std(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_20 => payment_paths_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), created_at);
                GC.KeepAlive(this);
                GC.KeepAlive(payment_paths);
                GC.KeepAlive(payment_hash);
@@ -331,20 +333,43 @@ public class InvoiceRequest : CommonBase {
        }
 
        /**
-        * Verifies that the request was for an offer created using the given key. Returns the verified
-        * request which contains the derived keys needed to sign a [`Bolt12Invoice`] for the request
-        * if they could be extracted from the metadata.
+        * Verifies that the request was for an offer created using the given key by checking the
+        * metadata from the offer.
+        * 
+        * Returns the verified request which contains the derived keys needed to sign a
+        * [`Bolt12Invoice`] for the request if they could be extracted from the metadata.
+        * 
+        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
+        */
+       public Result_VerifiedInvoiceRequestNoneZ verify_using_metadata(org.ldk.structs.ExpandedKey key) {
+               long ret = bindings.InvoiceRequest_verify_using_metadata(this.ptr, key.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(key);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(key); };
+               ;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Verifies that the request was for an offer created using the given key by checking a nonce
+        * included with the [`BlindedMessagePath`] for which the request was sent through.
+        * 
+        * Returns the verified request which contains the derived keys needed to sign a
+        * [`Bolt12Invoice`] for the request if they could be extracted from the metadata.
         * 
         * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
         */
-       public Result_VerifiedInvoiceRequestNoneZ verify(org.ldk.structs.ExpandedKey key) {
-               long ret = bindings.InvoiceRequest_verify(this.ptr, key.ptr);
+       public Result_VerifiedInvoiceRequestNoneZ verify_using_recipient_data(org.ldk.structs.Nonce nonce, org.ldk.structs.ExpandedKey key) {
+               long ret = bindings.InvoiceRequest_verify_using_recipient_data(this.ptr, nonce.ptr, key.ptr);
                GC.KeepAlive(this);
+               GC.KeepAlive(nonce);
                GC.KeepAlive(key);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(key); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
index 6a80ee02392a1f8bb13e43d83f29f1544dbef538..9a8eb2fbceeebe7863db5ac92d303d1874862f7e 100644 (file)
@@ -73,6 +73,27 @@ public class InvoiceRequestFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.InvoiceRequestFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.InvoiceRequestFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +105,19 @@ public class InvoiceRequestFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.InvoiceRequestFeatures other) {
+               long ret = bindings.InvoiceRequestFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +128,15 @@ public class InvoiceRequestFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.InvoiceRequestFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
index 15f21c1112263c024bb653b872a72b984e8b8954..16cd5dfed462e8875febe2b217e207a77fa69b9e 100644 (file)
@@ -56,7 +56,6 @@ public class InvoiceRequestFields : CommonBase {
                bindings.InvoiceRequestFields_set_quantity(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -84,7 +83,6 @@ public class InvoiceRequestFields : CommonBase {
                bindings.InvoiceRequestFields_set_payer_note_truncated(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -100,8 +98,6 @@ public class InvoiceRequestFields : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.InvoiceRequestFields ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceRequestFields(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(quantity_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payer_note_truncated_arg); };
                return ret_hu_conv;
        }
 
index a5c5da4c142f0300024594f83be5202e1ce0cc13..f114c567c1e22756071cb19a2ac84737e89c5bcd 100644 (file)
@@ -44,7 +44,8 @@ public class InvoiceWithDerivedSigningPubkeyBuilder : CommonBase {
        }
 
        /**
-        * Sets the [`Bolt12Invoice::relative_expiry`] as seconds since [`Bolt12Invoice::created_at`].
+        * Sets the [`Bolt12Invoice::relative_expiry`]
+        * as seconds since [`Bolt12Invoice::created_at`].
         * Any expiry that has already passed is valid and can be checked for using
         * [`Bolt12Invoice::is_expired`].
         * 
@@ -129,8 +130,8 @@ public class InvoiceWithDerivedSigningPubkeyBuilder : CommonBase {
        }
 
        /**
-        * Sets [`Bolt12Invoice::invoice_features`] to indicate MPP may be used. Otherwise, MPP is
-        * disallowed.
+        * Sets [`Bolt12Invoice::invoice_features`]
+        * to indicate MPP may be used. Otherwise, MPP is disallowed.
         */
        public void allow_mpp() {
                bindings.InvoiceWithDerivedSigningPubkeyBuilder_allow_mpp(this.ptr);
index 6bfb8c747ae4489aec9ef79ae32e1b680cdaef39..d00444533b8106f3e9aac3832495375b10cfba6c 100644 (file)
@@ -45,7 +45,8 @@ public class InvoiceWithExplicitSigningPubkeyBuilder : CommonBase {
        }
 
        /**
-        * Sets the [`Bolt12Invoice::relative_expiry`] as seconds since [`Bolt12Invoice::created_at`].
+        * Sets the [`Bolt12Invoice::relative_expiry`]
+        * as seconds since [`Bolt12Invoice::created_at`].
         * Any expiry that has already passed is valid and can be checked for using
         * [`Bolt12Invoice::is_expired`].
         * 
@@ -130,8 +131,8 @@ public class InvoiceWithExplicitSigningPubkeyBuilder : CommonBase {
        }
 
        /**
-        * Sets [`Bolt12Invoice::invoice_features`] to indicate MPP may be used. Otherwise, MPP is
-        * disallowed.
+        * Sets [`Bolt12Invoice::invoice_features`]
+        * to indicate MPP may be used. Otherwise, MPP is disallowed.
         */
        public void allow_mpp() {
                bindings.InvoiceWithExplicitSigningPubkeyBuilder_allow_mpp(this.ptr);
index 333c1de4c3935f6299b315be1cb323da96950cef..df1e2962bd7a7154355c3e7147a6bdf936e3e2c9 100644 (file)
@@ -69,7 +69,7 @@ public class KeysManager : CommonBase {
        }
 
        /**
-        * Derive an old [`WriteableEcdsaChannelSigner`] containing per-channel secrets based on a key derivation parameters.
+        * Derive an old [`EcdsaChannelSigner`] containing per-channel secrets based on a key derivation parameters.
         */
        public InMemorySigner derive_channel_keys(long channel_value_satoshis, byte[] _params) {
                long ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(_params, 32)));
@@ -83,7 +83,7 @@ public class KeysManager : CommonBase {
        }
 
        /**
-        * Signs the given [`PartiallySignedTransaction`] which spends the given [`SpendableOutputDescriptor`]s.
+        * Signs the given [`Psbt`] which spends the given [`SpendableOutputDescriptor`]s.
         * The resulting inputs will be finalized and the PSBT will be ready for broadcast if there
         * are no other inputs that need signing.
         * 
@@ -99,7 +99,6 @@ public class KeysManager : CommonBase {
                GC.KeepAlive(psbt);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
-               foreach (SpendableOutputDescriptor descriptors_conv_27 in descriptors) { if (this != null) { this.ptrs_to.AddLast(descriptors_conv_27); }; };
                return ret_hu_conv;
        }
 
index b06f312fb2f5f54df268f4f06f8fd431eb7f90ce..e64c1310ccfd2046f9c948744f9100ea4c8436ba 100644 (file)
@@ -54,7 +54,6 @@ public class LightningError : CommonBase {
                bindings.LightningError_set_action(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -67,7 +66,6 @@ public class LightningError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.LightningError ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.LightningError(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(action_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/MessageContext.cs b/c_sharp/src/org/ldk/structs/MessageContext.cs
new file mode 100644 (file)
index 0000000..0f12e15
--- /dev/null
@@ -0,0 +1,115 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * Additional data included by the recipient in a [`BlindedMessagePath`].
+ * 
+ * This data is encrypted by the recipient and will be given to the corresponding message handler
+ * when handling a message sent over the [`BlindedMessagePath`]. The recipient can use this data to
+ * authenticate the message or for further processing if needed.
+ */
+public class MessageContext : CommonBase {
+       protected MessageContext(object _dummy, long ptr) : base(ptr) { }
+       ~MessageContext() {
+               if (ptr != 0) { bindings.MessageContext_free(ptr); }
+       }
+
+       internal static MessageContext constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKMessageContext_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new MessageContext_Offers(ptr);
+                       case 1: return new MessageContext_Custom(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A MessageContext of type Offers */
+       public class MessageContext_Offers : MessageContext {
+               public OffersContext offers;
+               internal MessageContext_Offers(long ptr) : base(null, ptr) {
+                       long offers = bindings.LDKMessageContext_Offers_get_offers(ptr);
+                       org.ldk.structs.OffersContext offers_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(offers);
+                       if (offers_hu_conv != null) { offers_hu_conv.ptrs_to.AddLast(this); };
+                       this.offers = offers_hu_conv;
+               }
+       }
+       /** A MessageContext of type Custom */
+       public class MessageContext_Custom : MessageContext {
+               public byte[] custom;
+               internal MessageContext_Custom(long ptr) : base(null, ptr) {
+                       long custom = bindings.LDKMessageContext_Custom_get_custom(ptr);
+                       byte[] custom_conv = InternalUtils.decodeUint8Array(custom);
+                       this.custom = custom_conv;
+               }
+       }
+       internal long clone_ptr() {
+               long ret = bindings.MessageContext_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the MessageContext
+        */
+       public MessageContext clone() {
+               long ret = bindings.MessageContext_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageContext ret_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new Offers-variant MessageContext
+        */
+       public static MessageContext offers(org.ldk.structs.OffersContext a) {
+               long ret = bindings.MessageContext_offers(a.ptr);
+               GC.KeepAlive(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageContext ret_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new Custom-variant MessageContext
+        */
+       public static MessageContext custom(byte[] a) {
+               long ret = bindings.MessageContext_custom(InternalUtils.encodeUint8Array(a));
+               GC.KeepAlive(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageContext ret_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the MessageContext object into a byte array which can be read by MessageContext_read
+        */
+       public byte[] write() {
+               long ret = bindings.MessageContext_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a MessageContext from a byte array, created by MessageContext_write
+        */
+       public static Result_MessageContextDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.MessageContext_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_MessageContextDecodeErrorZ ret_hu_conv = Result_MessageContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/MessageForwardNode.cs b/c_sharp/src/org/ldk/structs/MessageForwardNode.cs
new file mode 100644 (file)
index 0000000..a9f22f8
--- /dev/null
@@ -0,0 +1,124 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * An intermediate node, and possibly a short channel id leading to the next node.
+ */
+public class MessageForwardNode : CommonBase {
+       internal MessageForwardNode(object _dummy, long ptr) : base(ptr) { }
+       ~MessageForwardNode() {
+               if (ptr != 0) { bindings.MessageForwardNode_free(ptr); }
+       }
+
+       /**
+        * This node's pubkey.
+        */
+       public byte[] get_node_id() {
+               long ret = bindings.MessageForwardNode_get_node_id(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * This node's pubkey.
+        */
+       public void set_node_id(byte[] val) {
+               bindings.MessageForwardNode_set_node_id(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The channel between `node_id` and the next hop. If set, the constructed [`BlindedHop`]'s
+        * `encrypted_payload` will use this instead of the next [`MessageForwardNode::node_id`] for a
+        * more compact representation.
+        */
+       public Option_u64Z get_short_channel_id() {
+               long ret = bindings.MessageForwardNode_get_short_channel_id(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The channel between `node_id` and the next hop. If set, the constructed [`BlindedHop`]'s
+        * `encrypted_payload` will use this instead of the next [`MessageForwardNode::node_id`] for a
+        * more compact representation.
+        */
+       public void set_short_channel_id(org.ldk.structs.Option_u64Z val) {
+               bindings.MessageForwardNode_set_short_channel_id(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new MessageForwardNode given each field
+        */
+       public static MessageForwardNode of(byte[] node_id_arg, org.ldk.structs.Option_u64Z short_channel_id_arg) {
+               long ret = bindings.MessageForwardNode_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id_arg, 33)), short_channel_id_arg.ptr);
+               GC.KeepAlive(node_id_arg);
+               GC.KeepAlive(short_channel_id_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.MessageForwardNode(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.MessageForwardNode_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the MessageForwardNode
+        */
+       public MessageForwardNode clone() {
+               long ret = bindings.MessageForwardNode_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.MessageForwardNode(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Generates a non-cryptographic 64-bit hash of the MessageForwardNode.
+        */
+       public long hash() {
+               long ret = bindings.MessageForwardNode_hash(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       public override int GetHashCode() {
+               return (int)this.hash();
+       }
+       /**
+        * Checks if two MessageForwardNodes contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.MessageForwardNode b) {
+               bool ret = bindings.MessageForwardNode_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is MessageForwardNode)) return false;
+               return this.eq((MessageForwardNode)o);
+       }
+}
+} } }
index 28b3b20b357895ac4a4637a793a62f74edde639c..5043e516f75e6bd37e1f411fb3f7791d0636e391 100644 (file)
@@ -13,10 +13,25 @@ public interface MessageRouterInterface {
        /**Returns a route for sending an [`OnionMessage`] to the given [`Destination`].
         */
        Result_OnionMessagePathNoneZ find_path(byte[] sender, byte[][] peers, Destination destination);
-       /**Creates [`BlindedPath`]s to the `recipient` node. The nodes in `peers` are assumed to be
-        * direct peers with the `recipient`.
+       /**Creates [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are assumed to
+        * be direct peers with the `recipient`.
         */
-       Result_CVec_BlindedPathZNoneZ create_blinded_paths(byte[] recipient, byte[][] peers);
+       Result_CVec_BlindedMessagePathZNoneZ create_blinded_paths(byte[] recipient, MessageContext context, byte[][] peers);
+       /**Creates compact [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are
+        * assumed to be direct peers with the `recipient`.
+        * 
+        * Compact blinded paths use short channel ids instead of pubkeys for a smaller serialization,
+        * which is beneficial when a QR code is used to transport the data. The SCID is passed using
+        * a [`MessageForwardNode`] but may be `None` for graceful degradation.
+        * 
+        * Implementations using additional intermediate nodes are responsible for using a
+        * [`MessageForwardNode`] with `Some` short channel id, if possible. Similarly, implementations
+        * should call [`BlindedMessagePath::use_compact_introduction_node`].
+        * 
+        * The provided implementation simply delegates to [`MessageRouter::create_blinded_paths`],
+        * ignoring the short channel ids.
+        */
+       Result_CVec_BlindedMessagePathZNoneZ create_compact_blinded_paths(byte[] recipient, MessageContext context, MessageForwardNode[] peers);
 }
 
 /**
@@ -53,8 +68,10 @@ public class MessageRouter : CommonBase {
                        long result = ret.clone_ptr();
                        return result;
                }
-               public long create_blinded_paths(long _recipient, long _peers) {
+               public long create_blinded_paths(long _recipient, long _context, long _peers) {
                        byte[] _recipient_conv = InternalUtils.decodeUint8Array(_recipient);
+                       org.ldk.structs.MessageContext _context_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(_context);
+                       if (_context_hu_conv != null) { _context_hu_conv.ptrs_to.AddLast(this); };
                        int _peers_conv_8_len = InternalUtils.getArrayLength(_peers);
                        byte[][] _peers_conv_8_arr = new byte[_peers_conv_8_len][];
                        for (int i = 0; i < _peers_conv_8_len; i++) {
@@ -63,7 +80,25 @@ public class MessageRouter : CommonBase {
                                _peers_conv_8_arr[i] = _peers_conv_8_conv;
                        }
                        bindings.free_buffer(_peers);
-                       Result_CVec_BlindedPathZNoneZ ret = arg.create_blinded_paths(_recipient_conv, _peers_conv_8_arr);
+                       Result_CVec_BlindedMessagePathZNoneZ ret = arg.create_blinded_paths(_recipient_conv, _context_hu_conv, _peers_conv_8_arr);
+                               GC.KeepAlive(arg);
+                       long result = ret.clone_ptr();
+                       return result;
+               }
+               public long create_compact_blinded_paths(long _recipient, long _context, long _peers) {
+                       byte[] _recipient_conv = InternalUtils.decodeUint8Array(_recipient);
+                       org.ldk.structs.MessageContext _context_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(_context);
+                       if (_context_hu_conv != null) { _context_hu_conv.ptrs_to.AddLast(this); };
+                       int _peers_conv_20_len = InternalUtils.getArrayLength(_peers);
+                       MessageForwardNode[] _peers_conv_20_arr = new MessageForwardNode[_peers_conv_20_len];
+                       for (int u = 0; u < _peers_conv_20_len; u++) {
+                               long _peers_conv_20 = InternalUtils.getU64ArrayElem(_peers, u);
+                               org.ldk.structs.MessageForwardNode _peers_conv_20_hu_conv = null; if (_peers_conv_20 < 0 || _peers_conv_20 > 4096) { _peers_conv_20_hu_conv = new org.ldk.structs.MessageForwardNode(null, _peers_conv_20); }
+                               if (_peers_conv_20_hu_conv != null) { _peers_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                               _peers_conv_20_arr[u] = _peers_conv_20_hu_conv;
+                       }
+                       bindings.free_buffer(_peers);
+                       Result_CVec_BlindedMessagePathZNoneZ ret = arg.create_compact_blinded_paths(_recipient_conv, _context_hu_conv, _peers_conv_20_arr);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
                        return result;
@@ -93,21 +128,47 @@ public class MessageRouter : CommonBase {
                GC.KeepAlive(destination);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OnionMessagePathNoneZ ret_hu_conv = Result_OnionMessagePathNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(destination); };
                return ret_hu_conv;
        }
 
        /**
-        * Creates [`BlindedPath`]s to the `recipient` node. The nodes in `peers` are assumed to be
-        * direct peers with the `recipient`.
+        * Creates [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are assumed to
+        * be direct peers with the `recipient`.
+        */
+       public Result_CVec_BlindedMessagePathZNoneZ create_blinded_paths(byte[] recipient, org.ldk.structs.MessageContext context, byte[][] peers) {
+               long ret = bindings.MessageRouter_create_blinded_paths(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient, 33)), context.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(peers, peers_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peers_conv_8, 33)))));
+               GC.KeepAlive(this);
+               GC.KeepAlive(recipient);
+               GC.KeepAlive(context);
+               GC.KeepAlive(peers);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedMessagePathZNoneZ ret_hu_conv = Result_CVec_BlindedMessagePathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates compact [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are
+        * assumed to be direct peers with the `recipient`.
+        * 
+        * Compact blinded paths use short channel ids instead of pubkeys for a smaller serialization,
+        * which is beneficial when a QR code is used to transport the data. The SCID is passed using
+        * a [`MessageForwardNode`] but may be `None` for graceful degradation.
+        * 
+        * Implementations using additional intermediate nodes are responsible for using a
+        * [`MessageForwardNode`] with `Some` short channel id, if possible. Similarly, implementations
+        * should call [`BlindedMessagePath::use_compact_introduction_node`].
+        * 
+        * The provided implementation simply delegates to [`MessageRouter::create_blinded_paths`],
+        * ignoring the short channel ids.
         */
-       public Result_CVec_BlindedPathZNoneZ create_blinded_paths(byte[] recipient, byte[][] peers) {
-               long ret = bindings.MessageRouter_create_blinded_paths(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient, 33)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(peers, peers_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peers_conv_8, 33)))));
+       public Result_CVec_BlindedMessagePathZNoneZ create_compact_blinded_paths(byte[] recipient, org.ldk.structs.MessageContext context, MessageForwardNode[] peers) {
+               long ret = bindings.MessageRouter_create_compact_blinded_paths(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient, 33)), context.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(peers, peers_conv_20 => peers_conv_20.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(recipient);
+               GC.KeepAlive(context);
                GC.KeepAlive(peers);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_BlindedPathZNoneZ ret_hu_conv = Result_CVec_BlindedPathZNoneZ.constr_from_ptr(ret);
+               Result_CVec_BlindedMessagePathZNoneZ ret_hu_conv = Result_CVec_BlindedMessagePathZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index 66b8c585fd9db75abdae44cfa0aaf0067b48303c..92503bcab8f4bde6dfaf6856f554375ddffaf3c6 100644 (file)
@@ -26,7 +26,7 @@ public class MessageSendEvent : CommonBase {
                        case 4: return new MessageSendEvent_SendFundingCreated(ptr);
                        case 5: return new MessageSendEvent_SendFundingSigned(ptr);
                        case 6: return new MessageSendEvent_SendStfu(ptr);
-                       case 7: return new MessageSendEvent_SendSplice(ptr);
+                       case 7: return new MessageSendEvent_SendSpliceInit(ptr);
                        case 8: return new MessageSendEvent_SendSpliceAck(ptr);
                        case 9: return new MessageSendEvent_SendSpliceLocked(ptr);
                        case 10: return new MessageSendEvent_SendTxAddInput(ptr);
@@ -200,8 +200,8 @@ public class MessageSendEvent : CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
-       /** A MessageSendEvent of type SendSplice */
-       public class MessageSendEvent_SendSplice : MessageSendEvent {
+       /** A MessageSendEvent of type SendSpliceInit */
+       public class MessageSendEvent_SendSpliceInit : MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
                 */
@@ -209,13 +209,13 @@ public class MessageSendEvent : CommonBase {
                /**
                 * The message which should be sent.
                 */
-               public Splice msg;
-               internal MessageSendEvent_SendSplice(long ptr) : base(null, ptr) {
-                       long node_id = bindings.LDKMessageSendEvent_SendSplice_get_node_id(ptr);
+               public SpliceInit msg;
+               internal MessageSendEvent_SendSpliceInit(long ptr) : base(null, ptr) {
+                       long node_id = bindings.LDKMessageSendEvent_SendSpliceInit_get_node_id(ptr);
                        byte[] node_id_conv = InternalUtils.decodeUint8Array(node_id);
                        this.node_id = node_id_conv;
-                       long msg = bindings.LDKMessageSendEvent_SendSplice_get_msg(ptr);
-                       org.ldk.structs.Splice msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.Splice(null, msg); }
+                       long msg = bindings.LDKMessageSendEvent_SendSpliceInit_get_msg(ptr);
+                       org.ldk.structs.SpliceInit msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.SpliceInit(null, msg); }
                        if (msg_hu_conv != null) { msg_hu_conv.ptrs_to.AddLast(this); };
                        this.msg = msg_hu_conv;
                }
@@ -805,7 +805,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -819,7 +818,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -833,7 +831,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -847,7 +844,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -861,7 +857,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -875,7 +870,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -889,21 +883,19 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
        /**
-        * Utility method to constructs a new SendSplice-variant MessageSendEvent
+        * Utility method to constructs a new SendSpliceInit-variant MessageSendEvent
         */
-       public static MessageSendEvent send_splice(byte[] node_id, org.ldk.structs.Splice msg) {
-               long ret = bindings.MessageSendEvent_send_splice(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id, 33)), msg.ptr);
+       public static MessageSendEvent send_splice_init(byte[] node_id, org.ldk.structs.SpliceInit msg) {
+               long ret = bindings.MessageSendEvent_send_splice_init(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id, 33)), msg.ptr);
                GC.KeepAlive(node_id);
                GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -917,7 +909,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -931,7 +922,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -945,7 +935,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -959,7 +948,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -973,7 +961,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -987,7 +974,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1001,7 +987,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1015,7 +1000,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1029,7 +1013,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1043,7 +1026,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1057,7 +1039,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1071,7 +1052,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1085,7 +1065,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1099,7 +1078,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(updates); };
                return ret_hu_conv;
        }
 
@@ -1113,7 +1091,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1127,7 +1104,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1141,7 +1117,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1155,7 +1130,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1170,8 +1144,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_msg); };
                return ret_hu_conv;
        }
 
@@ -1185,8 +1157,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(update_msg); };
                return ret_hu_conv;
        }
 
@@ -1199,7 +1169,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1212,7 +1181,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1226,7 +1194,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1240,7 +1207,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(action); };
                return ret_hu_conv;
        }
 
@@ -1254,7 +1220,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1268,7 +1233,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1282,7 +1246,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -1296,7 +1259,6 @@ public class MessageSendEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MessageSendEvent ret_hu_conv = org.ldk.structs.MessageSendEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
index 5bb12c5b65491cc33e02a7fa6a364093a581d295..6f40449a816b5f3b8628d704b97b79a234b02135 100644 (file)
@@ -37,7 +37,6 @@ public class MessageSendEventsProvider : CommonBase {
                        MessageSendEvent[] ret = arg.get_and_clear_pending_msg_events();
                                GC.KeepAlive(arg);
                        long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_18 => ret_conv_18.clone_ptr()));
-                       foreach (MessageSendEvent ret_conv_18 in ret) { if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret_conv_18); }; };
                        return result;
                }
        }
diff --git a/c_sharp/src/org/ldk/structs/MessageSendInstructions.cs b/c_sharp/src/org/ldk/structs/MessageSendInstructions.cs
new file mode 100644 (file)
index 0000000..f89de21
--- /dev/null
@@ -0,0 +1,167 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * Instructions for how and where to send a message.
+ */
+public class MessageSendInstructions : CommonBase {
+       protected MessageSendInstructions(object _dummy, long ptr) : base(ptr) { }
+       ~MessageSendInstructions() {
+               if (ptr != 0) { bindings.MessageSendInstructions_free(ptr); }
+       }
+
+       internal static MessageSendInstructions constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKMessageSendInstructions_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new MessageSendInstructions_WithSpecifiedReplyPath(ptr);
+                       case 1: return new MessageSendInstructions_WithReplyPath(ptr);
+                       case 2: return new MessageSendInstructions_WithoutReplyPath(ptr);
+                       case 3: return new MessageSendInstructions_ForReply(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A MessageSendInstructions of type WithSpecifiedReplyPath */
+       public class MessageSendInstructions_WithSpecifiedReplyPath : MessageSendInstructions {
+               /**
+                * The destination where we need to send our message.
+                */
+               public Destination destination;
+               /**
+                * The reply path which should be included in the message.
+                */
+               public BlindedMessagePath reply_path;
+               internal MessageSendInstructions_WithSpecifiedReplyPath(long ptr) : base(null, ptr) {
+                       long destination = bindings.LDKMessageSendInstructions_WithSpecifiedReplyPath_get_destination(ptr);
+                       org.ldk.structs.Destination destination_hu_conv = org.ldk.structs.Destination.constr_from_ptr(destination);
+                       if (destination_hu_conv != null) { destination_hu_conv.ptrs_to.AddLast(this); };
+                       this.destination = destination_hu_conv;
+                       long reply_path = bindings.LDKMessageSendInstructions_WithSpecifiedReplyPath_get_reply_path(ptr);
+                       org.ldk.structs.BlindedMessagePath reply_path_hu_conv = null; if (reply_path < 0 || reply_path > 4096) { reply_path_hu_conv = new org.ldk.structs.BlindedMessagePath(null, reply_path); }
+                       if (reply_path_hu_conv != null) { reply_path_hu_conv.ptrs_to.AddLast(this); };
+                       this.reply_path = reply_path_hu_conv;
+               }
+       }
+       /** A MessageSendInstructions of type WithReplyPath */
+       public class MessageSendInstructions_WithReplyPath : MessageSendInstructions {
+               /**
+                * The destination where we need to send our message.
+                */
+               public Destination destination;
+               /**
+                * The context to include in the reply path we'll give the recipient so they can respond
+                * to us.
+                */
+               public MessageContext context;
+               internal MessageSendInstructions_WithReplyPath(long ptr) : base(null, ptr) {
+                       long destination = bindings.LDKMessageSendInstructions_WithReplyPath_get_destination(ptr);
+                       org.ldk.structs.Destination destination_hu_conv = org.ldk.structs.Destination.constr_from_ptr(destination);
+                       if (destination_hu_conv != null) { destination_hu_conv.ptrs_to.AddLast(this); };
+                       this.destination = destination_hu_conv;
+                       long context = bindings.LDKMessageSendInstructions_WithReplyPath_get_context(ptr);
+                       org.ldk.structs.MessageContext context_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(context);
+                       if (context_hu_conv != null) { context_hu_conv.ptrs_to.AddLast(this); };
+                       this.context = context_hu_conv;
+               }
+       }
+       /** A MessageSendInstructions of type WithoutReplyPath */
+       public class MessageSendInstructions_WithoutReplyPath : MessageSendInstructions {
+               /**
+                * The destination where we need to send our message.
+                */
+               public Destination destination;
+               internal MessageSendInstructions_WithoutReplyPath(long ptr) : base(null, ptr) {
+                       long destination = bindings.LDKMessageSendInstructions_WithoutReplyPath_get_destination(ptr);
+                       org.ldk.structs.Destination destination_hu_conv = org.ldk.structs.Destination.constr_from_ptr(destination);
+                       if (destination_hu_conv != null) { destination_hu_conv.ptrs_to.AddLast(this); };
+                       this.destination = destination_hu_conv;
+               }
+       }
+       /** A MessageSendInstructions of type ForReply */
+       public class MessageSendInstructions_ForReply : MessageSendInstructions {
+               /**
+                * The instructions provided by the [`Responder`].
+                */
+               public ResponseInstruction instructions;
+               internal MessageSendInstructions_ForReply(long ptr) : base(null, ptr) {
+                       long instructions = bindings.LDKMessageSendInstructions_ForReply_get_instructions(ptr);
+                       org.ldk.structs.ResponseInstruction instructions_hu_conv = null; if (instructions < 0 || instructions > 4096) { instructions_hu_conv = new org.ldk.structs.ResponseInstruction(null, instructions); }
+                       if (instructions_hu_conv != null) { instructions_hu_conv.ptrs_to.AddLast(this); };
+                       this.instructions = instructions_hu_conv;
+               }
+       }
+       internal long clone_ptr() {
+               long ret = bindings.MessageSendInstructions_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the MessageSendInstructions
+        */
+       public MessageSendInstructions clone() {
+               long ret = bindings.MessageSendInstructions_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new WithSpecifiedReplyPath-variant MessageSendInstructions
+        */
+       public static MessageSendInstructions with_specified_reply_path(org.ldk.structs.Destination destination, org.ldk.structs.BlindedMessagePath reply_path) {
+               long ret = bindings.MessageSendInstructions_with_specified_reply_path(destination.ptr, reply_path.ptr);
+               GC.KeepAlive(destination);
+               GC.KeepAlive(reply_path);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new WithReplyPath-variant MessageSendInstructions
+        */
+       public static MessageSendInstructions with_reply_path(org.ldk.structs.Destination destination, org.ldk.structs.MessageContext context) {
+               long ret = bindings.MessageSendInstructions_with_reply_path(destination.ptr, context.ptr);
+               GC.KeepAlive(destination);
+               GC.KeepAlive(context);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new WithoutReplyPath-variant MessageSendInstructions
+        */
+       public static MessageSendInstructions without_reply_path(org.ldk.structs.Destination destination) {
+               long ret = bindings.MessageSendInstructions_without_reply_path(destination.ptr);
+               GC.KeepAlive(destination);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new ForReply-variant MessageSendInstructions
+        */
+       public static MessageSendInstructions for_reply(org.ldk.structs.ResponseInstruction instructions) {
+               long ret = bindings.MessageSendInstructions_for_reply(instructions.ptr);
+               GC.KeepAlive(instructions);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index dc163a41fc06c048448ff78db80ea65798d40f4e..0d81439ec48d2770ec656886f4fa0b92df4a9e17 100644 (file)
@@ -132,7 +132,6 @@ public class MonitorEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MonitorEvent ret_hu_conv = org.ldk.structs.MonitorEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -147,9 +146,6 @@ public class MonitorEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MonitorEvent ret_hu_conv = org.ldk.structs.MonitorEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(reason); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
                return ret_hu_conv;
        }
 
@@ -162,7 +158,6 @@ public class MonitorEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MonitorEvent ret_hu_conv = org.ldk.structs.MonitorEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -177,8 +172,6 @@ public class MonitorEvent : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MonitorEvent ret_hu_conv = org.ldk.structs.MonitorEvent.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_txo); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/MonitorUpdateId.cs b/c_sharp/src/org/ldk/structs/MonitorUpdateId.cs
deleted file mode 100644 (file)
index ec12583..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * An opaque identifier describing a specific [`Persist`] method call.
- */
-public class MonitorUpdateId : CommonBase {
-       internal MonitorUpdateId(object _dummy, long ptr) : base(ptr) { }
-       ~MonitorUpdateId() {
-               if (ptr != 0) { bindings.MonitorUpdateId_free(ptr); }
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.MonitorUpdateId_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a copy of the MonitorUpdateId
-        */
-       public MonitorUpdateId clone() {
-               long ret = bindings.MonitorUpdateId_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.MonitorUpdateId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.MonitorUpdateId(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Generates a non-cryptographic 64-bit hash of the MonitorUpdateId.
-        */
-       public long hash() {
-               long ret = bindings.MonitorUpdateId_hash(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       public override int GetHashCode() {
-               return (int)this.hash();
-       }
-       /**
-        * Checks if two MonitorUpdateIds contain equal inner contents.
-        * This ignores pointers and is_owned flags and looks at the values in fields.
-        * Two objects with NULL inner values will be considered "equal" here.
-        */
-       public bool eq(org.ldk.structs.MonitorUpdateId b) {
-               bool ret = bindings.MonitorUpdateId_eq(this.ptr, b.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(b);
-               if (this != null) { this.ptrs_to.AddLast(b); };
-               return ret;
-       }
-
-       public override bool Equals(object o) {
-               if (!(o is MonitorUpdateId)) return false;
-               return this.eq((MonitorUpdateId)o);
-       }
-}
-} } }
index 6a3c5447b8531a4edb6f708edb0bf4bac9404c48..7bd534dc8bfefa12164a21ebe61dda42025817eb 100644 (file)
@@ -115,13 +115,15 @@ public class MonitorUpdatingPersister : CommonBase {
         * - [`MonitorUpdatingPersister`] will potentially have more listing to do if you need to run
         * [`MonitorUpdatingPersister::cleanup_stale_updates`].
         */
-       public static MonitorUpdatingPersister of(org.ldk.structs.KVStore kv_store, org.ldk.structs.Logger logger, long maximum_pending_updates, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.SignerProvider signer_provider) {
-               long ret = bindings.MonitorUpdatingPersister_new(kv_store.ptr, logger.ptr, maximum_pending_updates, entropy_source.ptr, signer_provider.ptr);
+       public static MonitorUpdatingPersister of(org.ldk.structs.KVStore kv_store, org.ldk.structs.Logger logger, long maximum_pending_updates, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.SignerProvider signer_provider, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator) {
+               long ret = bindings.MonitorUpdatingPersister_new(kv_store.ptr, logger.ptr, maximum_pending_updates, entropy_source.ptr, signer_provider.ptr, broadcaster.ptr, fee_estimator.ptr);
                GC.KeepAlive(kv_store);
                GC.KeepAlive(logger);
                GC.KeepAlive(maximum_pending_updates);
                GC.KeepAlive(entropy_source);
                GC.KeepAlive(signer_provider);
+               GC.KeepAlive(broadcaster);
+               GC.KeepAlive(fee_estimator);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MonitorUpdatingPersister ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.MonitorUpdatingPersister(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
@@ -129,6 +131,8 @@ public class MonitorUpdatingPersister : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(signer_provider); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(broadcaster); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fee_estimator); };
                return ret_hu_conv;
        }
 
@@ -139,15 +143,11 @@ public class MonitorUpdatingPersister : CommonBase {
         * [`io::ErrorKind::NotFound`] variant correctly. For more information, please see the
         * documentation for [`MonitorUpdatingPersister`].
         */
-       public Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ read_all_channel_monitors_with_updates(org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator) {
-               long ret = bindings.MonitorUpdatingPersister_read_all_channel_monitors_with_updates(this.ptr, broadcaster.ptr, fee_estimator.ptr);
+       public Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ read_all_channel_monitors_with_updates() {
+               long ret = bindings.MonitorUpdatingPersister_read_all_channel_monitors_with_updates(this.ptr);
                GC.KeepAlive(this);
-               GC.KeepAlive(broadcaster);
-               GC.KeepAlive(fee_estimator);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(broadcaster); };
-               if (this != null) { this.ptrs_to.AddLast(fee_estimator); };
                return ret_hu_conv;
        }
 
@@ -170,16 +170,12 @@ public class MonitorUpdatingPersister : CommonBase {
         * Loading a large number of monitors will be faster if done in parallel. You can use this
         * function to accomplish this. Take care to limit the number of parallel readers.
         */
-       public Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ read_channel_monitor_with_updates(org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, string monitor_key) {
-               long ret = bindings.MonitorUpdatingPersister_read_channel_monitor_with_updates(this.ptr, broadcaster.ptr, fee_estimator.ptr, InternalUtils.encodeString(monitor_key));
+       public Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ read_channel_monitor_with_updates(string monitor_key) {
+               long ret = bindings.MonitorUpdatingPersister_read_channel_monitor_with_updates(this.ptr, InternalUtils.encodeString(monitor_key));
                GC.KeepAlive(this);
-               GC.KeepAlive(broadcaster);
-               GC.KeepAlive(fee_estimator);
                GC.KeepAlive(monitor_key);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(broadcaster); };
-               if (this != null) { this.ptrs_to.AddLast(fee_estimator); };
                return ret_hu_conv;
        }
 
index 24f4931f3d1a583f3d4bbbbeb18809b898923c63..6f2fc8768fed79141d74df58ad62ca95802dc418 100644 (file)
@@ -17,8 +17,6 @@ public class NetworkGraph : CommonBase {
 
        /**
         * Handles any network updates originating from [`Event`]s.
-        * Note that this will skip applying any [`NetworkUpdate::ChannelUpdateMessage`] to avoid
-        * leaking possibly identifying information of the sender to the public network.
         * 
         * [`Event`]: crate::events::Event
         */
@@ -236,7 +234,6 @@ public class NetworkGraph : CommonBase {
                GC.KeepAlive(node_id_2);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(features); };
                return ret_hu_conv;
        }
 
index 8642d16a032165a08c2da6405c8c8d2810a40780..2d728375ac53c1cc3c28e905ce1108d8996b63e5 100644 (file)
@@ -20,27 +20,13 @@ public class NetworkUpdate : CommonBase {
        internal static NetworkUpdate constr_from_ptr(long ptr) {
                long raw_ty = bindings.LDKNetworkUpdate_ty_from_ptr(ptr);
                switch (raw_ty) {
-                       case 0: return new NetworkUpdate_ChannelUpdateMessage(ptr);
-                       case 1: return new NetworkUpdate_ChannelFailure(ptr);
-                       case 2: return new NetworkUpdate_NodeFailure(ptr);
+                       case 0: return new NetworkUpdate_ChannelFailure(ptr);
+                       case 1: return new NetworkUpdate_NodeFailure(ptr);
                        default:
                                throw new ArgumentException("Impossible enum variant");
                }
        }
 
-       /** A NetworkUpdate of type ChannelUpdateMessage */
-       public class NetworkUpdate_ChannelUpdateMessage : NetworkUpdate {
-               /**
-                * The update to apply via [`NetworkGraph::update_channel`].
-                */
-               public ChannelUpdate msg;
-               internal NetworkUpdate_ChannelUpdateMessage(long ptr) : base(null, ptr) {
-                       long msg = bindings.LDKNetworkUpdate_ChannelUpdateMessage_get_msg(ptr);
-                       org.ldk.structs.ChannelUpdate msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.ChannelUpdate(null, msg); }
-                       if (msg_hu_conv != null) { msg_hu_conv.ptrs_to.AddLast(this); };
-                       this.msg = msg_hu_conv;
-               }
-       }
        /** A NetworkUpdate of type ChannelFailure */
        public class NetworkUpdate_ChannelFailure : NetworkUpdate {
                /**
@@ -93,19 +79,6 @@ public class NetworkUpdate : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Utility method to constructs a new ChannelUpdateMessage-variant NetworkUpdate
-        */
-       public static NetworkUpdate channel_update_message(org.ldk.structs.ChannelUpdate msg) {
-               long ret = bindings.NetworkUpdate_channel_update_message(msg.ptr);
-               GC.KeepAlive(msg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetworkUpdate ret_hu_conv = org.ldk.structs.NetworkUpdate.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
-               return ret_hu_conv;
-       }
-
        /**
         * Utility method to constructs a new ChannelFailure-variant NetworkUpdate
         */
index 26d28c70f70668bb00013906ef28323e94558309..89c9f51015b81d910ff0ed8ab573651057249d96 100644 (file)
@@ -56,7 +56,6 @@ public class NodeAnnouncement : CommonBase {
                bindings.NodeAnnouncement_set_contents(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -69,7 +68,6 @@ public class NodeAnnouncement : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.NodeAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncement(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/NodeAnnouncementDetails.cs b/c_sharp/src/org/ldk/structs/NodeAnnouncementDetails.cs
new file mode 100644 (file)
index 0000000..84ef3fa
--- /dev/null
@@ -0,0 +1,186 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * Non-relayable information received in the latest node_announcement from this node.
+ */
+public class NodeAnnouncementDetails : CommonBase {
+       internal NodeAnnouncementDetails(object _dummy, long ptr) : base(ptr) { }
+       ~NodeAnnouncementDetails() {
+               if (ptr != 0) { bindings.NodeAnnouncementDetails_free(ptr); }
+       }
+
+       /**
+        * Protocol features the node announced support for
+        */
+       public NodeFeatures get_features() {
+               long ret = bindings.NodeAnnouncementDetails_get_features(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Protocol features the node announced support for
+        */
+       public void set_features(org.ldk.structs.NodeFeatures val) {
+               bindings.NodeAnnouncementDetails_set_features(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * When the last known update to the node state was issued.
+        * Value is opaque, as set in the announcement.
+        */
+       public int get_last_update() {
+               int ret = bindings.NodeAnnouncementDetails_get_last_update(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * When the last known update to the node state was issued.
+        * Value is opaque, as set in the announcement.
+        */
+       public void set_last_update(int val) {
+               bindings.NodeAnnouncementDetails_set_last_update(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Color assigned to the node
+        */
+       public byte[] get_rgb() {
+               long ret = bindings.NodeAnnouncementDetails_get_rgb(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Color assigned to the node
+        */
+       public void set_rgb(byte[] val) {
+               bindings.NodeAnnouncementDetails_set_rgb(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 3)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Moniker assigned to the node.
+        * May be invalid or malicious (eg control chars),
+        * should not be exposed to the user.
+        */
+       public NodeAlias get_alias() {
+               long ret = bindings.NodeAnnouncementDetails_get_alias(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeAlias ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAlias(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Moniker assigned to the node.
+        * May be invalid or malicious (eg control chars),
+        * should not be exposed to the user.
+        */
+       public void set_alias(org.ldk.structs.NodeAlias val) {
+               bindings.NodeAnnouncementDetails_set_alias(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Internet-level addresses via which one can connect to the node
+        * 
+        * Returns a copy of the field.
+        */
+       public SocketAddress[] get_addresses() {
+               long ret = bindings.NodeAnnouncementDetails_get_addresses(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               int ret_conv_15_len = InternalUtils.getArrayLength(ret);
+               SocketAddress[] ret_conv_15_arr = new SocketAddress[ret_conv_15_len];
+               for (int p = 0; p < ret_conv_15_len; p++) {
+                       long ret_conv_15 = InternalUtils.getU64ArrayElem(ret, p);
+                       org.ldk.structs.SocketAddress ret_conv_15_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret_conv_15);
+                       if (ret_conv_15_hu_conv != null) { ret_conv_15_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_15_arr[p] = ret_conv_15_hu_conv;
+               }
+               bindings.free_buffer(ret);
+               return ret_conv_15_arr;
+       }
+
+       /**
+        * Internet-level addresses via which one can connect to the node
+        */
+       public void set_addresses(SocketAddress[] val) {
+               bindings.NodeAnnouncementDetails_set_addresses(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_15 => val_conv_15.ptr)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new NodeAnnouncementDetails given each field
+        */
+       public static NodeAnnouncementDetails of(org.ldk.structs.NodeFeatures features_arg, int last_update_arg, byte[] rgb_arg, org.ldk.structs.NodeAlias alias_arg, SocketAddress[] addresses_arg) {
+               long ret = bindings.NodeAnnouncementDetails_new(features_arg.ptr, last_update_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(rgb_arg, 3)), alias_arg.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(addresses_arg, addresses_arg_conv_15 => addresses_arg_conv_15.ptr)));
+               GC.KeepAlive(features_arg);
+               GC.KeepAlive(last_update_arg);
+               GC.KeepAlive(rgb_arg);
+               GC.KeepAlive(alias_arg);
+               GC.KeepAlive(addresses_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeAnnouncementDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncementDetails(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.NodeAnnouncementDetails_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the NodeAnnouncementDetails
+        */
+       public NodeAnnouncementDetails clone() {
+               long ret = bindings.NodeAnnouncementDetails_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeAnnouncementDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncementDetails(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two NodeAnnouncementDetailss contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.NodeAnnouncementDetails b) {
+               bool ret = bindings.NodeAnnouncementDetails_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is NodeAnnouncementDetails)) return false;
+               return this.eq((NodeAnnouncementDetails)o);
+       }
+}
+} } }
index b44a9b987ba658980f10db3a61dc42d40e084346..baa8504d271e51fc2fc60ee3f5ede339025dfc24 100644 (file)
@@ -5,192 +5,150 @@ using System;
 
 namespace org { namespace ldk { namespace structs {
 
-
 /**
  * Information received in the latest node_announcement from this node.
  */
 public class NodeAnnouncementInfo : CommonBase {
-       internal NodeAnnouncementInfo(object _dummy, long ptr) : base(ptr) { }
+       protected NodeAnnouncementInfo(object _dummy, long ptr) : base(ptr) { }
        ~NodeAnnouncementInfo() {
                if (ptr != 0) { bindings.NodeAnnouncementInfo_free(ptr); }
        }
 
-       /**
-        * Protocol features the node announced support for
-        */
-       public NodeFeatures get_features() {
-               long ret = bindings.NodeAnnouncementInfo_get_features(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeFeatures(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
+       internal static NodeAnnouncementInfo constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKNodeAnnouncementInfo_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new NodeAnnouncementInfo_Relayed(ptr);
+                       case 1: return new NodeAnnouncementInfo_Local(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
        }
 
-       /**
-        * Protocol features the node announced support for
-        */
-       public void set_features(org.ldk.structs.NodeFeatures val) {
-               bindings.NodeAnnouncementInfo_set_features(this.ptr, val.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
+       /** A NodeAnnouncementInfo of type Relayed */
+       public class NodeAnnouncementInfo_Relayed : NodeAnnouncementInfo {
+               public NodeAnnouncement relayed;
+               internal NodeAnnouncementInfo_Relayed(long ptr) : base(null, ptr) {
+                       long relayed = bindings.LDKNodeAnnouncementInfo_Relayed_get_relayed(ptr);
+                       org.ldk.structs.NodeAnnouncement relayed_hu_conv = null; if (relayed < 0 || relayed > 4096) { relayed_hu_conv = new org.ldk.structs.NodeAnnouncement(null, relayed); }
+                       if (relayed_hu_conv != null) { relayed_hu_conv.ptrs_to.AddLast(this); };
+                       this.relayed = relayed_hu_conv;
+               }
        }
-
-       /**
-        * When the last known update to the node state was issued.
-        * Value is opaque, as set in the announcement.
-        */
-       public int get_last_update() {
-               int ret = bindings.NodeAnnouncementInfo_get_last_update(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
+       /** A NodeAnnouncementInfo of type Local */
+       public class NodeAnnouncementInfo_Local : NodeAnnouncementInfo {
+               public NodeAnnouncementDetails local;
+               internal NodeAnnouncementInfo_Local(long ptr) : base(null, ptr) {
+                       long local = bindings.LDKNodeAnnouncementInfo_Local_get_local(ptr);
+                       org.ldk.structs.NodeAnnouncementDetails local_hu_conv = null; if (local < 0 || local > 4096) { local_hu_conv = new org.ldk.structs.NodeAnnouncementDetails(null, local); }
+                       if (local_hu_conv != null) { local_hu_conv.ptrs_to.AddLast(this); };
+                       this.local = local_hu_conv;
+               }
        }
-
-       /**
-        * When the last known update to the node state was issued.
-        * Value is opaque, as set in the announcement.
-        */
-       public void set_last_update(int val) {
-               bindings.NodeAnnouncementInfo_set_last_update(this.ptr, val);
+       internal long clone_ptr() {
+               long ret = bindings.NodeAnnouncementInfo_clone_ptr(this.ptr);
                GC.KeepAlive(this);
-               GC.KeepAlive(val);
+               return ret;
        }
 
        /**
-        * Color assigned to the node
+        * Creates a copy of the NodeAnnouncementInfo
         */
-       public byte[] get_rgb() {
-               long ret = bindings.NodeAnnouncementInfo_get_rgb(this.ptr);
+       public NodeAnnouncementInfo clone() {
+               long ret = bindings.NodeAnnouncementInfo_clone(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               org.ldk.structs.NodeAnnouncementInfo ret_hu_conv = org.ldk.structs.NodeAnnouncementInfo.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
        }
 
        /**
-        * Color assigned to the node
+        * Utility method to constructs a new Relayed-variant NodeAnnouncementInfo
         */
-       public void set_rgb(byte[] val) {
-               bindings.NodeAnnouncementInfo_set_rgb(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 3)));
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
+       public static NodeAnnouncementInfo relayed(org.ldk.structs.NodeAnnouncement a) {
+               long ret = bindings.NodeAnnouncementInfo_relayed(a.ptr);
+               GC.KeepAlive(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeAnnouncementInfo ret_hu_conv = org.ldk.structs.NodeAnnouncementInfo.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
        }
 
        /**
-        * Moniker assigned to the node.
-        * May be invalid or malicious (eg control chars),
-        * should not be exposed to the user.
+        * Utility method to constructs a new Local-variant NodeAnnouncementInfo
         */
-       public NodeAlias get_alias() {
-               long ret = bindings.NodeAnnouncementInfo_get_alias(this.ptr);
-               GC.KeepAlive(this);
+       public static NodeAnnouncementInfo local(org.ldk.structs.NodeAnnouncementDetails a) {
+               long ret = bindings.NodeAnnouncementInfo_local(a.ptr);
+               GC.KeepAlive(a);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeAlias ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAlias(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               org.ldk.structs.NodeAnnouncementInfo ret_hu_conv = org.ldk.structs.NodeAnnouncementInfo.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
                return ret_hu_conv;
        }
 
        /**
-        * Moniker assigned to the node.
-        * May be invalid or malicious (eg control chars),
-        * should not be exposed to the user.
+        * Checks if two NodeAnnouncementInfos contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
         */
-       public void set_alias(org.ldk.structs.NodeAlias val) {
-               bindings.NodeAnnouncementInfo_set_alias(this.ptr, val.ptr);
+       public bool eq(org.ldk.structs.NodeAnnouncementInfo b) {
+               bool ret = bindings.NodeAnnouncementInfo_eq(this.ptr, b.ptr);
                GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
+               GC.KeepAlive(b);
+               return ret;
        }
 
+       public override bool Equals(object o) {
+               if (!(o is NodeAnnouncementInfo)) return false;
+               return this.eq((NodeAnnouncementInfo)o);
+       }
        /**
-        * An initial announcement of the node
-        * Mostly redundant with the data we store in fields explicitly.
-        * Everything else is useful only for sending out for initial routing sync.
-        * Not stored if contains excess data to prevent DoS.
-        * 
-        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Protocol features the node announced support for
         */
-       public NodeAnnouncement get_announcement_message() {
-               long ret = bindings.NodeAnnouncementInfo_get_announcement_message(this.ptr);
+       public NodeFeatures features() {
+               long ret = bindings.NodeAnnouncementInfo_features(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncement(null, ret); }
+               org.ldk.structs.NodeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeFeatures(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
        /**
-        * An initial announcement of the node
-        * Mostly redundant with the data we store in fields explicitly.
-        * Everything else is useful only for sending out for initial routing sync.
-        * Not stored if contains excess data to prevent DoS.
+        * When the last known update to the node state was issued.
         * 
-        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Value may or may not be a timestamp, depending on the policy of the origin node.
         */
-       public void set_announcement_message(org.ldk.structs.NodeAnnouncement val) {
-               bindings.NodeAnnouncementInfo_set_announcement_message(this.ptr, val == null ? 0 : val.ptr);
+       public int last_update() {
+               int ret = bindings.NodeAnnouncementInfo_last_update(this.ptr);
                GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
+               return ret;
        }
 
        /**
-        * Constructs a new NodeAnnouncementInfo given each field
-        * 
-        * Note that announcement_message_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Color assigned to the node
         */
-       public static NodeAnnouncementInfo of(org.ldk.structs.NodeFeatures features_arg, int last_update_arg, byte[] rgb_arg, org.ldk.structs.NodeAlias alias_arg, org.ldk.structs.NodeAnnouncement announcement_message_arg) {
-               long ret = bindings.NodeAnnouncementInfo_new(features_arg.ptr, last_update_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(rgb_arg, 3)), alias_arg.ptr, announcement_message_arg == null ? 0 : announcement_message_arg.ptr);
-               GC.KeepAlive(features_arg);
-               GC.KeepAlive(last_update_arg);
-               GC.KeepAlive(rgb_arg);
-               GC.KeepAlive(alias_arg);
-               GC.KeepAlive(announcement_message_arg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeAnnouncementInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncementInfo(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(alias_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(announcement_message_arg); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.NodeAnnouncementInfo_clone_ptr(this.ptr);
+       public byte[] rgb() {
+               long ret = bindings.NodeAnnouncementInfo_rgb(this.ptr);
                GC.KeepAlive(this);
-               return ret;
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
        }
 
        /**
-        * Creates a copy of the NodeAnnouncementInfo
+        * Moniker assigned to the node.
+        * 
+        * May be invalid or malicious (eg control chars), should not be exposed to the user.
         */
-       public NodeAnnouncementInfo clone() {
-               long ret = bindings.NodeAnnouncementInfo_clone(this.ptr);
+       public NodeAlias alias() {
+               long ret = bindings.NodeAnnouncementInfo_alias(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeAnnouncementInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncementInfo(null, ret); }
+               org.ldk.structs.NodeAlias ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAlias(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
-       /**
-        * Checks if two NodeAnnouncementInfos contain equal inner contents.
-        * This ignores pointers and is_owned flags and looks at the values in fields.
-        * Two objects with NULL inner values will be considered "equal" here.
-        */
-       public bool eq(org.ldk.structs.NodeAnnouncementInfo b) {
-               bool ret = bindings.NodeAnnouncementInfo_eq(this.ptr, b.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(b);
-               if (this != null) { this.ptrs_to.AddLast(b); };
-               return ret;
-       }
-
-       public override bool Equals(object o) {
-               if (!(o is NodeAnnouncementInfo)) return false;
-               return this.eq((NodeAnnouncementInfo)o);
-       }
        /**
         * Internet-level addresses via which one can connect to the node
         */
@@ -210,6 +168,22 @@ public class NodeAnnouncementInfo : CommonBase {
                return ret_conv_15_arr;
        }
 
+       /**
+        * An initial announcement of the node
+        * 
+        * Not stored if contains excess data to prevent DoS.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public NodeAnnouncement announcement_message() {
+               long ret = bindings.NodeAnnouncementInfo_announcement_message(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncement(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
        /**
         * Serialize the NodeAnnouncementInfo object into a byte array which can be read by NodeAnnouncementInfo_read
         */
index 38871abac8ba7477aeb81532d35e1d5b931d1c7d..e8b0f9b288326dcb084650014b90333d42524ee0 100644 (file)
@@ -15,6 +15,28 @@ public class NodeFeatures : CommonBase {
                if (ptr != 0) { bindings.NodeFeatures_free(ptr); }
        }
 
+       /**
+        * Serialize the NodeFeatures object into a byte array which can be read by NodeFeatures_read
+        */
+       public byte[] write() {
+               long ret = bindings.NodeFeatures_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a NodeFeatures from a byte array, created by NodeFeatures_write
+        */
+       public static Result_NodeFeaturesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.NodeFeatures_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NodeFeaturesDecodeErrorZ ret_hu_conv = Result_NodeFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two NodeFeaturess contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -73,6 +95,27 @@ public class NodeFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.NodeFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.NodeFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +127,19 @@ public class NodeFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.NodeFeatures other) {
+               long ret = bindings.NodeFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +150,15 @@ public class NodeFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.NodeFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
@@ -167,27 +232,68 @@ public class NodeFeatures : CommonBase {
        }
 
        /**
-        * Serialize the NodeFeatures object into a byte array which can be read by NodeFeatures_read
+        * Unsets the `upfront_shutdown_script` feature
         */
-       public byte[] write() {
-               long ret = bindings.NodeFeatures_write(this.ptr);
+       public NodeFeatures clear_upfront_shutdown_script() {
+               long ret = bindings.NodeFeatures_clear_upfront_shutdown_script(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               org.ldk.structs.NodeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
        }
 
        /**
-        * Read a NodeFeatures from a byte array, created by NodeFeatures_write
+        * Unsets the `shutdown_anysegwit` feature
         */
-       public static Result_NodeFeaturesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.NodeFeatures_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
+       public NodeFeatures clear_shutdown_anysegwit() {
+               long ret = bindings.NodeFeatures_clear_shutdown_anysegwit(this.ptr);
+               GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NodeFeaturesDecodeErrorZ ret_hu_conv = Result_NodeFeaturesDecodeErrorZ.constr_from_ptr(ret);
+               org.ldk.structs.NodeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
+       /**
+        * Unsets the `wumbo` feature
+        */
+       public NodeFeatures clear_wumbo() {
+               long ret = bindings.NodeFeatures_clear_wumbo(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.NodeFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Unsets the `scid_privacy` feature
+        */
+       public void clear_scid_privacy() {
+               bindings.NodeFeatures_clear_scid_privacy(this.ptr);
+               GC.KeepAlive(this);
+       }
+
+       /**
+        * Unsets the `anchors_zero_fee_htlc_tx` feature
+        */
+       public void clear_anchors_zero_fee_htlc_tx() {
+               bindings.NodeFeatures_clear_anchors_zero_fee_htlc_tx(this.ptr);
+               GC.KeepAlive(this);
+       }
+
+       /**
+        * Unsets the `route_blinding` feature
+        */
+       public void clear_route_blinding() {
+               bindings.NodeFeatures_clear_route_blinding(this.ptr);
+               GC.KeepAlive(this);
+       }
+
        /**
         * Set this feature as optional.
         */
index a7a211adcb6d1f4c25998f85f423e5ddfa2e31f1..586896debaddcc5bd55ab774a9fa1c63e9ab2d3c 100644 (file)
@@ -33,6 +33,23 @@ public class NodeId : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if two NodeIds contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.NodeId b) {
+               bool ret = bindings.NodeId_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is NodeId)) return false;
+               return this.eq((NodeId)o);
+       }
        /**
         * Create a new NodeId from a public key
         */
index e7975e61df6602ce6908c99fb918f3b373a25f8c..9cf8a85d84fbbbc70630b5a60b278ddb3d3dc1ee 100644 (file)
@@ -42,13 +42,13 @@ public class NodeInfo : CommonBase {
         * Optional because we store a Node entry after learning about it from
         * a channel announcement, but before receiving a node announcement.
         * 
-        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Returns a copy of the field.
         */
-       public NodeAnnouncementInfo get_announcement_info() {
+       public Option_NodeAnnouncementInfoZ get_announcement_info() {
                long ret = bindings.NodeInfo_get_announcement_info(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeAnnouncementInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncementInfo(null, ret); }
+               org.ldk.structs.Option_NodeAnnouncementInfoZ ret_hu_conv = org.ldk.structs.Option_NodeAnnouncementInfoZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
@@ -57,30 +57,11 @@ public class NodeInfo : CommonBase {
         * More information about a node from node_announcement.
         * Optional because we store a Node entry after learning about it from
         * a channel announcement, but before receiving a node announcement.
-        * 
-        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public void set_announcement_info(org.ldk.structs.NodeAnnouncementInfo val) {
-               bindings.NodeInfo_set_announcement_info(this.ptr, val == null ? 0 : val.ptr);
+       public void set_announcement_info(org.ldk.structs.Option_NodeAnnouncementInfoZ val) {
+               bindings.NodeInfo_set_announcement_info(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
-       }
-
-       /**
-        * Constructs a new NodeInfo given each field
-        * 
-        * Note that announcement_info_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
-        */
-       public static NodeInfo of(long[] channels_arg, org.ldk.structs.NodeAnnouncementInfo announcement_info_arg) {
-               long ret = bindings.NodeInfo_new(InternalUtils.encodeUint64Array(channels_arg), announcement_info_arg == null ? 0 : announcement_info_arg.ptr);
-               GC.KeepAlive(channels_arg);
-               GC.KeepAlive(announcement_info_arg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NodeInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeInfo(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(announcement_info_arg); };
-               return ret_hu_conv;
        }
 
        internal long clone_ptr() {
index f5f001b949473d167ceefed4ae59a9d594ca5cf0..98f740337ad2a15245d28233174b66824d4a1ba2 100644 (file)
@@ -51,7 +51,7 @@ public interface NodeSignerInterface {
         * 
         * Errors if the [`Recipient`] variant is not supported by the implementation.
         */
-       Result_RecoverableSignatureNoneZ sign_invoice(byte[] hrp_bytes, UInt5[] invoice_data, Recipient recipient);
+       Result_RecoverableSignatureNoneZ sign_invoice(RawBolt11Invoice invoice, Recipient recipient);
        /**Signs the [`TaggedHash`] of a BOLT 12 invoice request.
         * 
         * May be called by a function passed to [`UnsignedInvoiceRequest::sign`] where
@@ -126,17 +126,9 @@ public class NodeSigner : CommonBase {
                        long result = ret.clone_ptr();
                        return result;
                }
-               public long sign_invoice(long _hrp_bytes, long _invoice_data, Recipient _recipient) {
-                       byte[] _hrp_bytes_conv = InternalUtils.decodeUint8Array(_hrp_bytes);
-                       int _invoice_data_conv_7_len = InternalUtils.getArrayLength(_invoice_data);
-                       UInt5[] _invoice_data_conv_7_arr = new UInt5[_invoice_data_conv_7_len];
-                       for (int h = 0; h < _invoice_data_conv_7_len; h++) {
-                               byte _invoice_data_conv_7 = InternalUtils.getU8ArrayElem(_invoice_data, h);
-                               UInt5 _invoice_data_conv_7_conv = new UInt5(_invoice_data_conv_7);
-                               _invoice_data_conv_7_arr[h] = _invoice_data_conv_7_conv;
-                       }
-                       bindings.free_buffer(_invoice_data);
-                       Result_RecoverableSignatureNoneZ ret = arg.sign_invoice(_hrp_bytes_conv, _invoice_data_conv_7_arr, _recipient);
+               public long sign_invoice(long _invoice, Recipient _recipient) {
+                       org.ldk.structs.RawBolt11Invoice _invoice_hu_conv = null; if (_invoice < 0 || _invoice > 4096) { _invoice_hu_conv = new org.ldk.structs.RawBolt11Invoice(null, _invoice); }
+                       Result_RecoverableSignatureNoneZ ret = arg.sign_invoice(_invoice_hu_conv, _recipient);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
                        return result;
@@ -231,7 +223,6 @@ public class NodeSigner : CommonBase {
                GC.KeepAlive(tweak);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(tweak); };
                return ret_hu_conv;
        }
 
@@ -248,14 +239,14 @@ public class NodeSigner : CommonBase {
         * 
         * Errors if the [`Recipient`] variant is not supported by the implementation.
         */
-       public Result_RecoverableSignatureNoneZ sign_invoice(byte[] hrp_bytes, UInt5[] invoice_data, Recipient recipient) {
-               long ret = bindings.NodeSigner_sign_invoice(this.ptr, InternalUtils.encodeUint8Array(hrp_bytes), InternalUtils.encodeUint8Array(InternalUtils.convUInt5Array(invoice_data)), recipient);
+       public Result_RecoverableSignatureNoneZ sign_invoice(org.ldk.structs.RawBolt11Invoice invoice, Recipient recipient) {
+               long ret = bindings.NodeSigner_sign_invoice(this.ptr, invoice.ptr, recipient);
                GC.KeepAlive(this);
-               GC.KeepAlive(hrp_bytes);
-               GC.KeepAlive(invoice_data);
+               GC.KeepAlive(invoice);
                GC.KeepAlive(recipient);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RecoverableSignatureNoneZ ret_hu_conv = Result_RecoverableSignatureNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(invoice); };
                return ret_hu_conv;
        }
 
@@ -319,7 +310,6 @@ public class NodeSigner : CommonBase {
                GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Nonce.cs b/c_sharp/src/org/ldk/structs/Nonce.cs
new file mode 100644 (file)
index 0000000..804922a
--- /dev/null
@@ -0,0 +1,107 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A 128-bit number used only once.
+ * 
+ * Needed when constructing [`Offer::metadata`] and deriving [`Offer::signing_pubkey`] from
+ * [`ExpandedKey`]. Must not be reused for any other derivation without first hashing.
+ * 
+ * [`Offer::metadata`]: crate::offers::offer::Offer::metadata
+ * [`Offer::signing_pubkey`]: crate::offers::offer::Offer::signing_pubkey
+ * [`ExpandedKey`]: crate::ln::inbound_payment::ExpandedKey
+ */
+public class Nonce : CommonBase {
+       internal Nonce(object _dummy, long ptr) : base(ptr) { }
+       ~Nonce() {
+               if (ptr != 0) { bindings.Nonce_free(ptr); }
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.Nonce_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the Nonce
+        */
+       public Nonce clone() {
+               long ret = bindings.Nonce_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Nonce ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Nonce(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two Nonces contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.Nonce b) {
+               bool ret = bindings.Nonce_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is Nonce)) return false;
+               return this.eq((Nonce)o);
+       }
+       /**
+        * Creates a `Nonce` from the given [`EntropySource`].
+        */
+       public static Nonce from_entropy_source(org.ldk.structs.EntropySource entropy_source) {
+               long ret = bindings.Nonce_from_entropy_source(entropy_source.ptr);
+               GC.KeepAlive(entropy_source);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Nonce ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Nonce(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Returns a slice of the underlying bytes of size [`Nonce::LENGTH`].
+        */
+       public byte[] as_slice() {
+               long ret = bindings.Nonce_as_slice(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Serialize the Nonce object into a byte array which can be read by Nonce_read
+        */
+       public byte[] write() {
+               long ret = bindings.Nonce_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a Nonce from a byte array, created by Nonce_write
+        */
+       public static Result_NonceDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Nonce_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NonceDecodeErrorZ ret_hu_conv = Result_NonceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 3db5c8443c8d61e5c6ce11f80ce09a2506ab54c2..283c0f7e79d5d9d80fa881264952b9ed801b8545 100644 (file)
@@ -16,7 +16,7 @@ namespace org { namespace ldk { namespace structs {
  * Offers may be denominated in currency other than bitcoin but are ultimately paid using the
  * latter.
  * 
- * Through the use of [`BlindedPath`]s, offers provide recipient privacy.
+ * Through the use of [`BlindedMessagePath`]s, offers provide recipient privacy.
  * 
  * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
  * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
@@ -150,20 +150,20 @@ public class Offer : CommonBase {
         * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
         * recipient privacy by obfuscating its node id.
         */
-       public BlindedPath[] paths() {
+       public BlindedMessagePath[] paths() {
                long ret = bindings.Offer_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
@@ -258,8 +258,9 @@ public class Offer : CommonBase {
         * - derives the [`InvoiceRequest::payer_id`] such that a different key can be used for each
         * request,
         * - sets [`InvoiceRequest::payer_metadata`] when [`InvoiceRequestBuilder::build`] is called
-        * such that it can be used by [`Bolt12Invoice::verify`] to determine if the invoice was
-        * requested using a base [`ExpandedKey`] from which the payer id was derived, and
+        * such that it can be used by [`Bolt12Invoice::verify_using_metadata`] to determine if the
+        * invoice was requested using a base [`ExpandedKey`] from which the payer id was derived,
+        * and
         * - includes the [`PaymentId`] encrypted in [`InvoiceRequest::payer_metadata`] so that it can
         * be used when sending the payment for the requested invoice.
         * 
@@ -267,19 +268,18 @@ public class Offer : CommonBase {
         * 
         * [`InvoiceRequest::payer_id`]: crate::offers::invoice_request::InvoiceRequest::payer_id
         * [`InvoiceRequest::payer_metadata`]: crate::offers::invoice_request::InvoiceRequest::payer_metadata
-        * [`Bolt12Invoice::verify`]: crate::offers::invoice::Bolt12Invoice::verify
+        * [`Bolt12Invoice::verify_using_metadata`]: crate::offers::invoice::Bolt12Invoice::verify_using_metadata
         * [`ExpandedKey`]: crate::ln::inbound_payment::ExpandedKey
         */
-       public Result_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ request_invoice_deriving_payer_id(org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.EntropySource entropy_source, byte[] payment_id) {
-               long ret = bindings.Offer_request_invoice_deriving_payer_id(this.ptr, expanded_key.ptr, entropy_source.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
+       public Result_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ request_invoice_deriving_payer_id(org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.Nonce nonce, byte[] payment_id) {
+               long ret = bindings.Offer_request_invoice_deriving_payer_id(this.ptr, expanded_key.ptr, nonce.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
                GC.KeepAlive(this);
                GC.KeepAlive(expanded_key);
-               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(nonce);
                GC.KeepAlive(payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ ret_hu_conv = Result_InvoiceRequestWithDerivedPayerIdBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(expanded_key); };
-               if (this != null) { this.ptrs_to.AddLast(entropy_source); };
                return ret_hu_conv;
        }
 
@@ -291,17 +291,16 @@ public class Offer : CommonBase {
         * 
         * [`InvoiceRequest::payer_id`]: crate::offers::invoice_request::InvoiceRequest::payer_id
         */
-       public Result_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ request_invoice_deriving_metadata(byte[] payer_id, org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.EntropySource entropy_source, byte[] payment_id) {
-               long ret = bindings.Offer_request_invoice_deriving_metadata(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payer_id, 33)), expanded_key.ptr, entropy_source.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
+       public Result_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ request_invoice_deriving_metadata(byte[] payer_id, org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.Nonce nonce, byte[] payment_id) {
+               long ret = bindings.Offer_request_invoice_deriving_metadata(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payer_id, 33)), expanded_key.ptr, nonce.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
                GC.KeepAlive(this);
                GC.KeepAlive(payer_id);
                GC.KeepAlive(expanded_key);
-               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(nonce);
                GC.KeepAlive(payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ ret_hu_conv = Result_InvoiceRequestWithExplicitPayerIdBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(expanded_key); };
-               if (this != null) { this.ptrs_to.AddLast(entropy_source); };
                return ret_hu_conv;
        }
 
@@ -342,6 +341,17 @@ public class Offer : CommonBase {
        public override int GetHashCode() {
                return (int)this.hash();
        }
+       /**
+        * Read a Offer from a byte array, created by Offer_write
+        */
+       public static Result_OfferDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Offer_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OfferDecodeErrorZ ret_hu_conv = Result_OfferDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Serialize the Offer object into a byte array which can be read by Offer_read
         */
index d72a7ad0074e7ff56c77e8fe63e5e0c05bb549b0..5bb423ac05f4c116f7c3df4f6c69fce1248141df 100644 (file)
@@ -73,6 +73,27 @@ public class OfferFeatures : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the feature set as a list of bytes, in little-endian. This is in reverse byte order
+        * from most on-the-wire encodings.
+        */
+       public byte[] le_flags() {
+               long ret = bindings.OfferFeatures_le_flags(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Returns true if this `Features` has any optional flags set
+        */
+       public bool supports_any_optional_bits() {
+               bool ret = bindings.OfferFeatures_supports_any_optional_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Returns true if this `Features` object contains required features unknown by `other`.
         */
@@ -84,6 +105,19 @@ public class OfferFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the set of required features unknown by `other`, as their bit position.
+        */
+       public long[] required_unknown_bits_from(org.ldk.structs.OfferFeatures other) {
+               long ret = bindings.OfferFeatures_required_unknown_bits_from(this.ptr, other.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(other);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               if (this != null) { this.ptrs_to.AddLast(other); };
+               return ret_conv;
+       }
+
        /**
         * Returns true if this `Features` object contains unknown feature flags which are set as
         * \"required\".
@@ -94,6 +128,15 @@ public class OfferFeatures : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns true if this `Features` supports any bits which we do not know of
+        */
+       public bool supports_unknown_bits() {
+               bool ret = bindings.OfferFeatures_supports_unknown_bits(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
        /**
         * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
         * by [BOLT 9].
index ae8349ab3b378c2f3a96a8d2cf879da889d73744..40016960c4cf1179684916c9a1607aa5137924c6 100644 (file)
@@ -39,27 +39,29 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
 
        /**
         * Similar to [`OfferBuilder::new`] except, if [`OfferBuilder::path`] is called, the signing
-        * pubkey is derived from the given [`ExpandedKey`] and [`EntropySource`]. This provides
-        * recipient privacy by using a different signing pubkey for each offer. Otherwise, the
-        * provided `node_id` is used for the signing pubkey.
+        * pubkey is derived from the given [`ExpandedKey`] and [`Nonce`]. This provides recipient
+        * privacy by using a different signing pubkey for each offer. Otherwise, the provided
+        * `node_id` is used for the signing pubkey.
         * 
         * Also, sets the metadata when [`OfferBuilder::build`] is called such that it can be used by
-        * [`InvoiceRequest::verify`] to determine if the request was produced for the offer given an
-        * [`ExpandedKey`].
+        * [`InvoiceRequest::verify_using_metadata`] to determine if the request was produced for the
+        * offer given an [`ExpandedKey`]. However, if [`OfferBuilder::path`] is called, then the
+        * metadata will not be set and must be included in each [`BlindedMessagePath`] instead. In this case,
+        * use [`InvoiceRequest::verify_using_recipient_data`].
         * 
-        * [`InvoiceRequest::verify`]: crate::offers::invoice_request::InvoiceRequest::verify
+        * [`InvoiceRequest::verify_using_metadata`]: crate::offers::invoice_request::InvoiceRequest::verify_using_metadata
+        * [`InvoiceRequest::verify_using_recipient_data`]: crate::offers::invoice_request::InvoiceRequest::verify_using_recipient_data
         * [`ExpandedKey`]: crate::ln::inbound_payment::ExpandedKey
         */
-       public static OfferWithDerivedMetadataBuilder deriving_signing_pubkey(byte[] node_id, org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.EntropySource entropy_source) {
-               long ret = bindings.OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id, 33)), expanded_key.ptr, entropy_source.ptr);
+       public static OfferWithDerivedMetadataBuilder deriving_signing_pubkey(byte[] node_id, org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.Nonce nonce) {
+               long ret = bindings.OfferWithDerivedMetadataBuilder_deriving_signing_pubkey(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id, 33)), expanded_key.ptr, nonce.ptr);
                GC.KeepAlive(node_id);
                GC.KeepAlive(expanded_key);
-               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(nonce);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OfferWithDerivedMetadataBuilder ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferWithDerivedMetadataBuilder(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(expanded_key); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                return ret_hu_conv;
        }
 
@@ -75,7 +77,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                bindings.OfferWithDerivedMetadataBuilder_chain(this.ptr, network);
                GC.KeepAlive(this);
                GC.KeepAlive(network);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -87,7 +89,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                bindings.OfferWithDerivedMetadataBuilder_amount_msats(this.ptr, amount_msats);
                GC.KeepAlive(this);
                GC.KeepAlive(amount_msats);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -100,7 +102,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                bindings.OfferWithDerivedMetadataBuilder_absolute_expiry(this.ptr, absolute_expiry);
                GC.KeepAlive(this);
                GC.KeepAlive(absolute_expiry);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -112,7 +114,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                bindings.OfferWithDerivedMetadataBuilder_description(this.ptr, InternalUtils.encodeString(description));
                GC.KeepAlive(this);
                GC.KeepAlive(description);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -124,7 +126,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                bindings.OfferWithDerivedMetadataBuilder_issuer(this.ptr, InternalUtils.encodeString(issuer));
                GC.KeepAlive(this);
                GC.KeepAlive(issuer);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -134,12 +136,11 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
         * Successive calls to this method will add another blinded path. Caller is responsible for not
         * adding duplicate paths.
         */
-       public void path(org.ldk.structs.BlindedPath path) {
+       public void path(org.ldk.structs.BlindedMessagePath path) {
                bindings.OfferWithDerivedMetadataBuilder_path(this.ptr, path.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(path);
-               if (this != null) { this.ptrs_to.AddLast(path); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -152,8 +153,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                bindings.OfferWithDerivedMetadataBuilder_supported_quantity(this.ptr, quantity.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(quantity);
-               if (this != null) { this.ptrs_to.AddLast(quantity); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -164,7 +164,7 @@ public class OfferWithDerivedMetadataBuilder : CommonBase {
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferBolt12SemanticErrorZ ret_hu_conv = Result_OfferBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
index 23dfa87dbef6532c74c485f974795f6ae360d690..d88418864aa6ecc1c91a80a22697eaec5c85e70c 100644 (file)
@@ -71,7 +71,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                GC.KeepAlive(metadata);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneBolt12SemanticErrorZ ret_hu_conv = Result_NoneBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
@@ -87,7 +87,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                bindings.OfferWithExplicitMetadataBuilder_chain(this.ptr, network);
                GC.KeepAlive(this);
                GC.KeepAlive(network);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -99,7 +99,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                bindings.OfferWithExplicitMetadataBuilder_amount_msats(this.ptr, amount_msats);
                GC.KeepAlive(this);
                GC.KeepAlive(amount_msats);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -112,7 +112,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                bindings.OfferWithExplicitMetadataBuilder_absolute_expiry(this.ptr, absolute_expiry);
                GC.KeepAlive(this);
                GC.KeepAlive(absolute_expiry);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -124,7 +124,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                bindings.OfferWithExplicitMetadataBuilder_description(this.ptr, InternalUtils.encodeString(description));
                GC.KeepAlive(this);
                GC.KeepAlive(description);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -136,7 +136,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                bindings.OfferWithExplicitMetadataBuilder_issuer(this.ptr, InternalUtils.encodeString(issuer));
                GC.KeepAlive(this);
                GC.KeepAlive(issuer);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -146,12 +146,11 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
         * Successive calls to this method will add another blinded path. Caller is responsible for not
         * adding duplicate paths.
         */
-       public void path(org.ldk.structs.BlindedPath path) {
+       public void path(org.ldk.structs.BlindedMessagePath path) {
                bindings.OfferWithExplicitMetadataBuilder_path(this.ptr, path.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(path);
-               if (this != null) { this.ptrs_to.AddLast(path); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -164,8 +163,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                bindings.OfferWithExplicitMetadataBuilder_supported_quantity(this.ptr, quantity.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(quantity);
-               if (this != null) { this.ptrs_to.AddLast(quantity); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -176,7 +174,7 @@ public class OfferWithExplicitMetadataBuilder : CommonBase {
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferBolt12SemanticErrorZ ret_hu_conv = Result_OfferBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/OffersContext.cs b/c_sharp/src/org/ldk/structs/OffersContext.cs
new file mode 100644 (file)
index 0000000..5405572
--- /dev/null
@@ -0,0 +1,195 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * Contains data specific to an [`OffersMessage`].
+ * 
+ * [`OffersMessage`]: crate::onion_message::offers::OffersMessage
+ */
+public class OffersContext : CommonBase {
+       protected OffersContext(object _dummy, long ptr) : base(ptr) { }
+       ~OffersContext() {
+               if (ptr != 0) { bindings.OffersContext_free(ptr); }
+       }
+
+       internal static OffersContext constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKOffersContext_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new OffersContext_InvoiceRequest(ptr);
+                       case 1: return new OffersContext_OutboundPayment(ptr);
+                       case 2: return new OffersContext_InboundPayment(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A OffersContext of type InvoiceRequest */
+       public class OffersContext_InvoiceRequest : OffersContext {
+               /**
+                * A nonce used for authenticating that an [`InvoiceRequest`] is for a valid [`Offer`] and
+                * for deriving the offer's signing keys.
+                * 
+                * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
+                * [`Offer`]: crate::offers::offer::Offer
+                */
+               public Nonce nonce;
+               internal OffersContext_InvoiceRequest(long ptr) : base(null, ptr) {
+                       long nonce = bindings.LDKOffersContext_InvoiceRequest_get_nonce(ptr);
+                       org.ldk.structs.Nonce nonce_hu_conv = null; if (nonce < 0 || nonce > 4096) { nonce_hu_conv = new org.ldk.structs.Nonce(null, nonce); }
+                       if (nonce_hu_conv != null) { nonce_hu_conv.ptrs_to.AddLast(this); };
+                       this.nonce = nonce_hu_conv;
+               }
+       }
+       /** A OffersContext of type OutboundPayment */
+       public class OffersContext_OutboundPayment : OffersContext {
+               /**
+                * Payment ID used when creating a [`Refund`] or [`InvoiceRequest`].
+                * 
+                * [`Refund`]: crate::offers::refund::Refund
+                * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
+                */
+               public byte[] payment_id;
+               /**
+                * A nonce used for authenticating that a [`Bolt12Invoice`] is for a valid [`Refund`] or
+                * [`InvoiceRequest`] and for deriving their signing keys.
+                * 
+                * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
+                * [`Refund`]: crate::offers::refund::Refund
+                * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
+                */
+               public Nonce nonce;
+               /**
+                * Authentication code for the [`PaymentId`], which should be checked when the context is
+                * used with an [`InvoiceError`].
+                * 
+                * [`InvoiceError`]: crate::offers::invoice_error::InvoiceError
+                * 
+                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
+                */
+               public byte[] hmac;
+               internal OffersContext_OutboundPayment(long ptr) : base(null, ptr) {
+                       long payment_id = bindings.LDKOffersContext_OutboundPayment_get_payment_id(ptr);
+                       byte[] payment_id_conv = InternalUtils.decodeUint8Array(payment_id);
+                       this.payment_id = payment_id_conv;
+                       long nonce = bindings.LDKOffersContext_OutboundPayment_get_nonce(ptr);
+                       org.ldk.structs.Nonce nonce_hu_conv = null; if (nonce < 0 || nonce > 4096) { nonce_hu_conv = new org.ldk.structs.Nonce(null, nonce); }
+                       if (nonce_hu_conv != null) { nonce_hu_conv.ptrs_to.AddLast(this); };
+                       this.nonce = nonce_hu_conv;
+                       long hmac = bindings.LDKOffersContext_OutboundPayment_get_hmac(ptr);
+                       byte[] hmac_conv = InternalUtils.decodeUint8Array(hmac);
+                       this.hmac = hmac_conv;
+               }
+       }
+       /** A OffersContext of type InboundPayment */
+       public class OffersContext_InboundPayment : OffersContext {
+               /**
+                * The same payment hash as [`Bolt12Invoice::payment_hash`].
+                * 
+                * [`Bolt12Invoice::payment_hash`]: crate::offers::invoice::Bolt12Invoice::payment_hash
+                */
+               public byte[] payment_hash;
+               internal OffersContext_InboundPayment(long ptr) : base(null, ptr) {
+                       long payment_hash = bindings.LDKOffersContext_InboundPayment_get_payment_hash(ptr);
+                       byte[] payment_hash_conv = InternalUtils.decodeUint8Array(payment_hash);
+                       this.payment_hash = payment_hash_conv;
+               }
+       }
+       internal long clone_ptr() {
+               long ret = bindings.OffersContext_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the OffersContext
+        */
+       public OffersContext clone() {
+               long ret = bindings.OffersContext_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OffersContext ret_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new InvoiceRequest-variant OffersContext
+        */
+       public static OffersContext invoice_request(org.ldk.structs.Nonce nonce) {
+               long ret = bindings.OffersContext_invoice_request(nonce.ptr);
+               GC.KeepAlive(nonce);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OffersContext ret_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new OutboundPayment-variant OffersContext
+        */
+       public static OffersContext outbound_payment(byte[] payment_id, org.ldk.structs.Nonce nonce, byte[] hmac) {
+               long ret = bindings.OffersContext_outbound_payment(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)), nonce.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(hmac, 32)));
+               GC.KeepAlive(payment_id);
+               GC.KeepAlive(nonce);
+               GC.KeepAlive(hmac);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OffersContext ret_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new InboundPayment-variant OffersContext
+        */
+       public static OffersContext inbound_payment(byte[] payment_hash) {
+               long ret = bindings.OffersContext_inbound_payment(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
+               GC.KeepAlive(payment_hash);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OffersContext ret_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two OffersContexts contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public bool eq(org.ldk.structs.OffersContext b) {
+               bool ret = bindings.OffersContext_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is OffersContext)) return false;
+               return this.eq((OffersContext)o);
+       }
+       /**
+        * Serialize the OffersContext object into a byte array which can be read by OffersContext_read
+        */
+       public byte[] write() {
+               long ret = bindings.OffersContext_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a OffersContext from a byte array, created by OffersContext_write
+        */
+       public static Result_OffersContextDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.OffersContext_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OffersContextDecodeErrorZ ret_hu_conv = Result_OffersContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index f5e7b8b8abb6f3cc4c0754505df13d8c8b0370d8..7a9a97903ce4f263182a1ded9a8edb883750f5b1 100644 (file)
@@ -84,7 +84,6 @@ public class OffersMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OffersMessage ret_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -97,7 +96,6 @@ public class OffersMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OffersMessage ret_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -110,7 +108,6 @@ public class OffersMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OffersMessage ret_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 3197fcc6d05a587634a03380cb1064df9f896827..ef8921b3d866a990f8508b7b35ca605be06354cc 100644 (file)
@@ -16,14 +16,16 @@ public interface OffersMessageHandlerInterface {
         * The returned [`OffersMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
         * 
         * [`OnionMessenger`]: crate::onion_message::messenger::OnionMessenger
+        * 
+        * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       Option_OffersMessageZ handle_message(OffersMessage message);
+       Option_C2Tuple_OffersMessageResponseInstructionZZ handle_message(OffersMessage message, Option_OffersContextZ context, Responder responder);
        /**Releases any [`OffersMessage`]s that need to be sent.
         * 
         * Typically, this is used for messages initiating a payment flow rather than in response to
         * another message. The latter should use the return value of [`Self::handle_message`].
         */
-       ThreeTuple_OffersMessageDestinationBlindedPathZ[] release_pending_messages();
+       TwoTuple_OffersMessageMessageSendInstructionsZ[] release_pending_messages();
 }
 
 /**
@@ -45,19 +47,22 @@ public class OffersMessageHandler : CommonBase {
                internal LDKOffersMessageHandlerImpl(OffersMessageHandlerInterface arg, LDKOffersMessageHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
                private OffersMessageHandlerInterface arg;
                private LDKOffersMessageHandlerHolder impl_holder;
-               public long handle_message(long _message) {
+               public long handle_message(long _message, long _context, long _responder) {
                        org.ldk.structs.OffersMessage _message_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(_message);
                        if (_message_hu_conv != null) { _message_hu_conv.ptrs_to.AddLast(this); };
-                       Option_OffersMessageZ ret = arg.handle_message(_message_hu_conv);
+                       org.ldk.structs.Option_OffersContextZ _context_hu_conv = org.ldk.structs.Option_OffersContextZ.constr_from_ptr(_context);
+                       if (_context_hu_conv != null) { _context_hu_conv.ptrs_to.AddLast(this); };
+                       org.ldk.structs.Responder _responder_hu_conv = null; if (_responder < 0 || _responder > 4096) { _responder_hu_conv = new org.ldk.structs.Responder(null, _responder); }
+                       if (_responder_hu_conv != null) { _responder_hu_conv.ptrs_to.AddLast(this); };
+                       Option_C2Tuple_OffersMessageResponseInstructionZZ ret = arg.handle_message(_message_hu_conv, _context_hu_conv, _responder_hu_conv);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
-                       if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret); };
                        return result;
                }
                public long release_pending_messages() {
-                       ThreeTuple_OffersMessageDestinationBlindedPathZ[] ret = arg.release_pending_messages();
+                       TwoTuple_OffersMessageMessageSendInstructionsZ[] ret = arg.release_pending_messages();
                                GC.KeepAlive(arg);
-                       long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_49 => ret_conv_49.clone_ptr()));
+                       long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_48 => ret_conv_48.clone_ptr()));
                        return result;
                }
        }
@@ -81,15 +86,18 @@ public class OffersMessageHandler : CommonBase {
         * The returned [`OffersMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
         * 
         * [`OnionMessenger`]: crate::onion_message::messenger::OnionMessenger
+        * 
+        * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public Option_OffersMessageZ handle_message(org.ldk.structs.OffersMessage message) {
-               long ret = bindings.OffersMessageHandler_handle_message(this.ptr, message.ptr);
+       public Option_C2Tuple_OffersMessageResponseInstructionZZ handle_message(org.ldk.structs.OffersMessage message, org.ldk.structs.Option_OffersContextZ context, org.ldk.structs.Responder responder) {
+               long ret = bindings.OffersMessageHandler_handle_message(this.ptr, message.ptr, context.ptr, responder == null ? 0 : responder.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(message);
+               GC.KeepAlive(context);
+               GC.KeepAlive(responder);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_OffersMessageZ ret_hu_conv = org.ldk.structs.Option_OffersMessageZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(message); };
                return ret_hu_conv;
        }
 
@@ -99,20 +107,20 @@ public class OffersMessageHandler : CommonBase {
         * Typically, this is used for messages initiating a payment flow rather than in response to
         * another message. The latter should use the return value of [`Self::handle_message`].
         */
-       public ThreeTuple_OffersMessageDestinationBlindedPathZ[] release_pending_messages() {
+       public TwoTuple_OffersMessageMessageSendInstructionsZ[] release_pending_messages() {
                long ret = bindings.OffersMessageHandler_release_pending_messages(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_49_len = InternalUtils.getArrayLength(ret);
-               ThreeTuple_OffersMessageDestinationBlindedPathZ[] ret_conv_49_arr = new ThreeTuple_OffersMessageDestinationBlindedPathZ[ret_conv_49_len];
-               for (int x = 0; x < ret_conv_49_len; x++) {
-                       long ret_conv_49 = InternalUtils.getU64ArrayElem(ret, x);
-                       ThreeTuple_OffersMessageDestinationBlindedPathZ ret_conv_49_hu_conv = new ThreeTuple_OffersMessageDestinationBlindedPathZ(null, ret_conv_49);
-                       if (ret_conv_49_hu_conv != null) { ret_conv_49_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_49_arr[x] = ret_conv_49_hu_conv;
+               int ret_conv_48_len = InternalUtils.getArrayLength(ret);
+               TwoTuple_OffersMessageMessageSendInstructionsZ[] ret_conv_48_arr = new TwoTuple_OffersMessageMessageSendInstructionsZ[ret_conv_48_len];
+               for (int w = 0; w < ret_conv_48_len; w++) {
+                       long ret_conv_48 = InternalUtils.getU64ArrayElem(ret, w);
+                       TwoTuple_OffersMessageMessageSendInstructionsZ ret_conv_48_hu_conv = new TwoTuple_OffersMessageMessageSendInstructionsZ(null, ret_conv_48);
+                       if (ret_conv_48_hu_conv != null) { ret_conv_48_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_48_arr[w] = ret_conv_48_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_49_arr;
+               return ret_conv_48_arr;
        }
 
 }
index 5a809be7f55718c0c18fe387af8aa11ac02e5e88..09628369c66d05d74cff3680bdcb3fc5c7829f4a 100644 (file)
@@ -54,7 +54,6 @@ public class OnionMessage : CommonBase {
                bindings.OnionMessage_set_onion_routing_packet(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -67,7 +66,6 @@ public class OnionMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OnionMessage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OnionMessage(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(onion_routing_packet_arg); };
                return ret_hu_conv;
        }
 
index 61f863d956850b124652e198ec78d59db51bcec4..be89103a0adc19af6e238594071e80a090d6ca80 100644 (file)
@@ -13,6 +13,9 @@ public interface OnionMessageContentsInterface {
        /**Returns the TLV type identifying the message contents. MUST be >= 64.
         */
        long tlv_type();
+       /**Returns the message type
+        */
+       string msg_type();
        /**Serialize the object into a byte array
         */
        byte[] write();
@@ -43,6 +46,12 @@ public class OnionMessageContents : CommonBase {
                                GC.KeepAlive(arg);
                        return ret;
                }
+               public long msg_type() {
+                       string ret = arg.msg_type();
+                               GC.KeepAlive(arg);
+                       long result = InternalUtils.encodeString(ret);
+                       return result;
+               }
                public long write() {
                        byte[] ret = arg.write();
                                GC.KeepAlive(arg);
@@ -78,6 +87,17 @@ public class OnionMessageContents : CommonBase {
                return ret;
        }
 
+       /**
+        * Returns the message type
+        */
+       public string msg_type() {
+               long ret = bindings.OnionMessageContents_msg_type(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               string ret_conv = InternalUtils.decodeString(ret);
+               return ret_conv;
+       }
+
        /**
         * Serialize the object into a byte array
         */
index b75211eab851d2e19eed174c96d99d94b6ddacfb..5fa44ad232a733f292bec8c9003d5274ec275f56 100644 (file)
@@ -10,15 +10,6 @@ namespace org { namespace ldk { namespace structs {
 
 /** An implementation of OnionMessageHandler */
 public interface OnionMessageHandlerInterface {
-       /**Because much of the lightning network does not yet support forwarding onion messages, we
-        * may need to directly connect to a node which will forward a message for us. In such a case,
-        * this method will return the set of nodes which need connection by node_id and the
-        * corresponding socket addresses where they may accept incoming connections.
-        * 
-        * Thus, this method should be polled regularly to detect messages await such a direct
-        * connection.
-        */
-       TwoTuple_PublicKeyCVec_SocketAddressZZ[] get_and_clear_connections_needed();
        /**Handle an incoming `onion_message` message from the given peer.
         */
        void handle_onion_message(byte[] peer_node_id, OnionMessage msg);
@@ -74,12 +65,6 @@ public class OnionMessageHandler : CommonBase {
                internal LDKOnionMessageHandlerImpl(OnionMessageHandlerInterface arg, LDKOnionMessageHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
                private OnionMessageHandlerInterface arg;
                private LDKOnionMessageHandlerHolder impl_holder;
-               public long get_and_clear_connections_needed() {
-                       TwoTuple_PublicKeyCVec_SocketAddressZZ[] ret = arg.get_and_clear_connections_needed();
-                               GC.KeepAlive(arg);
-                       long result = InternalUtils.encodeUint64Array(InternalUtils.mapArray(ret, ret_conv_40 => ret_conv_40.clone_ptr()));
-                       return result;
-               }
                public void handle_onion_message(long _peer_node_id, long _msg) {
                        byte[] _peer_node_id_conv = InternalUtils.decodeUint8Array(_peer_node_id);
                        org.ldk.structs.OnionMessage _msg_hu_conv = null; if (_msg < 0 || _msg > 4096) { _msg_hu_conv = new org.ldk.structs.OnionMessage(null, _msg); }
@@ -137,31 +122,6 @@ public class OnionMessageHandler : CommonBase {
                return impl_holder.held;
        }
 
-       /**
-        * Because much of the lightning network does not yet support forwarding onion messages, we
-        * may need to directly connect to a node which will forward a message for us. In such a case,
-        * this method will return the set of nodes which need connection by node_id and the
-        * corresponding socket addresses where they may accept incoming connections.
-        * 
-        * Thus, this method should be polled regularly to detect messages await such a direct
-        * connection.
-        */
-       public TwoTuple_PublicKeyCVec_SocketAddressZZ[] get_and_clear_connections_needed() {
-               long ret = bindings.OnionMessageHandler_get_and_clear_connections_needed(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_40_len = InternalUtils.getArrayLength(ret);
-               TwoTuple_PublicKeyCVec_SocketAddressZZ[] ret_conv_40_arr = new TwoTuple_PublicKeyCVec_SocketAddressZZ[ret_conv_40_len];
-               for (int o = 0; o < ret_conv_40_len; o++) {
-                       long ret_conv_40 = InternalUtils.getU64ArrayElem(ret, o);
-                       TwoTuple_PublicKeyCVec_SocketAddressZZ ret_conv_40_hu_conv = new TwoTuple_PublicKeyCVec_SocketAddressZZ(null, ret_conv_40);
-                       if (ret_conv_40_hu_conv != null) { ret_conv_40_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_40_arr[o] = ret_conv_40_hu_conv;
-               }
-               bindings.free_buffer(ret);
-               return ret_conv_40_arr;
-       }
-
        /**
         * Handle an incoming `onion_message` message from the given peer.
         */
index 8c825a435ce67e62642610fa47c36090943e9162..390e93c89343c5e1ee97099ced5329c1074af6de 100644 (file)
@@ -63,7 +63,6 @@ public class OnionMessagePath : CommonBase {
                bindings.OnionMessagePath_set_destination(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -93,7 +92,6 @@ public class OnionMessagePath : CommonBase {
                bindings.OnionMessagePath_set_first_node_addresses(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -107,8 +105,6 @@ public class OnionMessagePath : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OnionMessagePath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OnionMessagePath(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(destination_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(first_node_addresses_arg); };
                return ret_hu_conv;
        }
 
index 56e89563d67954524fe09938fabd73d9e2cd3495..6a163c7664b80e1c3851ae3bf65b3696697d3991 100644 (file)
@@ -28,12 +28,13 @@ namespace org { namespace ldk { namespace structs {
  * ```
  * # extern crate bitcoin;
  * # use bitcoin::hashes::_export::_core::time::Duration;
- * # use bitcoin::hashes::hex::FromHex;
+ * # use bitcoin::hex::FromHex;
  * # use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey, self};
- * # use lightning::blinded_path::{BlindedPath, EmptyNodeIdLookUp};
+ * # use lightning::blinded_path::EmptyNodeIdLookUp;
+ * # use lightning::blinded_path::message::{BlindedMessagePath, MessageForwardNode, MessageContext};
  * # use lightning::sign::{EntropySource, KeysManager};
  * # use lightning::ln::peer_handler::IgnoringMessageHandler;
- * # use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath, OnionMessenger};
+ * # use lightning::onion_message::messenger::{Destination, MessageRouter, MessageSendInstructions, OnionMessagePath, OnionMessenger};
  * # use lightning::onion_message::packet::OnionMessageContents;
  * # use lightning::util::logger::{Logger, Record};
  * # use lightning::util::ser::{Writeable, Writer};
@@ -57,8 +58,8 @@ namespace org { namespace ldk { namespace structs {
  * #         })
  * #     }
  * #     fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
- * #         &self, _recipient: PublicKey, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
- * #     ) -> Result<Vec<BlindedPath>, ()> {
+ * #         &self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
+ * #     ) -> Result<Vec<BlindedMessagePath>, ()> {
  * #         unreachable!()
  * #     }
  * # }
@@ -75,11 +76,12 @@ namespace org { namespace ldk { namespace structs {
  * # let message_router = Arc::new(FakeMessageRouter {});
  * # let custom_message_handler = IgnoringMessageHandler {};
  * # let offers_message_handler = IgnoringMessageHandler {};
+ * # let async_payments_message_handler = IgnoringMessageHandler {};
  * Create the onion messenger. This must use the same `keys_manager` as is passed to your
  * ChannelManager.
  * let onion_messenger = OnionMessenger::new(
  * &keys_manager, &keys_manager, logger, &node_id_lookup, message_router,
- * &offers_message_handler, &custom_message_handler
+ * &offers_message_handler, &async_payments_message_handler, &custom_message_handler
  * );
  * 
  * # #[derive(Debug, Clone)]
@@ -95,23 +97,28 @@ namespace org { namespace ldk { namespace structs {
  * \t\t# let your_custom_message_type = 42;
  * \t\tyour_custom_message_type
  * \t}
+ * \tfn msg_type(&self) -> &'static str { \"YourCustomMessageType\" }
  * }
  * Send a custom onion message to a node id.
  * let destination = Destination::Node(destination_node_id);
- * let reply_path = None;
+ * let instructions = MessageSendInstructions::WithoutReplyPath { destination };
  * # let message = YourCustomMessage {};
- * onion_messenger.send_onion_message(message, destination, reply_path);
+ * onion_messenger.send_onion_message(message, instructions);
  * 
  * Create a blinded path to yourself, for someone to send an onion message to.
  * # let your_node_id = hop_node_id1;
- * let hops = [hop_node_id3, hop_node_id4, your_node_id];
- * let blinded_path = BlindedPath::new_for_message(&hops, &keys_manager, &secp_ctx).unwrap();
+ * let hops = [
+ * \tMessageForwardNode { node_id: hop_node_id3, short_channel_id: None },
+ * \tMessageForwardNode { node_id: hop_node_id4, short_channel_id: None },
+ * ];
+ * let context = MessageContext::Custom(Vec::new());
+ * let blinded_path = BlindedMessagePath::new(&hops, your_node_id, context, &keys_manager, &secp_ctx).unwrap();
  * 
  * Send a custom onion message to a blinded path.
  * let destination = Destination::BlindedPath(blinded_path);
- * let reply_path = None;
+ * let instructions = MessageSendInstructions::WithoutReplyPath { destination };
  * # let message = YourCustomMessage {};
- * onion_messenger.send_onion_message(message, destination, reply_path);
+ * onion_messenger.send_onion_message(message, instructions);
  * ```
  * 
  * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
@@ -127,14 +134,15 @@ public class OnionMessenger : CommonBase {
         * Constructs a new `OnionMessenger` to send, forward, and delegate received onion messages to
         * their respective handlers.
         */
-       public static OnionMessenger of(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.MessageRouter message_router, org.ldk.structs.OffersMessageHandler offers_handler, org.ldk.structs.CustomOnionMessageHandler custom_handler) {
-               long ret = bindings.OnionMessenger_new(entropy_source.ptr, node_signer.ptr, logger.ptr, node_id_lookup.ptr, message_router.ptr, offers_handler.ptr, custom_handler.ptr);
+       public static OnionMessenger of(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.MessageRouter message_router, org.ldk.structs.OffersMessageHandler offers_handler, org.ldk.structs.AsyncPaymentsMessageHandler async_payments_handler, org.ldk.structs.CustomOnionMessageHandler custom_handler) {
+               long ret = bindings.OnionMessenger_new(entropy_source.ptr, node_signer.ptr, logger.ptr, node_id_lookup.ptr, message_router.ptr, offers_handler.ptr, async_payments_handler.ptr, custom_handler.ptr);
                GC.KeepAlive(entropy_source);
                GC.KeepAlive(node_signer);
                GC.KeepAlive(logger);
                GC.KeepAlive(node_id_lookup);
                GC.KeepAlive(message_router);
                GC.KeepAlive(offers_handler);
+               GC.KeepAlive(async_payments_handler);
                GC.KeepAlive(custom_handler);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OnionMessenger ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OnionMessenger(null, ret); }
@@ -145,28 +153,137 @@ public class OnionMessenger : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_lookup); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(message_router); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(offers_handler); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(async_payments_handler); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(custom_handler); };
                return ret_hu_conv;
        }
 
        /**
-        * Sends an [`OnionMessage`] with the given `contents` to `destination`.
+        * Similar to [`Self::new`], but rather than dropping onion messages that are
+        * intended to be forwarded to offline peers, we will intercept them for
+        * later forwarding.
         * 
-        * See [`OnionMessenger`] for example usage.
+        * Interception flow:
+        * 1. If an onion message for an offline peer is received, `OnionMessenger` will
+        * generate an [`Event::OnionMessageIntercepted`]. Event handlers can
+        * then choose to persist this onion message for later forwarding, or drop
+        * it.
+        * 2. When the offline peer later comes back online, `OnionMessenger` will
+        * generate an [`Event::OnionMessagePeerConnected`]. Event handlers will
+        * then fetch all previously intercepted onion messages for this peer.
+        * 3. Once the stored onion messages are fetched, they can finally be
+        * forwarded to the now-online peer via [`Self::forward_onion_message`].
         * 
-        * Note that reply_path (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * # Note
+        * 
+        * LDK will not rate limit how many [`Event::OnionMessageIntercepted`]s
+        * are generated, so it is the caller's responsibility to limit how many
+        * onion messages are persisted and only persist onion messages for relevant
+        * peers.
         */
-       public Result_SendSuccessSendErrorZ send_onion_message(org.ldk.structs.OnionMessageContents contents, org.ldk.structs.Destination destination, org.ldk.structs.BlindedPath reply_path) {
-               long ret = bindings.OnionMessenger_send_onion_message(this.ptr, contents.ptr, destination.ptr, reply_path == null ? 0 : reply_path.ptr);
+       public static OnionMessenger new_with_offline_peer_interception(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.MessageRouter message_router, org.ldk.structs.OffersMessageHandler offers_handler, org.ldk.structs.AsyncPaymentsMessageHandler async_payments_handler, org.ldk.structs.CustomOnionMessageHandler custom_handler) {
+               long ret = bindings.OnionMessenger_new_with_offline_peer_interception(entropy_source.ptr, node_signer.ptr, logger.ptr, node_id_lookup.ptr, message_router.ptr, offers_handler.ptr, async_payments_handler.ptr, custom_handler.ptr);
+               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(node_signer);
+               GC.KeepAlive(logger);
+               GC.KeepAlive(node_id_lookup);
+               GC.KeepAlive(message_router);
+               GC.KeepAlive(offers_handler);
+               GC.KeepAlive(async_payments_handler);
+               GC.KeepAlive(custom_handler);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OnionMessenger ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OnionMessenger(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_lookup); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(message_router); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(offers_handler); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(async_payments_handler); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(custom_handler); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sends an [`OnionMessage`] based on its [`MessageSendInstructions`].
+        */
+       public Result_SendSuccessSendErrorZ send_onion_message(org.ldk.structs.OnionMessageContents contents, org.ldk.structs.MessageSendInstructions instructions) {
+               long ret = bindings.OnionMessenger_send_onion_message(this.ptr, contents.ptr, instructions.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(contents);
-               GC.KeepAlive(destination);
-               GC.KeepAlive(reply_path);
+               GC.KeepAlive(instructions);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SendSuccessSendErrorZ ret_hu_conv = Result_SendSuccessSendErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(contents); };
-               if (this != null) { this.ptrs_to.AddLast(destination); };
-               if (this != null) { this.ptrs_to.AddLast(reply_path); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Forwards an [`OnionMessage`] to `peer_node_id`. Useful if we initialized
+        * the [`OnionMessenger`] with [`Self::new_with_offline_peer_interception`]
+        * and want to forward a previously intercepted onion message to a peer that
+        * has just come online.
+        */
+       public Result_NoneSendErrorZ forward_onion_message(org.ldk.structs.OnionMessage message, byte[] peer_node_id) {
+               long ret = bindings.OnionMessenger_forward_onion_message(this.ptr, message.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peer_node_id, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(message);
+               GC.KeepAlive(peer_node_id);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneSendErrorZ ret_hu_conv = Result_NoneSendErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Handles the response to an [`OnionMessage`] based on its [`ResponseInstruction`],
+        * enqueueing any response for sending.
+        * 
+        * This function is useful for asynchronous handling of [`OnionMessage`]s.
+        * Handlers have the option to return `None`, indicating that no immediate response should be
+        * sent. Then, they can transfer the associated [`Responder`] to another task responsible for
+        * generating the response asynchronously. Subsequently, when the response is prepared and
+        * ready for sending, that task can invoke this method to enqueue the response for delivery.
+        */
+       public Result_SendSuccessSendErrorZ handle_onion_message_response(org.ldk.structs.OnionMessageContents response, org.ldk.structs.ResponseInstruction instructions) {
+               long ret = bindings.OnionMessenger_handle_onion_message_response(this.ptr, response.ptr, instructions.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(response);
+               GC.KeepAlive(instructions);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SendSuccessSendErrorZ ret_hu_conv = Result_SendSuccessSendErrorZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(response); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Gets a [`Future`] that completes when an event is available via
+        * [`EventsProvider::process_pending_events`] or [`Self::process_pending_events_async`].
+        * 
+        * Note that callbacks registered on the [`Future`] MUST NOT call back into this
+        * [`OnionMessenger`] and should instead register actions to be taken later.
+        * 
+        * [`EventsProvider::process_pending_events`]: crate::events::EventsProvider::process_pending_events
+        */
+       public Future get_update_future() {
+               long ret = bindings.OnionMessenger_get_update_future(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Future ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Future(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new EventsProvider which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned EventsProvider must be freed before this_arg is
+        */
+       public EventsProvider as_EventsProvider() {
+               long ret = bindings.OnionMessenger_as_EventsProvider(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               EventsProvider ret_hu_conv = new EventsProvider(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
 
index 418bc33ec4eecb822d180800f7aa4e2238838ae3..26ddf3764ee7b497a6383ef1902ceea902d7bc4f 100644 (file)
@@ -38,7 +38,6 @@ public class OpenChannel : CommonBase {
                bindings.OpenChannel_set_common_fields(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -88,7 +87,6 @@ public class OpenChannel : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OpenChannel ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OpenChannel(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(common_fields_arg); };
                return ret_hu_conv;
        }
 
index 73689945f329eefe0328f6e889ee87b1ddb068f4..aeaebcab42e843acf38cd220009cdd4660a89b7b 100644 (file)
@@ -36,7 +36,6 @@ public class OpenChannelV2 : CommonBase {
                bindings.OpenChannelV2_set_common_fields(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -126,7 +125,6 @@ public class OpenChannelV2 : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OpenChannelV2 ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OpenChannelV2(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(common_fields_arg); };
                return ret_hu_conv;
        }
 
index 79a86b9552ae26c619ea44bf40e132be414939ee..271036db4cde8d700b6d4a0463f531edeff58c18 100644 (file)
@@ -48,7 +48,6 @@ public class Option_APIErrorZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_APIErrorZ ret_hu_conv = org.ldk.structs.Option_APIErrorZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 21bfe561d582ee6e703a853e09696a08410d782c..c809a56935e00d6dd9f4c94ceb9ae952e5e4fd9f 100644 (file)
@@ -48,7 +48,6 @@ public class Option_AmountZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_AmountZ ret_hu_conv = org.ldk.structs.Option_AmountZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Option_C2Tuple_OffersMessageResponseInstructionZZ.cs b/c_sharp/src/org/ldk/structs/Option_C2Tuple_OffersMessageResponseInstructionZZ.cs
new file mode 100644 (file)
index 0000000..0f192e9
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An enum which can either contain a crate::c_types::derived::C2Tuple_OffersMessageResponseInstructionZ or not
+ */
+public class Option_C2Tuple_OffersMessageResponseInstructionZZ : CommonBase {
+       protected Option_C2Tuple_OffersMessageResponseInstructionZZ(object _dummy, long ptr) : base(ptr) { }
+       ~Option_C2Tuple_OffersMessageResponseInstructionZZ() {
+               if (ptr != 0) { bindings.COption_C2Tuple_OffersMessageResponseInstructionZZ_free(ptr); }
+       }
+
+       internal static Option_C2Tuple_OffersMessageResponseInstructionZZ constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Option_C2Tuple_OffersMessageResponseInstructionZZ_Some(ptr);
+                       case 1: return new Option_C2Tuple_OffersMessageResponseInstructionZZ_None(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Option_C2Tuple_OffersMessageResponseInstructionZZ of type Some */
+       public class Option_C2Tuple_OffersMessageResponseInstructionZZ_Some : Option_C2Tuple_OffersMessageResponseInstructionZZ {
+               public TwoTuple_OffersMessageResponseInstructionZ some;
+               internal Option_C2Tuple_OffersMessageResponseInstructionZZ_Some(long ptr) : base(null, ptr) {
+                       long some = bindings.LDKCOption_C2Tuple_OffersMessageResponseInstructionZZ_Some_get_some(ptr);
+                       TwoTuple_OffersMessageResponseInstructionZ some_hu_conv = new TwoTuple_OffersMessageResponseInstructionZ(null, some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /** A Option_C2Tuple_OffersMessageResponseInstructionZZ of type None */
+       public class Option_C2Tuple_OffersMessageResponseInstructionZZ_None : Option_C2Tuple_OffersMessageResponseInstructionZZ {
+               internal Option_C2Tuple_OffersMessageResponseInstructionZZ_None(long ptr) : base(null, ptr) {
+               }
+       }
+       /**
+        * Constructs a new COption_C2Tuple_OffersMessageResponseInstructionZZ containing a crate::c_types::derived::C2Tuple_OffersMessageResponseInstructionZ
+        */
+       public static Option_C2Tuple_OffersMessageResponseInstructionZZ some(org.ldk.structs.TwoTuple_OffersMessageResponseInstructionZ o) {
+               long ret = bindings.COption_C2Tuple_OffersMessageResponseInstructionZZ_some(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_C2Tuple_OffersMessageResponseInstructionZZ containing nothing
+        */
+       public static Option_C2Tuple_OffersMessageResponseInstructionZZ none() {
+               long ret = bindings.COption_C2Tuple_OffersMessageResponseInstructionZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.COption_C2Tuple_OffersMessageResponseInstructionZZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_C2Tuple_OffersMessageResponseInstructionZZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_C2Tuple_OffersMessageResponseInstructionZZ clone() {
+               long ret = bindings.COption_C2Tuple_OffersMessageResponseInstructionZZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OffersMessageResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.cs b/c_sharp/src/org/ldk/structs/Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.cs
new file mode 100644 (file)
index 0000000..f1346c5
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An enum which can either contain a crate::c_types::derived::C2Tuple_OnionMessageContentsResponseInstructionZ or not
+ */
+public class Option_C2Tuple_OnionMessageContentsResponseInstructionZZ : CommonBase {
+       protected Option_C2Tuple_OnionMessageContentsResponseInstructionZZ(object _dummy, long ptr) : base(ptr) { }
+       ~Option_C2Tuple_OnionMessageContentsResponseInstructionZZ() {
+               if (ptr != 0) { bindings.COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_free(ptr); }
+       }
+
+       internal static Option_C2Tuple_OnionMessageContentsResponseInstructionZZ constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Option_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some(ptr);
+                       case 1: return new Option_C2Tuple_OnionMessageContentsResponseInstructionZZ_None(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Option_C2Tuple_OnionMessageContentsResponseInstructionZZ of type Some */
+       public class Option_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some : Option_C2Tuple_OnionMessageContentsResponseInstructionZZ {
+               public TwoTuple_OnionMessageContentsResponseInstructionZ some;
+               internal Option_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some(long ptr) : base(null, ptr) {
+                       long some = bindings.LDKCOption_C2Tuple_OnionMessageContentsResponseInstructionZZ_Some_get_some(ptr);
+                       TwoTuple_OnionMessageContentsResponseInstructionZ some_hu_conv = new TwoTuple_OnionMessageContentsResponseInstructionZ(null, some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /** A Option_C2Tuple_OnionMessageContentsResponseInstructionZZ of type None */
+       public class Option_C2Tuple_OnionMessageContentsResponseInstructionZZ_None : Option_C2Tuple_OnionMessageContentsResponseInstructionZZ {
+               internal Option_C2Tuple_OnionMessageContentsResponseInstructionZZ_None(long ptr) : base(null, ptr) {
+               }
+       }
+       /**
+        * Constructs a new COption_C2Tuple_OnionMessageContentsResponseInstructionZZ containing a crate::c_types::derived::C2Tuple_OnionMessageContentsResponseInstructionZ
+        */
+       public static Option_C2Tuple_OnionMessageContentsResponseInstructionZZ some(org.ldk.structs.TwoTuple_OnionMessageContentsResponseInstructionZ o) {
+               long ret = bindings.COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_some(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_C2Tuple_OnionMessageContentsResponseInstructionZZ containing nothing
+        */
+       public static Option_C2Tuple_OnionMessageContentsResponseInstructionZZ none() {
+               long ret = bindings.COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_C2Tuple_OnionMessageContentsResponseInstructionZZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_C2Tuple_OnionMessageContentsResponseInstructionZZ clone() {
+               long ret = bindings.COption_C2Tuple_OnionMessageContentsResponseInstructionZZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_OnionMessageContentsResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.cs b/c_sharp/src/org/ldk/structs/Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.cs
new file mode 100644 (file)
index 0000000..637d054
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An enum which can either contain a crate::c_types::derived::C2Tuple_ReleaseHeldHtlcResponseInstructionZ or not
+ */
+public class Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ : CommonBase {
+       protected Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ(object _dummy, long ptr) : base(ptr) { }
+       ~Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ() {
+               if (ptr != 0) { bindings.COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_free(ptr); }
+       }
+
+       internal static Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some(ptr);
+                       case 1: return new Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_None(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ of type Some */
+       public class Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some : Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ {
+               public TwoTuple_ReleaseHeldHtlcResponseInstructionZ some;
+               internal Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some(long ptr) : base(null, ptr) {
+                       long some = bindings.LDKCOption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_Some_get_some(ptr);
+                       TwoTuple_ReleaseHeldHtlcResponseInstructionZ some_hu_conv = new TwoTuple_ReleaseHeldHtlcResponseInstructionZ(null, some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /** A Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ of type None */
+       public class Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_None : Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ {
+               internal Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_None(long ptr) : base(null, ptr) {
+               }
+       }
+       /**
+        * Constructs a new COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ containing a crate::c_types::derived::C2Tuple_ReleaseHeldHtlcResponseInstructionZ
+        */
+       public static Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ some(org.ldk.structs.TwoTuple_ReleaseHeldHtlcResponseInstructionZ o) {
+               long ret = bindings.COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_some(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ containing nothing
+        */
+       public static Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ none() {
+               long ret = bindings.COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ clone() {
+               long ret = bindings.COption_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index a85bb2fe7d3bf353d1ab92e5e5651a985c2c1898..912e631bfc95a6f56db4f2b9001313ebbfadc5ae 100644 (file)
@@ -48,6 +48,7 @@ public class Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 616239ee582535d76b99e2b02d9bf6dce594b9bd..dc5f7645f8f6681e90cc5a6d59dc4b6f68fdc86c 100644 (file)
@@ -55,7 +55,6 @@ public class Option_CVec_SocketAddressZZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_CVec_SocketAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_SocketAddressZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (SocketAddress o_conv_15 in o) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_conv_15); }; };
                return ret_hu_conv;
        }
 
index b446b58f0780e60b18e5bb832a5f35fb5551b955..e23a39f17174d1061edeb0508d8e51f3d8edc490 100644 (file)
@@ -48,7 +48,6 @@ public class Option_ClosureReasonZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_ClosureReasonZ ret_hu_conv = org.ldk.structs.Option_ClosureReasonZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 7dbb57ae38d261a3e81d59698a64ca4328cb009c..f9cd535d0b89f26041484f10473fecd1ff659c44 100644 (file)
@@ -48,7 +48,6 @@ public class Option_EventZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_EventZ ret_hu_conv = org.ldk.structs.Option_EventZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index b7ba1f9fa3e8c886bf718e7dc6fc441436e2bfa4..a16b1785fdb85f4e00e93439da5b6b7cff40dc7b 100644 (file)
@@ -48,7 +48,6 @@ public class Option_HTLCDestinationZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_HTLCDestinationZ ret_hu_conv = org.ldk.structs.Option_HTLCDestinationZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index d1857790347189f417b0013167b6cac1b132cf1b..961f7a2ad5ca114e243b4aeebd07aaabfdf1faf8 100644 (file)
@@ -48,7 +48,6 @@ public class Option_MaxDustHTLCExposureZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_MaxDustHTLCExposureZ ret_hu_conv = org.ldk.structs.Option_MaxDustHTLCExposureZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Option_MessageContextZ.cs b/c_sharp/src/org/ldk/structs/Option_MessageContextZ.cs
new file mode 100644 (file)
index 0000000..abb682f
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An enum which can either contain a crate::lightning::blinded_path::message::MessageContext or not
+ */
+public class Option_MessageContextZ : CommonBase {
+       protected Option_MessageContextZ(object _dummy, long ptr) : base(ptr) { }
+       ~Option_MessageContextZ() {
+               if (ptr != 0) { bindings.COption_MessageContextZ_free(ptr); }
+       }
+
+       internal static Option_MessageContextZ constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKCOption_MessageContextZ_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Option_MessageContextZ_Some(ptr);
+                       case 1: return new Option_MessageContextZ_None(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Option_MessageContextZ of type Some */
+       public class Option_MessageContextZ_Some : Option_MessageContextZ {
+               public MessageContext some;
+               internal Option_MessageContextZ_Some(long ptr) : base(null, ptr) {
+                       long some = bindings.LDKCOption_MessageContextZ_Some_get_some(ptr);
+                       org.ldk.structs.MessageContext some_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /** A Option_MessageContextZ of type None */
+       public class Option_MessageContextZ_None : Option_MessageContextZ {
+               internal Option_MessageContextZ_None(long ptr) : base(null, ptr) {
+               }
+       }
+       /**
+        * Constructs a new COption_MessageContextZ containing a crate::lightning::blinded_path::message::MessageContext
+        */
+       public static Option_MessageContextZ some(org.ldk.structs.MessageContext o) {
+               long ret = bindings.COption_MessageContextZ_some(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_MessageContextZ ret_hu_conv = org.ldk.structs.Option_MessageContextZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_MessageContextZ containing nothing
+        */
+       public static Option_MessageContextZ none() {
+               long ret = bindings.COption_MessageContextZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_MessageContextZ ret_hu_conv = org.ldk.structs.Option_MessageContextZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.COption_MessageContextZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_MessageContextZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_MessageContextZ clone() {
+               long ret = bindings.COption_MessageContextZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_MessageContextZ ret_hu_conv = org.ldk.structs.Option_MessageContextZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 1032ce1890ac6d88e75ce5cf05c479ac949d1077..10ca05825ebbe7b41be88f2d13e1715e038cdcea 100644 (file)
@@ -48,7 +48,6 @@ public class Option_MonitorEventZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_MonitorEventZ ret_hu_conv = org.ldk.structs.Option_MonitorEventZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index a5b3b4f17b82ca1722214d52d87b03e7e0a10885..ff05f1d9fdb2ba4e59db3bdef2596e09e67675c0 100644 (file)
@@ -48,7 +48,6 @@ public class Option_NetworkUpdateZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_NetworkUpdateZ ret_hu_conv = org.ldk.structs.Option_NetworkUpdateZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Option_NodeAnnouncementInfoZ.cs b/c_sharp/src/org/ldk/structs/Option_NodeAnnouncementInfoZ.cs
new file mode 100644 (file)
index 0000000..12b5d0f
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An enum which can either contain a crate::lightning::routing::gossip::NodeAnnouncementInfo or not
+ */
+public class Option_NodeAnnouncementInfoZ : CommonBase {
+       protected Option_NodeAnnouncementInfoZ(object _dummy, long ptr) : base(ptr) { }
+       ~Option_NodeAnnouncementInfoZ() {
+               if (ptr != 0) { bindings.COption_NodeAnnouncementInfoZ_free(ptr); }
+       }
+
+       internal static Option_NodeAnnouncementInfoZ constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKCOption_NodeAnnouncementInfoZ_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Option_NodeAnnouncementInfoZ_Some(ptr);
+                       case 1: return new Option_NodeAnnouncementInfoZ_None(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Option_NodeAnnouncementInfoZ of type Some */
+       public class Option_NodeAnnouncementInfoZ_Some : Option_NodeAnnouncementInfoZ {
+               public NodeAnnouncementInfo some;
+               internal Option_NodeAnnouncementInfoZ_Some(long ptr) : base(null, ptr) {
+                       long some = bindings.LDKCOption_NodeAnnouncementInfoZ_Some_get_some(ptr);
+                       org.ldk.structs.NodeAnnouncementInfo some_hu_conv = org.ldk.structs.NodeAnnouncementInfo.constr_from_ptr(some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /** A Option_NodeAnnouncementInfoZ of type None */
+       public class Option_NodeAnnouncementInfoZ_None : Option_NodeAnnouncementInfoZ {
+               internal Option_NodeAnnouncementInfoZ_None(long ptr) : base(null, ptr) {
+               }
+       }
+       /**
+        * Constructs a new COption_NodeAnnouncementInfoZ containing a crate::lightning::routing::gossip::NodeAnnouncementInfo
+        */
+       public static Option_NodeAnnouncementInfoZ some(org.ldk.structs.NodeAnnouncementInfo o) {
+               long ret = bindings.COption_NodeAnnouncementInfoZ_some(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_NodeAnnouncementInfoZ ret_hu_conv = org.ldk.structs.Option_NodeAnnouncementInfoZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_NodeAnnouncementInfoZ containing nothing
+        */
+       public static Option_NodeAnnouncementInfoZ none() {
+               long ret = bindings.COption_NodeAnnouncementInfoZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_NodeAnnouncementInfoZ ret_hu_conv = org.ldk.structs.Option_NodeAnnouncementInfoZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.COption_NodeAnnouncementInfoZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_NodeAnnouncementInfoZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_NodeAnnouncementInfoZ clone() {
+               long ret = bindings.COption_NodeAnnouncementInfoZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_NodeAnnouncementInfoZ ret_hu_conv = org.ldk.structs.Option_NodeAnnouncementInfoZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Option_OffersContextZ.cs b/c_sharp/src/org/ldk/structs/Option_OffersContextZ.cs
new file mode 100644 (file)
index 0000000..c006fae
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+/**
+ * An enum which can either contain a crate::lightning::blinded_path::message::OffersContext or not
+ */
+public class Option_OffersContextZ : CommonBase {
+       protected Option_OffersContextZ(object _dummy, long ptr) : base(ptr) { }
+       ~Option_OffersContextZ() {
+               if (ptr != 0) { bindings.COption_OffersContextZ_free(ptr); }
+       }
+
+       internal static Option_OffersContextZ constr_from_ptr(long ptr) {
+               long raw_ty = bindings.LDKCOption_OffersContextZ_ty_from_ptr(ptr);
+               switch (raw_ty) {
+                       case 0: return new Option_OffersContextZ_Some(ptr);
+                       case 1: return new Option_OffersContextZ_None(ptr);
+                       default:
+                               throw new ArgumentException("Impossible enum variant");
+               }
+       }
+
+       /** A Option_OffersContextZ of type Some */
+       public class Option_OffersContextZ_Some : Option_OffersContextZ {
+               public OffersContext some;
+               internal Option_OffersContextZ_Some(long ptr) : base(null, ptr) {
+                       long some = bindings.LDKCOption_OffersContextZ_Some_get_some(ptr);
+                       org.ldk.structs.OffersContext some_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /** A Option_OffersContextZ of type None */
+       public class Option_OffersContextZ_None : Option_OffersContextZ {
+               internal Option_OffersContextZ_None(long ptr) : base(null, ptr) {
+               }
+       }
+       /**
+        * Constructs a new COption_OffersContextZ containing a crate::lightning::blinded_path::message::OffersContext
+        */
+       public static Option_OffersContextZ some(org.ldk.structs.OffersContext o) {
+               long ret = bindings.COption_OffersContextZ_some(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_OffersContextZ ret_hu_conv = org.ldk.structs.Option_OffersContextZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_OffersContextZ containing nothing
+        */
+       public static Option_OffersContextZ none() {
+               long ret = bindings.COption_OffersContextZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_OffersContextZ ret_hu_conv = org.ldk.structs.Option_OffersContextZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.COption_OffersContextZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_OffersContextZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_OffersContextZ clone() {
+               long ret = bindings.COption_OffersContextZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_OffersContextZ ret_hu_conv = org.ldk.structs.Option_OffersContextZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Option_OffersMessageZ.cs b/c_sharp/src/org/ldk/structs/Option_OffersMessageZ.cs
deleted file mode 100644 (file)
index 88a2c1f..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-/**
- * An enum which can either contain a crate::lightning::onion_message::offers::OffersMessage or not
- */
-public class Option_OffersMessageZ : CommonBase {
-       protected Option_OffersMessageZ(object _dummy, long ptr) : base(ptr) { }
-       ~Option_OffersMessageZ() {
-               if (ptr != 0) { bindings.COption_OffersMessageZ_free(ptr); }
-       }
-
-       internal static Option_OffersMessageZ constr_from_ptr(long ptr) {
-               long raw_ty = bindings.LDKCOption_OffersMessageZ_ty_from_ptr(ptr);
-               switch (raw_ty) {
-                       case 0: return new Option_OffersMessageZ_Some(ptr);
-                       case 1: return new Option_OffersMessageZ_None(ptr);
-                       default:
-                               throw new ArgumentException("Impossible enum variant");
-               }
-       }
-
-       /** A Option_OffersMessageZ of type Some */
-       public class Option_OffersMessageZ_Some : Option_OffersMessageZ {
-               public OffersMessage some;
-               internal Option_OffersMessageZ_Some(long ptr) : base(null, ptr) {
-                       long some = bindings.LDKCOption_OffersMessageZ_Some_get_some(ptr);
-                       org.ldk.structs.OffersMessage some_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(some);
-                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.AddLast(this); };
-                       this.some = some_hu_conv;
-               }
-       }
-       /** A Option_OffersMessageZ of type None */
-       public class Option_OffersMessageZ_None : Option_OffersMessageZ {
-               internal Option_OffersMessageZ_None(long ptr) : base(null, ptr) {
-               }
-       }
-       /**
-        * Constructs a new COption_OffersMessageZ containing a crate::lightning::onion_message::offers::OffersMessage
-        */
-       public static Option_OffersMessageZ some(org.ldk.structs.OffersMessage o) {
-               long ret = bindings.COption_OffersMessageZ_some(o.ptr);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_OffersMessageZ ret_hu_conv = org.ldk.structs.Option_OffersMessageZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_OffersMessageZ containing nothing
-        */
-       public static Option_OffersMessageZ none() {
-               long ret = bindings.COption_OffersMessageZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_OffersMessageZ ret_hu_conv = org.ldk.structs.Option_OffersMessageZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.COption_OffersMessageZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_OffersMessageZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_OffersMessageZ clone() {
-               long ret = bindings.COption_OffersMessageZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_OffersMessageZ ret_hu_conv = org.ldk.structs.Option_OffersMessageZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-}
-} } }
index b16753b98c7b0e64037d32f1bc2ed3a4028eb1e9..a05bdfaafe404454f28cb3adcfd4704f90212986 100644 (file)
@@ -48,7 +48,6 @@ public class Option_PathFailureZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_PathFailureZ ret_hu_conv = org.ldk.structs.Option_PathFailureZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 115f523a25099017d312783b7e5d38d730687375..e7e7a5ae039bb7ed236391bb440740c271ef1e13 100644 (file)
@@ -48,7 +48,6 @@ public class Option_PaymentContextZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_PaymentContextZ ret_hu_conv = org.ldk.structs.Option_PaymentContextZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 2018812559b201ccc79d863435d88a851ae6c6e2..27b96b8cf49d241a08d1121f9e6334a1821fdc4e 100644 (file)
@@ -48,7 +48,6 @@ public class Option_QuantityZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_QuantityZ ret_hu_conv = org.ldk.structs.Option_QuantityZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Option_SecretKeyZ.cs b/c_sharp/src/org/ldk/structs/Option_SecretKeyZ.cs
deleted file mode 100644 (file)
index b716b0b..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-/**
- * An enum which can either contain a crate::c_types::SecretKey or not
- */
-public class Option_SecretKeyZ : CommonBase {
-       protected Option_SecretKeyZ(object _dummy, long ptr) : base(ptr) { }
-       ~Option_SecretKeyZ() {
-               if (ptr != 0) { bindings.COption_SecretKeyZ_free(ptr); }
-       }
-
-       internal static Option_SecretKeyZ constr_from_ptr(long ptr) {
-               long raw_ty = bindings.LDKCOption_SecretKeyZ_ty_from_ptr(ptr);
-               switch (raw_ty) {
-                       case 0: return new Option_SecretKeyZ_Some(ptr);
-                       case 1: return new Option_SecretKeyZ_None(ptr);
-                       default:
-                               throw new ArgumentException("Impossible enum variant");
-               }
-       }
-
-       /** A Option_SecretKeyZ of type Some */
-       public class Option_SecretKeyZ_Some : Option_SecretKeyZ {
-               public byte[] some;
-               internal Option_SecretKeyZ_Some(long ptr) : base(null, ptr) {
-                       long some = bindings.LDKCOption_SecretKeyZ_Some_get_some(ptr);
-                       byte[] some_conv = InternalUtils.decodeUint8Array(some);
-                       this.some = some_conv;
-               }
-       }
-       /** A Option_SecretKeyZ of type None */
-       public class Option_SecretKeyZ_None : Option_SecretKeyZ {
-               internal Option_SecretKeyZ_None(long ptr) : base(null, ptr) {
-               }
-       }
-       /**
-        * Constructs a new COption_SecretKeyZ containing a crate::c_types::SecretKey
-        */
-       public static Option_SecretKeyZ some(byte[] o) {
-               long ret = bindings.COption_SecretKeyZ_some(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(o, 32)));
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_SecretKeyZ containing nothing
-        */
-       public static Option_SecretKeyZ none() {
-               long ret = bindings.COption_SecretKeyZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.COption_SecretKeyZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_SecretKeyZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_SecretKeyZ clone() {
-               long ret = bindings.COption_SecretKeyZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-}
-} } }
index fda7b85ec95e19221cbb9c74b4910e379829cd39..bb4c266477f44549826ea0246b66deb6546ef5c4 100644 (file)
@@ -48,7 +48,6 @@ public class Option_SocketAddressZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_SocketAddressZ ret_hu_conv = org.ldk.structs.Option_SocketAddressZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index b70584232267592fe56c07103baa1dd67c9a9344..48f2dd71b63f072aeac560ce160ec54c54b027b3 100644 (file)
@@ -9,7 +9,7 @@ namespace org { namespace ldk { namespace structs {
 /**
  * A reference to a transaction output.
  * 
- * Differs from bitcoin::blockdata::transaction::OutPoint as the index is a u16 instead of u32
+ * Differs from bitcoin::transaction::OutPoint as the index is a u16 instead of u32
  * due to LN's restrictions on index values. Should reduce (possibly) unsafe conversions this way.
  */
 public class OutPoint : CommonBase {
index 05130de9f2e2866b8fa8eea440575f80a65402ff..d0e0a05379e6bab77104d5d09d73881b7d618006 100644 (file)
@@ -44,7 +44,6 @@ public class OutboundHTLCDetails : CommonBase {
                bindings.OutboundHTLCDetails_set_htlc_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -138,7 +137,6 @@ public class OutboundHTLCDetails : CommonBase {
                bindings.OutboundHTLCDetails_set_state(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -160,7 +158,6 @@ public class OutboundHTLCDetails : CommonBase {
                bindings.OutboundHTLCDetails_set_skimmed_fee_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -216,9 +213,6 @@ public class OutboundHTLCDetails : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OutboundHTLCDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OutboundHTLCDetails(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlc_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(state_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(skimmed_fee_msat_arg); };
                return ret_hu_conv;
        }
 
index d07d12459d00b3f4e919803443392df50a19ac38..585964a68e807a77b3d748404c34f9b9b7aabe51 100644 (file)
@@ -125,7 +125,6 @@ public class OutputSpendStatus : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OutputSpendStatus ret_hu_conv = org.ldk.structs.OutputSpendStatus.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(delayed_until_height); };
                return ret_hu_conv;
        }
 
index 932834176a06957acd67e969c56e0d97156bf3ce..572e7a4117fc692e8ed08b8be28c0062d7f90476 100644 (file)
@@ -108,8 +108,6 @@ public class OutputSpender : CommonBase {
                GC.KeepAlive(locktime);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TransactionNoneZ ret_hu_conv = Result_TransactionNoneZ.constr_from_ptr(ret);
-               foreach (SpendableOutputDescriptor descriptors_conv_27 in descriptors) { if (this != null) { this.ptrs_to.AddLast(descriptors_conv_27); }; };
-               if (this != null) { this.ptrs_to.AddLast(locktime); };
                return ret_hu_conv;
        }
 
index 1f2632e633af84464b896d6c037a1d32ffbb0949..dea5a194c095a2fb5e8aa02447da7b9dfa6db0da 100644 (file)
@@ -47,7 +47,6 @@ public class OutputSweeper : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OutputSweeper ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OutputSweeper(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(best_block); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(broadcaster); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fee_estimator); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(chain_data_source); };
@@ -86,9 +85,6 @@ public class OutputSweeper : CommonBase {
                GC.KeepAlive(delay_until_height);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
-               foreach (SpendableOutputDescriptor output_descriptors_conv_27 in output_descriptors) { if (this != null) { this.ptrs_to.AddLast(output_descriptors_conv_27); }; };
-               if (this != null) { this.ptrs_to.AddLast(channel_id); };
-               if (this != null) { this.ptrs_to.AddLast(delay_until_height); };
                return ret_hu_conv;
        }
 
index 0eed4d3764e71062880ef36ada39b1b2fee177f0..ed298afdd42fa33a47586101c14cc04c70320374 100644 (file)
@@ -70,7 +70,6 @@ public class ParseOrSemanticError : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ParseOrSemanticError ret_hu_conv = org.ldk.structs.ParseOrSemanticError.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 9bf441fdfa367f0a82ec65428790f9cb0ed92998..a900895e2b92bb89f26c154238a8f54692a04b18 100644 (file)
@@ -73,7 +73,6 @@ public class ParsedOnionMessageContents : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ParsedOnionMessageContents ret_hu_conv = org.ldk.structs.ParsedOnionMessageContents.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 3022b37d32e1d96179dcea4fc76480a59705b344..cf6f889a783536b4b776aa1fba444644832d211a 100644 (file)
@@ -42,7 +42,6 @@ public class Path : CommonBase {
                bindings.Path_set_hops(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_10 => val_conv_10.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (RouteHop val_conv_10 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_10); }; };
        }
 
        /**
@@ -68,7 +67,6 @@ public class Path : CommonBase {
                bindings.Path_set_blinded_tail(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -83,8 +81,6 @@ public class Path : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Path ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Path(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (RouteHop hops_arg_conv_10 in hops_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(hops_arg_conv_10); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(blinded_tail_arg); };
                return ret_hu_conv;
        }
 
index a3ca0ae6f6419269de4804b8088194c7ef147a10..eb2a925ffd72b5539b03975534992ce4930c5247 100644 (file)
@@ -85,7 +85,6 @@ public class PathFailure : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PathFailure ret_hu_conv = org.ldk.structs.PathFailure.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(err); };
                return ret_hu_conv;
        }
 
@@ -98,7 +97,6 @@ public class PathFailure : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PathFailure ret_hu_conv = org.ldk.structs.PathFailure.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_update); };
                return ret_hu_conv;
        }
 
index 2d72ccb3fcb8c7ff1783214a831cb14fede55cd4..a98de512171f9198fc9b987dccbeb2cf0313b976 100644 (file)
@@ -31,7 +31,7 @@ public class Payee : CommonBase {
                 * Aggregated routing info and blinded paths, for routing to the payee without knowing their
                 * node id.
                 */
-               public TwoTuple_BlindedPayInfoBlindedPathZ[] route_hints;
+               public BlindedPaymentPath[] route_hints;
                /**
                 * Features supported by the payee.
                 * 
@@ -43,16 +43,16 @@ public class Payee : CommonBase {
                public Bolt12InvoiceFeatures features;
                internal Payee_Blinded(long ptr) : base(null, ptr) {
                        long route_hints = bindings.LDKPayee_Blinded_get_route_hints(ptr);
-                       int route_hints_conv_37_len = InternalUtils.getArrayLength(route_hints);
-                       TwoTuple_BlindedPayInfoBlindedPathZ[] route_hints_conv_37_arr = new TwoTuple_BlindedPayInfoBlindedPathZ[route_hints_conv_37_len];
-                       for (int l = 0; l < route_hints_conv_37_len; l++) {
-                               long route_hints_conv_37 = InternalUtils.getU64ArrayElem(route_hints, l);
-                               TwoTuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_hu_conv = new TwoTuple_BlindedPayInfoBlindedPathZ(null, route_hints_conv_37);
-                               if (route_hints_conv_37_hu_conv != null) { route_hints_conv_37_hu_conv.ptrs_to.AddLast(this); };
-                               route_hints_conv_37_arr[l] = route_hints_conv_37_hu_conv;
+                       int route_hints_conv_20_len = InternalUtils.getArrayLength(route_hints);
+                       BlindedPaymentPath[] route_hints_conv_20_arr = new BlindedPaymentPath[route_hints_conv_20_len];
+                       for (int u = 0; u < route_hints_conv_20_len; u++) {
+                               long route_hints_conv_20 = InternalUtils.getU64ArrayElem(route_hints, u);
+                               org.ldk.structs.BlindedPaymentPath route_hints_conv_20_hu_conv = null; if (route_hints_conv_20 < 0 || route_hints_conv_20 > 4096) { route_hints_conv_20_hu_conv = new org.ldk.structs.BlindedPaymentPath(null, route_hints_conv_20); }
+                               if (route_hints_conv_20_hu_conv != null) { route_hints_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                               route_hints_conv_20_arr[u] = route_hints_conv_20_hu_conv;
                        }
                        bindings.free_buffer(route_hints);
-                       this.route_hints = route_hints_conv_37_arr;
+                       this.route_hints = route_hints_conv_20_arr;
                        long features = bindings.LDKPayee_Blinded_get_features(ptr);
                        org.ldk.structs.Bolt12InvoiceFeatures features_hu_conv = null; if (features < 0 || features > 4096) { features_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, features); }
                        if (features_hu_conv != null) { features_hu_conv.ptrs_to.AddLast(this); };
@@ -127,14 +127,13 @@ public class Payee : CommonBase {
        /**
         * Utility method to constructs a new Blinded-variant Payee
         */
-       public static Payee blinded(TwoTuple_BlindedPayInfoBlindedPathZ[] route_hints, org.ldk.structs.Bolt12InvoiceFeatures features) {
-               long ret = bindings.Payee_blinded(InternalUtils.encodeUint64Array(InternalUtils.mapArray(route_hints, route_hints_conv_37 => route_hints_conv_37.ptr)), features.ptr);
+       public static Payee blinded(BlindedPaymentPath[] route_hints, org.ldk.structs.Bolt12InvoiceFeatures features) {
+               long ret = bindings.Payee_blinded(InternalUtils.encodeUint64Array(InternalUtils.mapArray(route_hints, route_hints_conv_20 => route_hints_conv_20.ptr)), features.ptr);
                GC.KeepAlive(route_hints);
                GC.KeepAlive(features);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Payee ret_hu_conv = org.ldk.structs.Payee.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features); };
                return ret_hu_conv;
        }
 
@@ -150,8 +149,6 @@ public class Payee : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Payee ret_hu_conv = org.ldk.structs.Payee.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (RouteHint route_hints_conv_11 in route_hints) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(route_hints_conv_11); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features); };
                return ret_hu_conv;
        }
 
index 1512c1e48a2ff76c18acec957a01e1651fd3c60b..e450f03dc4facfa541e4117e1b4679159e7d0656 100644 (file)
@@ -6,10 +6,9 @@ using System;
 namespace org { namespace ldk { namespace structs {
 
 /**
- * The context of an inbound payment, which is included in a [`BlindedPath`] via [`ReceiveTlvs`]
- * and surfaced in [`PaymentPurpose`].
+ * The context of an inbound payment, which is included in a [`BlindedPaymentPath`] via
+ * [`ReceiveTlvs`] and surfaced in [`PaymentPurpose`].
  * 
- * [`BlindedPath`]: crate::blinded_path::BlindedPath
  * [`PaymentPurpose`]: crate::events::PaymentPurpose
  */
 public class PaymentContext : CommonBase {
@@ -86,7 +85,6 @@ public class PaymentContext : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentContext ret_hu_conv = org.ldk.structs.PaymentContext.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -99,7 +97,6 @@ public class PaymentContext : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentContext ret_hu_conv = org.ldk.structs.PaymentContext.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -112,7 +109,6 @@ public class PaymentContext : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentContext ret_hu_conv = org.ldk.structs.PaymentContext.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/PaymentForwardNode.cs b/c_sharp/src/org/ldk/structs/PaymentForwardNode.cs
new file mode 100644 (file)
index 0000000..6c165cd
--- /dev/null
@@ -0,0 +1,112 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * An intermediate node, its outbound channel, and relay parameters.
+ */
+public class PaymentForwardNode : CommonBase {
+       internal PaymentForwardNode(object _dummy, long ptr) : base(ptr) { }
+       ~PaymentForwardNode() {
+               if (ptr != 0) { bindings.PaymentForwardNode_free(ptr); }
+       }
+
+       /**
+        * The TLVs for this node's [`BlindedHop`], where the fee parameters contained within are also
+        * used for [`BlindedPayInfo`] construction.
+        */
+       public ForwardTlvs get_tlvs() {
+               long ret = bindings.PaymentForwardNode_get_tlvs(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ForwardTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardTlvs(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The TLVs for this node's [`BlindedHop`], where the fee parameters contained within are also
+        * used for [`BlindedPayInfo`] construction.
+        */
+       public void set_tlvs(org.ldk.structs.ForwardTlvs val) {
+               bindings.PaymentForwardNode_set_tlvs(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * This node's pubkey.
+        */
+       public byte[] get_node_id() {
+               long ret = bindings.PaymentForwardNode_get_node_id(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * This node's pubkey.
+        */
+       public void set_node_id(byte[] val) {
+               bindings.PaymentForwardNode_set_node_id(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The maximum value, in msat, that may be accepted by this node.
+        */
+       public long get_htlc_maximum_msat() {
+               long ret = bindings.PaymentForwardNode_get_htlc_maximum_msat(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The maximum value, in msat, that may be accepted by this node.
+        */
+       public void set_htlc_maximum_msat(long val) {
+               bindings.PaymentForwardNode_set_htlc_maximum_msat(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new PaymentForwardNode given each field
+        */
+       public static PaymentForwardNode of(org.ldk.structs.ForwardTlvs tlvs_arg, byte[] node_id_arg, long htlc_maximum_msat_arg) {
+               long ret = bindings.PaymentForwardNode_new(tlvs_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id_arg, 33)), htlc_maximum_msat_arg);
+               GC.KeepAlive(tlvs_arg);
+               GC.KeepAlive(node_id_arg);
+               GC.KeepAlive(htlc_maximum_msat_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentForwardNode(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.PaymentForwardNode_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the PaymentForwardNode
+        */
+       public PaymentForwardNode clone() {
+               long ret = bindings.PaymentForwardNode_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentForwardNode(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 8c7ffcfcd86c1b9cb148d52d64af192375aa14aa..0554b508efa0e9ee0ee283e3b11881b73be64f25 100644 (file)
@@ -34,7 +34,6 @@ public class PaymentParameters : CommonBase {
                bindings.PaymentParameters_set_payee(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -56,7 +55,6 @@ public class PaymentParameters : CommonBase {
                bindings.PaymentParameters_set_expiry_time(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -99,6 +97,26 @@ public class PaymentParameters : CommonBase {
                GC.KeepAlive(val);
        }
 
+       /**
+        * The maximum number of [`Path::hops`] in any returned path.
+        * Defaults to [`MAX_PATH_LENGTH_ESTIMATE`].
+        */
+       public byte get_max_path_length() {
+               byte ret = bindings.PaymentParameters_get_max_path_length(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The maximum number of [`Path::hops`] in any returned path.
+        * Defaults to [`MAX_PATH_LENGTH_ESTIMATE`].
+        */
+       public void set_max_path_length(byte val) {
+               bindings.PaymentParameters_set_max_path_length(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
        /**
         * Selects the maximum share of a channel's total capacity which will be sent over a channel,
         * as a power of 1/2. A higher value prefers to send the payment using more MPP parts whereas
@@ -196,20 +214,19 @@ public class PaymentParameters : CommonBase {
        /**
         * Constructs a new PaymentParameters given each field
         */
-       public static PaymentParameters of(org.ldk.structs.Payee payee_arg, org.ldk.structs.Option_u64Z expiry_time_arg, int max_total_cltv_expiry_delta_arg, byte max_path_count_arg, byte max_channel_saturation_power_of_half_arg, long[] previously_failed_channels_arg, long[] previously_failed_blinded_path_idxs_arg) {
-               long ret = bindings.PaymentParameters_new(payee_arg.ptr, expiry_time_arg.ptr, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, InternalUtils.encodeUint64Array(previously_failed_channels_arg), InternalUtils.encodeUint64Array(previously_failed_blinded_path_idxs_arg));
+       public static PaymentParameters of(org.ldk.structs.Payee payee_arg, org.ldk.structs.Option_u64Z expiry_time_arg, int max_total_cltv_expiry_delta_arg, byte max_path_count_arg, byte max_path_length_arg, byte max_channel_saturation_power_of_half_arg, long[] previously_failed_channels_arg, long[] previously_failed_blinded_path_idxs_arg) {
+               long ret = bindings.PaymentParameters_new(payee_arg.ptr, expiry_time_arg.ptr, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_path_length_arg, max_channel_saturation_power_of_half_arg, InternalUtils.encodeUint64Array(previously_failed_channels_arg), InternalUtils.encodeUint64Array(previously_failed_blinded_path_idxs_arg));
                GC.KeepAlive(payee_arg);
                GC.KeepAlive(expiry_time_arg);
                GC.KeepAlive(max_total_cltv_expiry_delta_arg);
                GC.KeepAlive(max_path_count_arg);
+               GC.KeepAlive(max_path_length_arg);
                GC.KeepAlive(max_channel_saturation_power_of_half_arg);
                GC.KeepAlive(previously_failed_channels_arg);
                GC.KeepAlive(previously_failed_blinded_path_idxs_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payee_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(expiry_time_arg); };
                return ret_hu_conv;
        }
 
@@ -341,8 +358,8 @@ public class PaymentParameters : CommonBase {
        /**
         * Creates parameters for paying to a blinded payee from the provided blinded route hints.
         */
-       public static PaymentParameters blinded(TwoTuple_BlindedPayInfoBlindedPathZ[] blinded_route_hints) {
-               long ret = bindings.PaymentParameters_blinded(InternalUtils.encodeUint64Array(InternalUtils.mapArray(blinded_route_hints, blinded_route_hints_conv_37 => blinded_route_hints_conv_37.ptr)));
+       public static PaymentParameters blinded(BlindedPaymentPath[] blinded_route_hints) {
+               long ret = bindings.PaymentParameters_blinded(InternalUtils.encodeUint64Array(InternalUtils.mapArray(blinded_route_hints, blinded_route_hints_conv_20 => blinded_route_hints_conv_20.ptr)));
                GC.KeepAlive(blinded_route_hints);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentParameters(null, ret); }
index 5fc9c02c7c4878ddec292dc8634997746448dcb6..0af95501c361549d54e2ea74b8f3faf0d0031319 100644 (file)
@@ -175,7 +175,6 @@ public class PaymentPurpose : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentPurpose ret_hu_conv = org.ldk.structs.PaymentPurpose.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_preimage); };
                return ret_hu_conv;
        }
 
@@ -190,8 +189,6 @@ public class PaymentPurpose : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentPurpose ret_hu_conv = org.ldk.structs.PaymentPurpose.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_preimage); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_context); };
                return ret_hu_conv;
        }
 
@@ -206,8 +203,6 @@ public class PaymentPurpose : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentPurpose ret_hu_conv = org.ldk.structs.PaymentPurpose.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_preimage); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_context); };
                return ret_hu_conv;
        }
 
index 03e37fe0d86d4c931144199b47d2e1b396799512..7e77cbb9f44e3e6d3b7b24fb704c27bc7c57338c 100644 (file)
@@ -143,7 +143,6 @@ public class PaymentSendFailure : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentSendFailure ret_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -168,7 +167,6 @@ public class PaymentSendFailure : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentSendFailure ret_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (APIError a_conv_10 in a) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a_conv_10); }; };
                return ret_hu_conv;
        }
 
@@ -194,7 +192,6 @@ public class PaymentSendFailure : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PaymentSendFailure ret_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(failed_paths_retry); };
                return ret_hu_conv;
        }
 
index c7d741bd1a49c4f33a05166c609baca135071ac2..c805dda60eaaff33ef371d17e241e211365df804 100644 (file)
@@ -43,24 +43,22 @@ public class PeeledOnion : CommonBase {
        /** A PeeledOnion of type Receive */
        public class PeeledOnion_Receive : PeeledOnion {
                public ParsedOnionMessageContents _0;
+               public Option_MessageContextZ _1;
                /**
                 * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
                 */
-               public byte[] _1;
-               /**
-                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
-                */
-               public BlindedPath _2;
+               public BlindedMessagePath _2;
                internal PeeledOnion_Receive(long ptr) : base(null, ptr) {
                        long _0 = bindings.LDKPeeledOnion_Receive_get__0(ptr);
                        org.ldk.structs.ParsedOnionMessageContents _0_hu_conv = org.ldk.structs.ParsedOnionMessageContents.constr_from_ptr(_0);
                        if (_0_hu_conv != null) { _0_hu_conv.ptrs_to.AddLast(this); };
                        this._0 = _0_hu_conv;
                        long _1 = bindings.LDKPeeledOnion_Receive_get__1(ptr);
-                       byte[] _1_conv = InternalUtils.decodeUint8Array(_1);
-                       this._1 = _1_conv;
+                       org.ldk.structs.Option_MessageContextZ _1_hu_conv = org.ldk.structs.Option_MessageContextZ.constr_from_ptr(_1);
+                       if (_1_hu_conv != null) { _1_hu_conv.ptrs_to.AddLast(this); };
+                       this._1 = _1_hu_conv;
                        long _2 = bindings.LDKPeeledOnion_Receive_get__2(ptr);
-                       org.ldk.structs.BlindedPath _2_hu_conv = null; if (_2 < 0 || _2 > 4096) { _2_hu_conv = new org.ldk.structs.BlindedPath(null, _2); }
+                       org.ldk.structs.BlindedMessagePath _2_hu_conv = null; if (_2 < 0 || _2 > 4096) { _2_hu_conv = new org.ldk.structs.BlindedMessagePath(null, _2); }
                        if (_2_hu_conv != null) { _2_hu_conv.ptrs_to.AddLast(this); };
                        this._2 = _2_hu_conv;
                }
@@ -93,16 +91,14 @@ public class PeeledOnion : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PeeledOnion ret_hu_conv = org.ldk.structs.PeeledOnion.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new Receive-variant PeeledOnion
         */
-       public static PeeledOnion receive(org.ldk.structs.ParsedOnionMessageContents a, byte[] b, org.ldk.structs.BlindedPath c) {
-               long ret = bindings.PeeledOnion_receive(a.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(b, 32)), c.ptr);
+       public static PeeledOnion receive(org.ldk.structs.ParsedOnionMessageContents a, org.ldk.structs.Option_MessageContextZ b, org.ldk.structs.BlindedMessagePath c) {
+               long ret = bindings.PeeledOnion_receive(a.ptr, b.ptr, c.ptr);
                GC.KeepAlive(a);
                GC.KeepAlive(b);
                GC.KeepAlive(c);
@@ -110,7 +106,6 @@ public class PeeledOnion : CommonBase {
                org.ldk.structs.PeeledOnion ret_hu_conv = org.ldk.structs.PeeledOnion.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
                return ret_hu_conv;
        }
 
index 3b9c6ffa9a40ba2c986e83da0c14c1d5be877cdf..e4df38091d871751c62134640ee157608a328f29 100644 (file)
@@ -68,7 +68,6 @@ public class PeerDetails : CommonBase {
                bindings.PeerDetails_set_socket_address(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -90,7 +89,6 @@ public class PeerDetails : CommonBase {
                bindings.PeerDetails_set_init_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -127,8 +125,6 @@ public class PeerDetails : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PeerDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PeerDetails(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(socket_address_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(init_features_arg); };
                return ret_hu_conv;
        }
 
index c2e1eeb0073b58bbaa1e6a09876fc86601a83fa7..b8edbedfb4749248e9736ffb128b152a32b0887d 100644 (file)
@@ -129,7 +129,6 @@ public class PeerManager : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_u8ZPeerHandleErrorZ ret_hu_conv = Result_CVec_u8ZPeerHandleErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(descriptor); };
-               if (this != null) { this.ptrs_to.AddLast(remote_network_address); };
                return ret_hu_conv;
        }
 
@@ -158,7 +157,6 @@ public class PeerManager : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NonePeerHandleErrorZ ret_hu_conv = Result_NonePeerHandleErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(descriptor); };
-               if (this != null) { this.ptrs_to.AddLast(remote_network_address); };
                return ret_hu_conv;
        }
 
@@ -312,7 +310,6 @@ public class PeerManager : CommonBase {
                GC.KeepAlive(rgb);
                GC.KeepAlive(alias);
                GC.KeepAlive(addresses);
-               foreach (SocketAddress addresses_conv_15 in addresses) { if (this != null) { this.ptrs_to.AddLast(addresses_conv_15); }; };
        }
 
 }
index f65bc0d0f849be46062c8df50a6d16e8d9e461c7..8305dd34b10533e1d1f772c8d934900c9a18a0fb 100644 (file)
@@ -35,7 +35,6 @@ public class PendingHTLCInfo : CommonBase {
                bindings.PendingHTLCInfo_set_routing(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -107,7 +106,6 @@ public class PendingHTLCInfo : CommonBase {
                bindings.PendingHTLCInfo_set_incoming_amt_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -203,7 +201,6 @@ public class PendingHTLCInfo : CommonBase {
                bindings.PendingHTLCInfo_set_skimmed_fee_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -221,9 +218,6 @@ public class PendingHTLCInfo : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PendingHTLCInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PendingHTLCInfo(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(routing_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(incoming_amt_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(skimmed_fee_msat_arg); };
                return ret_hu_conv;
        }
 
index b771b9002812eee20fcac7f50bf36556cbdedc59..acbf4cdfafd68910093c598f57a3949e14dbb4d1 100644 (file)
@@ -235,8 +235,6 @@ public class PendingHTLCRouting : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PendingHTLCRouting ret_hu_conv = org.ldk.structs.PendingHTLCRouting.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(onion_packet); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(blinded); };
                return ret_hu_conv;
        }
 
@@ -255,9 +253,6 @@ public class PendingHTLCRouting : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PendingHTLCRouting ret_hu_conv = org.ldk.structs.PendingHTLCRouting.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_data); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_metadata); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_context); };
                return ret_hu_conv;
        }
 
@@ -275,8 +270,6 @@ public class PendingHTLCRouting : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PendingHTLCRouting ret_hu_conv = org.ldk.structs.PendingHTLCRouting.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_data); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_metadata); };
                return ret_hu_conv;
        }
 
index 8ce9e19e9c76b3a36415e39c9f920cf9a173b137..0f07b87577afa66ef67787cab146db9b3bfaf9fd 100644 (file)
@@ -17,8 +17,9 @@ public interface PersistInterface {
         * channel's outpoint (and it is up to you to maintain a correct mapping between the outpoint
         * and the stored channel data). Note that you **must** persist every new monitor to disk.
         * 
-        * The `update_id` is used to identify this call to [`ChainMonitor::channel_monitor_updated`],
-        * if you return [`ChannelMonitorUpdateStatus::InProgress`].
+        * The [`ChannelMonitor::get_latest_update_id`] uniquely links this call to [`ChainMonitor::channel_monitor_updated`].
+        * For [`Persist::persist_new_channel`], it is only necessary to call [`ChainMonitor::channel_monitor_updated`]
+        * when you return [`ChannelMonitorUpdateStatus::InProgress`].
         * 
         * See [`Writeable::write`] on [`ChannelMonitor`] for writing out a `ChannelMonitor`
         * and [`ChannelMonitorUpdateStatus`] for requirements when returning errors.
@@ -26,7 +27,7 @@ public interface PersistInterface {
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         * [`Writeable::write`]: crate::util::ser::Writeable::write
         */
-       ChannelMonitorUpdateStatus persist_new_channel(OutPoint channel_funding_outpoint, ChannelMonitor data, MonitorUpdateId update_id);
+       ChannelMonitorUpdateStatus persist_new_channel(OutPoint channel_funding_outpoint, ChannelMonitor monitor);
        /**Update one channel's data. The provided [`ChannelMonitor`] has already applied the given
         * update.
         * 
@@ -43,7 +44,9 @@ public interface PersistInterface {
         * If an implementer chooses to persist the updates only, they need to make
         * sure that all the updates are applied to the `ChannelMonitors` *before
         * the set of channel monitors is given to the `ChannelManager`
-        * deserialization routine. See [`ChannelMonitor::update_monitor`] for
+        * deserialization routine. If there are any gaps in the persisted [`ChannelMonitorUpdate`]s,
+        * implementer can safely ignore [`ChannelMonitorUpdate`]s after the gap and load without them.
+        * See [`ChannelMonitor::update_monitor`] for
         * applying a monitor update to a monitor. If full `ChannelMonitors` are
         * persisted, then there is no need to persist individual updates.
         * 
@@ -52,8 +55,10 @@ public interface PersistInterface {
         * them in batches. The size of each monitor grows `O(number of state updates)`
         * whereas updates are small and `O(1)`.
         * 
-        * The `update_id` is used to identify this call to [`ChainMonitor::channel_monitor_updated`],
-        * if you return [`ChannelMonitorUpdateStatus::InProgress`].
+        * The [`ChannelMonitorUpdate::update_id`] or [`ChannelMonitor::get_latest_update_id`] uniquely
+        * links this call to [`ChainMonitor::channel_monitor_updated`].
+        * For [`Persist::update_persisted_channel`], it is only necessary to call [`ChainMonitor::channel_monitor_updated`]
+        * when a [`ChannelMonitorUpdate`] is provided and when you return [`ChannelMonitorUpdateStatus::InProgress`].
         * 
         * See [`Writeable::write`] on [`ChannelMonitor`] for writing out a `ChannelMonitor`,
         * [`Writeable::write`] on [`ChannelMonitorUpdate`] for writing out an update, and
@@ -61,9 +66,9 @@ public interface PersistInterface {
         * 
         * [`Writeable::write`]: crate::util::ser::Writeable::write
         * 
-        * Note that update (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Note that monitor_update (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       ChannelMonitorUpdateStatus update_persisted_channel(OutPoint channel_funding_outpoint, ChannelMonitorUpdate update, ChannelMonitor data, MonitorUpdateId update_id);
+       ChannelMonitorUpdateStatus update_persisted_channel(OutPoint channel_funding_outpoint, ChannelMonitorUpdate monitor_update, ChannelMonitor monitor);
        /**Prevents the channel monitor from being loaded on startup.
         * 
         * Archiving the data in a backup location (rather than deleting it fully) is useful for
@@ -105,7 +110,7 @@ public interface PersistInterface {
  * All calls should generally spawn a background task and immediately return
  * [`ChannelMonitorUpdateStatus::InProgress`]. Once the update completes,
  * [`ChainMonitor::channel_monitor_updated`] should be called with the corresponding
- * [`MonitorUpdateId`].
+ * [`ChannelMonitor::get_latest_update_id`] or [`ChannelMonitorUpdate::update_id`].
  * 
  * Note that unlike the direct [`chain::Watch`] interface,
  * [`ChainMonitor::channel_monitor_updated`] must be called once for *each* update which occurs.
@@ -143,25 +148,21 @@ public class Persist : CommonBase {
                internal LDKPersistImpl(PersistInterface arg, LDKPersistHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
                private PersistInterface arg;
                private LDKPersistHolder impl_holder;
-               public ChannelMonitorUpdateStatus persist_new_channel(long _channel_funding_outpoint, long _data, long _update_id) {
+               public ChannelMonitorUpdateStatus persist_new_channel(long _channel_funding_outpoint, long _monitor) {
                        org.ldk.structs.OutPoint _channel_funding_outpoint_hu_conv = null; if (_channel_funding_outpoint < 0 || _channel_funding_outpoint > 4096) { _channel_funding_outpoint_hu_conv = new org.ldk.structs.OutPoint(null, _channel_funding_outpoint); }
                        if (_channel_funding_outpoint_hu_conv != null) { _channel_funding_outpoint_hu_conv.ptrs_to.AddLast(this); };
-                       org.ldk.structs.ChannelMonitor _data_hu_conv = null; if (_data < 0 || _data > 4096) { _data_hu_conv = new org.ldk.structs.ChannelMonitor(null, _data); }
-                       org.ldk.structs.MonitorUpdateId _update_id_hu_conv = null; if (_update_id < 0 || _update_id > 4096) { _update_id_hu_conv = new org.ldk.structs.MonitorUpdateId(null, _update_id); }
-                       if (_update_id_hu_conv != null) { _update_id_hu_conv.ptrs_to.AddLast(this); };
-                       ChannelMonitorUpdateStatus ret = arg.persist_new_channel(_channel_funding_outpoint_hu_conv, _data_hu_conv, _update_id_hu_conv);
+                       org.ldk.structs.ChannelMonitor _monitor_hu_conv = null; if (_monitor < 0 || _monitor > 4096) { _monitor_hu_conv = new org.ldk.structs.ChannelMonitor(null, _monitor); }
+                       ChannelMonitorUpdateStatus ret = arg.persist_new_channel(_channel_funding_outpoint_hu_conv, _monitor_hu_conv);
                                GC.KeepAlive(arg);
                        return ret;
                }
-               public ChannelMonitorUpdateStatus update_persisted_channel(long _channel_funding_outpoint, long _update, long _data, long _update_id) {
+               public ChannelMonitorUpdateStatus update_persisted_channel(long _channel_funding_outpoint, long _monitor_update, long _monitor) {
                        org.ldk.structs.OutPoint _channel_funding_outpoint_hu_conv = null; if (_channel_funding_outpoint < 0 || _channel_funding_outpoint > 4096) { _channel_funding_outpoint_hu_conv = new org.ldk.structs.OutPoint(null, _channel_funding_outpoint); }
                        if (_channel_funding_outpoint_hu_conv != null) { _channel_funding_outpoint_hu_conv.ptrs_to.AddLast(this); };
-                       org.ldk.structs.ChannelMonitorUpdate _update_hu_conv = null; if (_update < 0 || _update > 4096) { _update_hu_conv = new org.ldk.structs.ChannelMonitorUpdate(null, _update); }
-                       if (_update_hu_conv != null) { _update_hu_conv.ptrs_to.AddLast(this); };
-                       org.ldk.structs.ChannelMonitor _data_hu_conv = null; if (_data < 0 || _data > 4096) { _data_hu_conv = new org.ldk.structs.ChannelMonitor(null, _data); }
-                       org.ldk.structs.MonitorUpdateId _update_id_hu_conv = null; if (_update_id < 0 || _update_id > 4096) { _update_id_hu_conv = new org.ldk.structs.MonitorUpdateId(null, _update_id); }
-                       if (_update_id_hu_conv != null) { _update_id_hu_conv.ptrs_to.AddLast(this); };
-                       ChannelMonitorUpdateStatus ret = arg.update_persisted_channel(_channel_funding_outpoint_hu_conv, _update_hu_conv, _data_hu_conv, _update_id_hu_conv);
+                       org.ldk.structs.ChannelMonitorUpdate _monitor_update_hu_conv = null; if (_monitor_update < 0 || _monitor_update > 4096) { _monitor_update_hu_conv = new org.ldk.structs.ChannelMonitorUpdate(null, _monitor_update); }
+                       if (_monitor_update_hu_conv != null) { _monitor_update_hu_conv.ptrs_to.AddLast(this); };
+                       org.ldk.structs.ChannelMonitor _monitor_hu_conv = null; if (_monitor < 0 || _monitor > 4096) { _monitor_hu_conv = new org.ldk.structs.ChannelMonitor(null, _monitor); }
+                       ChannelMonitorUpdateStatus ret = arg.update_persisted_channel(_channel_funding_outpoint_hu_conv, _monitor_update_hu_conv, _monitor_hu_conv);
                                GC.KeepAlive(arg);
                        return ret;
                }
@@ -193,8 +194,9 @@ public class Persist : CommonBase {
         * channel's outpoint (and it is up to you to maintain a correct mapping between the outpoint
         * and the stored channel data). Note that you **must** persist every new monitor to disk.
         * 
-        * The `update_id` is used to identify this call to [`ChainMonitor::channel_monitor_updated`],
-        * if you return [`ChannelMonitorUpdateStatus::InProgress`].
+        * The [`ChannelMonitor::get_latest_update_id`] uniquely links this call to [`ChainMonitor::channel_monitor_updated`].
+        * For [`Persist::persist_new_channel`], it is only necessary to call [`ChainMonitor::channel_monitor_updated`]
+        * when you return [`ChannelMonitorUpdateStatus::InProgress`].
         * 
         * See [`Writeable::write`] on [`ChannelMonitor`] for writing out a `ChannelMonitor`
         * and [`ChannelMonitorUpdateStatus`] for requirements when returning errors.
@@ -202,15 +204,12 @@ public class Persist : CommonBase {
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         * [`Writeable::write`]: crate::util::ser::Writeable::write
         */
-       public ChannelMonitorUpdateStatus persist_new_channel(org.ldk.structs.OutPoint channel_funding_outpoint, org.ldk.structs.ChannelMonitor data, org.ldk.structs.MonitorUpdateId update_id) {
-               ChannelMonitorUpdateStatus ret = bindings.Persist_persist_new_channel(this.ptr, channel_funding_outpoint.ptr, data.ptr, update_id.ptr);
+       public ChannelMonitorUpdateStatus persist_new_channel(org.ldk.structs.OutPoint channel_funding_outpoint, org.ldk.structs.ChannelMonitor monitor) {
+               ChannelMonitorUpdateStatus ret = bindings.Persist_persist_new_channel(this.ptr, channel_funding_outpoint.ptr, monitor.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(channel_funding_outpoint);
-               GC.KeepAlive(data);
-               GC.KeepAlive(update_id);
-               if (this != null) { this.ptrs_to.AddLast(channel_funding_outpoint); };
-               if (this != null) { this.ptrs_to.AddLast(data); };
-               if (this != null) { this.ptrs_to.AddLast(update_id); };
+               GC.KeepAlive(monitor);
+               if (this != null) { this.ptrs_to.AddLast(monitor); };
                return ret;
        }
 
@@ -231,7 +230,9 @@ public class Persist : CommonBase {
         * If an implementer chooses to persist the updates only, they need to make
         * sure that all the updates are applied to the `ChannelMonitors` *before
         * the set of channel monitors is given to the `ChannelManager`
-        * deserialization routine. See [`ChannelMonitor::update_monitor`] for
+        * deserialization routine. If there are any gaps in the persisted [`ChannelMonitorUpdate`]s,
+        * implementer can safely ignore [`ChannelMonitorUpdate`]s after the gap and load without them.
+        * See [`ChannelMonitor::update_monitor`] for
         * applying a monitor update to a monitor. If full `ChannelMonitors` are
         * persisted, then there is no need to persist individual updates.
         * 
@@ -240,8 +241,10 @@ public class Persist : CommonBase {
         * them in batches. The size of each monitor grows `O(number of state updates)`
         * whereas updates are small and `O(1)`.
         * 
-        * The `update_id` is used to identify this call to [`ChainMonitor::channel_monitor_updated`],
-        * if you return [`ChannelMonitorUpdateStatus::InProgress`].
+        * The [`ChannelMonitorUpdate::update_id`] or [`ChannelMonitor::get_latest_update_id`] uniquely
+        * links this call to [`ChainMonitor::channel_monitor_updated`].
+        * For [`Persist::update_persisted_channel`], it is only necessary to call [`ChainMonitor::channel_monitor_updated`]
+        * when a [`ChannelMonitorUpdate`] is provided and when you return [`ChannelMonitorUpdateStatus::InProgress`].
         * 
         * See [`Writeable::write`] on [`ChannelMonitor`] for writing out a `ChannelMonitor`,
         * [`Writeable::write`] on [`ChannelMonitorUpdate`] for writing out an update, and
@@ -249,19 +252,15 @@ public class Persist : CommonBase {
         * 
         * [`Writeable::write`]: crate::util::ser::Writeable::write
         * 
-        * Note that update (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Note that monitor_update (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public ChannelMonitorUpdateStatus update_persisted_channel(org.ldk.structs.OutPoint channel_funding_outpoint, org.ldk.structs.ChannelMonitorUpdate update, org.ldk.structs.ChannelMonitor data, org.ldk.structs.MonitorUpdateId update_id) {
-               ChannelMonitorUpdateStatus ret = bindings.Persist_update_persisted_channel(this.ptr, channel_funding_outpoint.ptr, update == null ? 0 : update.ptr, data.ptr, update_id.ptr);
+       public ChannelMonitorUpdateStatus update_persisted_channel(org.ldk.structs.OutPoint channel_funding_outpoint, org.ldk.structs.ChannelMonitorUpdate monitor_update, org.ldk.structs.ChannelMonitor monitor) {
+               ChannelMonitorUpdateStatus ret = bindings.Persist_update_persisted_channel(this.ptr, channel_funding_outpoint.ptr, monitor_update == null ? 0 : monitor_update.ptr, monitor.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(channel_funding_outpoint);
-               GC.KeepAlive(update);
-               GC.KeepAlive(data);
-               GC.KeepAlive(update_id);
-               if (this != null) { this.ptrs_to.AddLast(channel_funding_outpoint); };
-               if (this != null) { this.ptrs_to.AddLast(update); };
-               if (this != null) { this.ptrs_to.AddLast(data); };
-               if (this != null) { this.ptrs_to.AddLast(update_id); };
+               GC.KeepAlive(monitor_update);
+               GC.KeepAlive(monitor);
+               if (this != null) { this.ptrs_to.AddLast(monitor); };
                return ret;
        }
 
@@ -275,7 +274,6 @@ public class Persist : CommonBase {
                bindings.Persist_archive_persisted_channel(this.ptr, channel_funding_outpoint.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(channel_funding_outpoint);
-               if (this != null) { this.ptrs_to.AddLast(channel_funding_outpoint); };
        }
 
 }
index 1ff361256b7c74bb6e015445b45ff3a86c2be48c..ff96c479d53d82bd233985df03a621d61d205c37 100644 (file)
@@ -43,7 +43,6 @@ public class PhantomRouteHints : CommonBase {
                bindings.PhantomRouteHints_set_channels(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_16 => val_conv_16.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (ChannelDetails val_conv_16 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_16); }; };
        }
 
        /**
@@ -97,7 +96,6 @@ public class PhantomRouteHints : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.PhantomRouteHints ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PhantomRouteHints(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (ChannelDetails channels_arg_conv_16 in channels_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channels_arg_conv_16); }; };
                return ret_hu_conv;
        }
 
index 8c6f7f70fd5b62a84b82dc55addd2f223e5e0310..ffceb14e427ac159101e0c5d5e9cf7dc151b7e61 100644 (file)
@@ -73,7 +73,6 @@ public class PrivateRoute : CommonBase {
                GC.KeepAlive(hops);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PrivateRouteCreationErrorZ ret_hu_conv = Result_PrivateRouteCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(hops); };
                return ret_hu_conv;
        }
 
@@ -86,7 +85,7 @@ public class PrivateRoute : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteHint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteHint(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
index bffdc449889002acad776367e156a9f7c5758e4a..a7f31b5b4c67b1aca7039818a75da9821845a607 100644 (file)
@@ -57,7 +57,6 @@ public class ProbabilisticScorer : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ProbabilisticScorer ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ProbabilisticScorer(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(decay_params); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                return ret_hu_conv;
@@ -215,7 +214,6 @@ public class ProbabilisticScorer : CommonBase {
                GC.KeepAlive(arg_c);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ProbabilisticScorerDecodeErrorZ ret_hu_conv = Result_ProbabilisticScorerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_a); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_b); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_c); };
                return ret_hu_conv;
index f22e31df6a3dc0c78f4c3f7f4185ce47ff7ca477..d1287bed13a330a825d51fe25f34918c9cbf84a6 100644 (file)
@@ -471,7 +471,6 @@ public class ProbabilisticScoringFeeParameters : CommonBase {
                bindings.ProbabilisticScoringFeeParameters_add_banned_from_list(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(node_ids, node_ids_conv_8 => node_ids_conv_8.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(node_ids);
-               foreach (NodeId node_ids_conv_8 in node_ids) { if (this != null) { this.ptrs_to.AddLast(node_ids_conv_8); }; };
        }
 
        /**
index fec1e3e7a84cd1dd0e1466df7abdab2e88351c8c..a34c3da469c798a2156b942d5207d9ebd5c0e968 100644 (file)
@@ -80,7 +80,6 @@ public class ProbeSendFailure : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ProbeSendFailure ret_hu_conv = org.ldk.structs.ProbeSendFailure.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 02731cf2e8a2338ff1c01c8a14d084111f323cb8..d16d293d0300ac292cbcaf25b3be6d6f78f10253 100644 (file)
@@ -80,7 +80,6 @@ public class RapidGossipSync : CommonBase {
                GC.KeepAlive(current_time_unix);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_u32GraphSyncErrorZ ret_hu_conv = Result_u32GraphSyncErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(current_time_unix); };
                return ret_hu_conv;
        }
 
index 8f3d81119b871030e7df5827d018e0da33839b27..be74e1cecd82fbed3722e5e10a3fcc875bf47797 100644 (file)
@@ -38,7 +38,6 @@ public class RawBolt11Invoice : CommonBase {
                bindings.RawBolt11Invoice_set_data(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
index c63b214ad230c47da9efa99d8a4453eae5d27b60..7f0fb869488b9db0ded8a903c487d1c27542836c 100644 (file)
@@ -34,7 +34,6 @@ public class RawDataPart : CommonBase {
                bindings.RawDataPart_set_timestamp(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
index bccc65e3b89213fe5a55f0f04daaff2085403fd3..a76c5f84bc90691c446793dc56cff9491b1458b2 100644 (file)
@@ -55,7 +55,6 @@ public class ReceiveTlvs : CommonBase {
                bindings.ReceiveTlvs_set_payment_constraints(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -77,7 +76,6 @@ public class ReceiveTlvs : CommonBase {
                bindings.ReceiveTlvs_set_payment_context(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -91,8 +89,6 @@ public class ReceiveTlvs : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.ReceiveTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReceiveTlvs(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_constraints_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_context_arg); };
                return ret_hu_conv;
        }
 
index 0a258bae374b852c6860b405d1d7b2814693affa..0651692cca99bc162b1d61a3401522e9f5ddb93f 100644 (file)
@@ -163,7 +163,6 @@ public class RecentPaymentDetails : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RecentPaymentDetails ret_hu_conv = org.ldk.structs.RecentPaymentDetails.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_hash); };
                return ret_hu_conv;
        }
 
index cec4805fb5b7dff29f18e0cdd29373e55cdae092..e3ae80a8d48d3936b7156e6defc8513b30d7aa90 100644 (file)
@@ -57,7 +57,6 @@ public class RecipientOnionFields : CommonBase {
                bindings.RecipientOnionFields_set_payment_secret(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -103,7 +102,6 @@ public class RecipientOnionFields : CommonBase {
                bindings.RecipientOnionFields_set_payment_metadata(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        internal long clone_ptr() {
@@ -212,7 +210,7 @@ public class RecipientOnionFields : CommonBase {
                GC.KeepAlive(custom_tlvs);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RecipientOnionFieldsNoneZ ret_hu_conv = Result_RecipientOnionFieldsNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
index 3720b7bed2d129c6434715d737802e6f1476ff80..0d3ae571c256f6460017dfa47ede780764faea57 100644 (file)
@@ -91,7 +91,6 @@ public class Record : CommonBase {
                bindings.Record_set_channel_id(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -172,14 +171,41 @@ public class Record : CommonBase {
                GC.KeepAlive(val);
        }
 
+       /**
+        * The payment hash.
+        * 
+        * Note that this is only filled in for logs pertaining to a specific payment, and will be
+        * `None` for logs which are not directly related to a payment.
+        */
+       public Option_ThirtyTwoBytesZ get_payment_hash() {
+               long ret = bindings.Record_get_payment_hash(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The payment hash.
+        * 
+        * Note that this is only filled in for logs pertaining to a specific payment, and will be
+        * `None` for logs which are not directly related to a payment.
+        */
+       public void set_payment_hash(org.ldk.structs.Option_ThirtyTwoBytesZ val) {
+               bindings.Record_set_payment_hash(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
        /**
         * Constructs a new Record given each field
         * 
         * Note that peer_id_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         * Note that channel_id_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static Record of(Level level_arg, byte[] peer_id_arg, org.ldk.structs.ChannelId channel_id_arg, string args_arg, string module_path_arg, string file_arg, int line_arg) {
-               long ret = bindings.Record_new(level_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peer_id_arg, 33)), channel_id_arg == null ? 0 : channel_id_arg.ptr, InternalUtils.encodeString(args_arg), InternalUtils.encodeString(module_path_arg), InternalUtils.encodeString(file_arg), line_arg);
+       public static Record of(Level level_arg, byte[] peer_id_arg, org.ldk.structs.ChannelId channel_id_arg, string args_arg, string module_path_arg, string file_arg, int line_arg, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash_arg) {
+               long ret = bindings.Record_new(level_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(peer_id_arg, 33)), channel_id_arg == null ? 0 : channel_id_arg.ptr, InternalUtils.encodeString(args_arg), InternalUtils.encodeString(module_path_arg), InternalUtils.encodeString(file_arg), line_arg, payment_hash_arg.ptr);
                GC.KeepAlive(level_arg);
                GC.KeepAlive(peer_id_arg);
                GC.KeepAlive(channel_id_arg);
@@ -187,10 +213,10 @@ public class Record : CommonBase {
                GC.KeepAlive(module_path_arg);
                GC.KeepAlive(file_arg);
                GC.KeepAlive(line_arg);
+               GC.KeepAlive(payment_hash_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Record ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Record(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index f9a20662c1ee503370f298c633193314de378897..e447a08a7b9f6afadf1bf7566bbbe76a3231e26b 100644 (file)
@@ -105,20 +105,20 @@ public class Refund : CommonBase {
         * Paths to the sender originating from publicly reachable nodes. Blinded paths provide sender
         * privacy by obfuscating its node id.
         */
-       public BlindedPath[] paths() {
+       public BlindedMessagePath[] paths() {
                long ret = bindings.Refund_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
@@ -221,6 +221,17 @@ public class Refund : CommonBase {
        public override int GetHashCode() {
                return (int)this.hash();
        }
+       /**
+        * Read a Refund from a byte array, created by Refund_write
+        */
+       public static Result_RefundDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Refund_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RefundDecodeErrorZ ret_hu_conv = Result_RefundDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Serialize the Refund object into a byte array which can be read by Refund_read
         */
index 1aae450627247472398ab6f03b11a63ad2086d3a..d93a96b6aea694d49875eb001a1fbe32fc48e5d9 100644 (file)
@@ -68,26 +68,29 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
         * different payer id for each refund, assuming a different nonce is used.  Otherwise, the
         * provided `node_id` is used for the payer id.
         * 
-        * Also, sets the metadata when [`RefundBuilder::build`] is called such that it can be used to
-        * verify that an [`InvoiceRequest`] was produced for the refund given an [`ExpandedKey`].
+        * Also, sets the metadata when [`RefundBuilder::build`] is called such that it can be used by
+        * [`Bolt12Invoice::verify_using_metadata`] to determine if the invoice was produced for the
+        * refund given an [`ExpandedKey`]. However, if [`RefundBuilder::path`] is called, then the
+        * metadata must be included in each [`BlindedMessagePath`] instead. In this case, use
+        * [`Bolt12Invoice::verify_using_payer_data`].
         * 
         * The `payment_id` is encrypted in the metadata and should be unique. This ensures that only
         * one invoice will be paid for the refund and that payments can be uniquely identified.
         * 
-        * [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
+        * [`Bolt12Invoice::verify_using_metadata`]: crate::offers::invoice::Bolt12Invoice::verify_using_metadata
+        * [`Bolt12Invoice::verify_using_payer_data`]: crate::offers::invoice::Bolt12Invoice::verify_using_payer_data
         * [`ExpandedKey`]: crate::ln::inbound_payment::ExpandedKey
         */
-       public static Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ deriving_payer_id(byte[] node_id, org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.EntropySource entropy_source, long amount_msats, byte[] payment_id) {
-               long ret = bindings.RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id, 33)), expanded_key.ptr, entropy_source.ptr, amount_msats, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
+       public static Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ deriving_payer_id(byte[] node_id, org.ldk.structs.ExpandedKey expanded_key, org.ldk.structs.Nonce nonce, long amount_msats, byte[] payment_id) {
+               long ret = bindings.RefundMaybeWithDerivedMetadataBuilder_deriving_payer_id(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(node_id, 33)), expanded_key.ptr, nonce.ptr, amount_msats, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_id, 32)));
                GC.KeepAlive(node_id);
                GC.KeepAlive(expanded_key);
-               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(nonce);
                GC.KeepAlive(amount_msats);
                GC.KeepAlive(payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ ret_hu_conv = Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(expanded_key); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                return ret_hu_conv;
        }
 
@@ -100,7 +103,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                bindings.RefundMaybeWithDerivedMetadataBuilder_description(this.ptr, InternalUtils.encodeString(description));
                GC.KeepAlive(this);
                GC.KeepAlive(description);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -113,7 +116,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                bindings.RefundMaybeWithDerivedMetadataBuilder_absolute_expiry(this.ptr, absolute_expiry);
                GC.KeepAlive(this);
                GC.KeepAlive(absolute_expiry);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -125,7 +128,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                bindings.RefundMaybeWithDerivedMetadataBuilder_issuer(this.ptr, InternalUtils.encodeString(issuer));
                GC.KeepAlive(this);
                GC.KeepAlive(issuer);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -135,12 +138,11 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
         * Successive calls to this method will add another blinded path. Caller is responsible for not
         * adding duplicate paths.
         */
-       public void path(org.ldk.structs.BlindedPath path) {
+       public void path(org.ldk.structs.BlindedMessagePath path) {
                bindings.RefundMaybeWithDerivedMetadataBuilder_path(this.ptr, path.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(path);
-               if (this != null) { this.ptrs_to.AddLast(path); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -153,7 +155,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                bindings.RefundMaybeWithDerivedMetadataBuilder_chain(this.ptr, network);
                GC.KeepAlive(this);
                GC.KeepAlive(network);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -171,7 +173,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                bindings.RefundMaybeWithDerivedMetadataBuilder_quantity(this.ptr, quantity);
                GC.KeepAlive(this);
                GC.KeepAlive(quantity);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -183,7 +185,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                bindings.RefundMaybeWithDerivedMetadataBuilder_payer_note(this.ptr, InternalUtils.encodeString(payer_note));
                GC.KeepAlive(this);
                GC.KeepAlive(payer_note);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
        }
 
        /**
@@ -194,7 +196,7 @@ public class RefundMaybeWithDerivedMetadataBuilder : CommonBase {
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundBolt12SemanticErrorZ ret_hu_conv = Result_RefundBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/ReleaseHeldHtlc.cs b/c_sharp/src/org/ldk/structs/ReleaseHeldHtlc.cs
new file mode 100644 (file)
index 0000000..df630d8
--- /dev/null
@@ -0,0 +1,106 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * Releases the HTLC corresponding to an inbound [`HeldHtlcAvailable`] message.
+ */
+public class ReleaseHeldHtlc : CommonBase {
+       internal ReleaseHeldHtlc(object _dummy, long ptr) : base(ptr) { }
+       ~ReleaseHeldHtlc() {
+               if (ptr != 0) { bindings.ReleaseHeldHtlc_free(ptr); }
+       }
+
+       /**
+        * Used to release the HTLC held upstream if it matches the corresponding
+        * [`HeldHtlcAvailable::payment_release_secret`].
+        */
+       public byte[] get_payment_release_secret() {
+               long ret = bindings.ReleaseHeldHtlc_get_payment_release_secret(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Used to release the HTLC held upstream if it matches the corresponding
+        * [`HeldHtlcAvailable::payment_release_secret`].
+        */
+       public void set_payment_release_secret(byte[] val) {
+               bindings.ReleaseHeldHtlc_set_payment_release_secret(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 32)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new ReleaseHeldHtlc given each field
+        */
+       public static ReleaseHeldHtlc of(byte[] payment_release_secret_arg) {
+               long ret = bindings.ReleaseHeldHtlc_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_release_secret_arg, 32)));
+               GC.KeepAlive(payment_release_secret_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReleaseHeldHtlc ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReleaseHeldHtlc(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.ReleaseHeldHtlc_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ReleaseHeldHtlc
+        */
+       public ReleaseHeldHtlc clone() {
+               long ret = bindings.ReleaseHeldHtlc_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReleaseHeldHtlc ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReleaseHeldHtlc(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new OnionMessageContents which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned OnionMessageContents must be freed before this_arg is
+        */
+       public OnionMessageContents as_OnionMessageContents() {
+               long ret = bindings.ReleaseHeldHtlc_as_OnionMessageContents(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               OnionMessageContents ret_hu_conv = new OnionMessageContents(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the ReleaseHeldHtlc object into a byte array which can be read by ReleaseHeldHtlc_read
+        */
+       public byte[] write() {
+               long ret = bindings.ReleaseHeldHtlc_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a ReleaseHeldHtlc from a byte array, created by ReleaseHeldHtlc_write
+        */
+       public static Result_ReleaseHeldHtlcDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.ReleaseHeldHtlc_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReleaseHeldHtlcDecodeErrorZ ret_hu_conv = Result_ReleaseHeldHtlcDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/ReplayEvent.cs b/c_sharp/src/org/ldk/structs/ReplayEvent.cs
new file mode 100644 (file)
index 0000000..f6e91b3
--- /dev/null
@@ -0,0 +1,52 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * An error type that may be returned to LDK in order to safely abort event handling if it can't
+ * currently succeed (e.g., due to a persistence failure).
+ * 
+ * Depending on the type, LDK may ensure the event is persisted and will eventually be replayed.
+ * Please refer to the documentation of each [`Event`] variant for more details.
+ */
+public class ReplayEvent : CommonBase {
+       internal ReplayEvent(object _dummy, long ptr) : base(ptr) { }
+       ~ReplayEvent() {
+               if (ptr != 0) { bindings.ReplayEvent_free(ptr); }
+       }
+
+       /**
+        * Constructs a new ReplayEvent given each field
+        */
+       public static ReplayEvent of() {
+               long ret = bindings.ReplayEvent_new();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReplayEvent ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReplayEvent(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.ReplayEvent_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ReplayEvent
+        */
+       public ReplayEvent clone() {
+               long ret = bindings.ReplayEvent_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReplayEvent ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReplayEvent(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Responder.cs b/c_sharp/src/org/ldk/structs/Responder.cs
new file mode 100644 (file)
index 0000000..37f7814
--- /dev/null
@@ -0,0 +1,108 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * The `Responder` struct creates an appropriate [`ResponseInstruction`] for responding to a
+ * message.
+ */
+public class Responder : CommonBase {
+       internal Responder(object _dummy, long ptr) : base(ptr) { }
+       ~Responder() {
+               if (ptr != 0) { bindings.Responder_free(ptr); }
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.Responder_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the Responder
+        */
+       public Responder clone() {
+               long ret = bindings.Responder_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Responder ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Responder(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two Responders contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.Responder b) {
+               bool ret = bindings.Responder_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is Responder)) return false;
+               return this.eq((Responder)o);
+       }
+       /**
+        * Serialize the Responder object into a byte array which can be read by Responder_read
+        */
+       public byte[] write() {
+               long ret = bindings.Responder_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a Responder from a byte array, created by Responder_write
+        */
+       public static Result_ResponderDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Responder_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ResponderDecodeErrorZ ret_hu_conv = Result_ResponderDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a [`ResponseInstruction`] for responding without including a reply path.
+        * 
+        * Use when the recipient doesn't need to send back a reply to us.
+        */
+       public ResponseInstruction respond() {
+               long ret = bindings.Responder_respond(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ResponseInstruction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ResponseInstruction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a [`ResponseInstruction`] for responding including a reply path.
+        * 
+        * Use when the recipient needs to send back a reply to us.
+        */
+       public ResponseInstruction respond_with_reply_path(org.ldk.structs.MessageContext context) {
+               long ret = bindings.Responder_respond_with_reply_path(this.ptr, context.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(context);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ResponseInstruction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ResponseInstruction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               ;
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/ResponseInstruction.cs b/c_sharp/src/org/ldk/structs/ResponseInstruction.cs
new file mode 100644 (file)
index 0000000..0ff51c7
--- /dev/null
@@ -0,0 +1,37 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * Instructions for how and where to send the response to an onion message.
+ */
+public class ResponseInstruction : CommonBase {
+       internal ResponseInstruction(object _dummy, long ptr) : base(ptr) { }
+       ~ResponseInstruction() {
+               if (ptr != 0) { bindings.ResponseInstruction_free(ptr); }
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.ResponseInstruction_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ResponseInstruction
+        */
+       public ResponseInstruction clone() {
+               long ret = bindings.ResponseInstruction_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ResponseInstruction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ResponseInstruction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 1009ab387992dc742a08624e9c8c0d8eac559b62..34a6bb14b3cab753a280f6abafd8c1b3de13e15a 100644 (file)
@@ -46,7 +46,6 @@ public class Result_AcceptChannelDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_AcceptChannelDecodeErrorZ ret_hu_conv = Result_AcceptChannelDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_AcceptChannelDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_AcceptChannelDecodeErrorZ ret_hu_conv = Result_AcceptChannelDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 9adb37a23cd68d8e9ffa17c53c12806b5e4dad18..e57c0dae59be489f43972f1632e6c5192b048f17 100644 (file)
@@ -46,7 +46,6 @@ public class Result_AcceptChannelV2DecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_AcceptChannelV2DecodeErrorZ ret_hu_conv = Result_AcceptChannelV2DecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_AcceptChannelV2DecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_AcceptChannelV2DecodeErrorZ ret_hu_conv = Result_AcceptChannelV2DecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ff6be21d29ba7b9418c00f4746a205d59c677ad2..e032190adb8a803a2d7a3c58b814cba93a7afd70 100644 (file)
@@ -46,7 +46,6 @@ public class Result_AnnouncementSignaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_AnnouncementSignaturesDecodeErrorZ ret_hu_conv = Result_AnnouncementSignaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_AnnouncementSignaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_AnnouncementSignaturesDecodeErrorZ ret_hu_conv = Result_AnnouncementSignaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_AsyncPaymentsMessageDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_AsyncPaymentsMessageDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..a449826
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_AsyncPaymentsMessageDecodeErrorZ : CommonBase {
+       Result_AsyncPaymentsMessageDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_AsyncPaymentsMessageDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_AsyncPaymentsMessageDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_AsyncPaymentsMessageDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_AsyncPaymentsMessageDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_AsyncPaymentsMessageDecodeErrorZ_OK : Result_AsyncPaymentsMessageDecodeErrorZ {
+               public readonly AsyncPaymentsMessage res;
+               internal Result_AsyncPaymentsMessageDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.AsyncPaymentsMessage res_hu_conv = org.ldk.structs.AsyncPaymentsMessage.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_AsyncPaymentsMessageDecodeErrorZ_Err : Result_AsyncPaymentsMessageDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_AsyncPaymentsMessageDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_AsyncPaymentsMessageDecodeErrorZ in the success state.
+        */
+       public static Result_AsyncPaymentsMessageDecodeErrorZ ok(org.ldk.structs.AsyncPaymentsMessage o) {
+               long ret = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_AsyncPaymentsMessageDecodeErrorZ ret_hu_conv = Result_AsyncPaymentsMessageDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_AsyncPaymentsMessageDecodeErrorZ in the error state.
+        */
+       public static Result_AsyncPaymentsMessageDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_AsyncPaymentsMessageDecodeErrorZ ret_hu_conv = Result_AsyncPaymentsMessageDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_AsyncPaymentsMessageDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_AsyncPaymentsMessageDecodeErrorZ clone() {
+               long ret = bindings.CResult_AsyncPaymentsMessageDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_AsyncPaymentsMessageDecodeErrorZ ret_hu_conv = Result_AsyncPaymentsMessageDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 1a63cd0149a5ff13ac55a87fa71dd234deaa600c..56f175edc6df5346c15c8c33c1685cc6b56fc6c6 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BestBlockDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BestBlockDecodeErrorZ ret_hu_conv = Result_BestBlockDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BestBlockDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BestBlockDecodeErrorZ ret_hu_conv = Result_BestBlockDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 3381ec30f85415217d2fadc03165b565333ca775..264f5ecb365f5477390a6414a259bd063cd0c54f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BigSizeDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BigSizeDecodeErrorZ ret_hu_conv = Result_BigSizeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BigSizeDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BigSizeDecodeErrorZ ret_hu_conv = Result_BigSizeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6350877860e8b5968f0fd6ddd63bb08ea9406a97..b990637fb4415d79b11fde844cfea23078c4c598 100644 (file)
@@ -54,7 +54,6 @@ public class Result_BlindedFailureDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedFailureDecodeErrorZ ret_hu_conv = Result_BlindedFailureDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ea0e13bd716455992a4070f4b69b2d65f835d18d..c9ae53681aac7cd2f49febb43b046c6cc0a8cf35 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BlindedForwardDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedForwardDecodeErrorZ ret_hu_conv = Result_BlindedForwardDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BlindedForwardDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedForwardDecodeErrorZ ret_hu_conv = Result_BlindedForwardDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6affe1128741510a59ce68a07dcd0df7ba529b91..f81fcb644c615ab40c7bc7960831dd63aa68cd2b 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BlindedHopDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedHopDecodeErrorZ ret_hu_conv = Result_BlindedHopDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BlindedHopDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedHopDecodeErrorZ ret_hu_conv = Result_BlindedHopDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 8cc73f14ac91b671d6505bc530ef9eff496cfca2..abd4cfe438e42b9df20bff9aca0e23ae52ff097f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BlindedHopFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedHopFeaturesDecodeErrorZ ret_hu_conv = Result_BlindedHopFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BlindedHopFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedHopFeaturesDecodeErrorZ ret_hu_conv = Result_BlindedHopFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_BlindedMessagePathDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_BlindedMessagePathDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..0fcbfa9
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_BlindedMessagePathDecodeErrorZ : CommonBase {
+       Result_BlindedMessagePathDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_BlindedMessagePathDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_BlindedMessagePathDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_BlindedMessagePathDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_BlindedMessagePathDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_BlindedMessagePathDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_BlindedMessagePathDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_BlindedMessagePathDecodeErrorZ_OK : Result_BlindedMessagePathDecodeErrorZ {
+               public readonly BlindedMessagePath res;
+               internal Result_BlindedMessagePathDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_BlindedMessagePathDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.BlindedMessagePath res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.BlindedMessagePath(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_BlindedMessagePathDecodeErrorZ_Err : Result_BlindedMessagePathDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_BlindedMessagePathDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_BlindedMessagePathDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_BlindedMessagePathDecodeErrorZ in the success state.
+        */
+       public static Result_BlindedMessagePathDecodeErrorZ ok(org.ldk.structs.BlindedMessagePath o) {
+               long ret = bindings.CResult_BlindedMessagePathDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathDecodeErrorZ ret_hu_conv = Result_BlindedMessagePathDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_BlindedMessagePathDecodeErrorZ in the error state.
+        */
+       public static Result_BlindedMessagePathDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_BlindedMessagePathDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathDecodeErrorZ ret_hu_conv = Result_BlindedMessagePathDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_BlindedMessagePathDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_BlindedMessagePathDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_BlindedMessagePathDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_BlindedMessagePathDecodeErrorZ clone() {
+               long ret = bindings.CResult_BlindedMessagePathDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathDecodeErrorZ ret_hu_conv = Result_BlindedMessagePathDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_BlindedMessagePathNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_BlindedMessagePathNoneZ.cs
new file mode 100644 (file)
index 0000000..cace601
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_BlindedMessagePathNoneZ : CommonBase {
+       Result_BlindedMessagePathNoneZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_BlindedMessagePathNoneZ() {
+               if (ptr != 0) { bindings.CResult_BlindedMessagePathNoneZ_free(ptr); }
+       }
+
+       internal static Result_BlindedMessagePathNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_BlindedMessagePathNoneZ_is_ok(ptr)) {
+                       return new Result_BlindedMessagePathNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_BlindedMessagePathNoneZ_Err(null, ptr);
+               }
+       }
+       public class Result_BlindedMessagePathNoneZ_OK : Result_BlindedMessagePathNoneZ {
+               public readonly BlindedMessagePath res;
+               internal Result_BlindedMessagePathNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_BlindedMessagePathNoneZ_get_ok(ptr);
+                       org.ldk.structs.BlindedMessagePath res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.BlindedMessagePath(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_BlindedMessagePathNoneZ_Err : Result_BlindedMessagePathNoneZ {
+               internal Result_BlindedMessagePathNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       /**
+        * Creates a new CResult_BlindedMessagePathNoneZ in the success state.
+        */
+       public static Result_BlindedMessagePathNoneZ ok(org.ldk.structs.BlindedMessagePath o) {
+               long ret = bindings.CResult_BlindedMessagePathNoneZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathNoneZ ret_hu_conv = Result_BlindedMessagePathNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_BlindedMessagePathNoneZ in the error state.
+        */
+       public static Result_BlindedMessagePathNoneZ err() {
+               long ret = bindings.CResult_BlindedMessagePathNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathNoneZ ret_hu_conv = Result_BlindedMessagePathNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_BlindedMessagePathNoneZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_BlindedMessagePathNoneZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_BlindedMessagePathNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_BlindedMessagePathNoneZ clone() {
+               long ret = bindings.CResult_BlindedMessagePathNoneZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedMessagePathNoneZ ret_hu_conv = Result_BlindedMessagePathNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_BlindedPathDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_BlindedPathDecodeErrorZ.cs
deleted file mode 100644 (file)
index 7932b6b..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_BlindedPathDecodeErrorZ : CommonBase {
-       Result_BlindedPathDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_BlindedPathDecodeErrorZ() {
-               if (ptr != 0) { bindings.CResult_BlindedPathDecodeErrorZ_free(ptr); }
-       }
-
-       internal static Result_BlindedPathDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_BlindedPathDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_BlindedPathDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_BlindedPathDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public class Result_BlindedPathDecodeErrorZ_OK : Result_BlindedPathDecodeErrorZ {
-               public readonly BlindedPath res;
-               internal Result_BlindedPathDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_BlindedPathDecodeErrorZ_get_ok(ptr);
-                       org.ldk.structs.BlindedPath res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.BlindedPath(null, res); }
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public class Result_BlindedPathDecodeErrorZ_Err : Result_BlindedPathDecodeErrorZ {
-               public readonly DecodeError err;
-               internal Result_BlindedPathDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long err = bindings.CResult_BlindedPathDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_BlindedPathDecodeErrorZ in the success state.
-        */
-       public static Result_BlindedPathDecodeErrorZ ok(org.ldk.structs.BlindedPath o) {
-               long ret = bindings.CResult_BlindedPathDecodeErrorZ_ok(o.ptr);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathDecodeErrorZ ret_hu_conv = Result_BlindedPathDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_BlindedPathDecodeErrorZ in the error state.
-        */
-       public static Result_BlindedPathDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_BlindedPathDecodeErrorZ_err(e.ptr);
-               GC.KeepAlive(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathDecodeErrorZ ret_hu_conv = Result_BlindedPathDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_BlindedPathDecodeErrorZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_BlindedPathDecodeErrorZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_BlindedPathDecodeErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_BlindedPathDecodeErrorZ clone() {
-               long ret = bindings.CResult_BlindedPathDecodeErrorZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathDecodeErrorZ ret_hu_conv = Result_BlindedPathDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_BlindedPathNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_BlindedPathNoneZ.cs
deleted file mode 100644 (file)
index fdc9070..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_BlindedPathNoneZ : CommonBase {
-       Result_BlindedPathNoneZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_BlindedPathNoneZ() {
-               if (ptr != 0) { bindings.CResult_BlindedPathNoneZ_free(ptr); }
-       }
-
-       internal static Result_BlindedPathNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_BlindedPathNoneZ_is_ok(ptr)) {
-                       return new Result_BlindedPathNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_BlindedPathNoneZ_Err(null, ptr);
-               }
-       }
-       public class Result_BlindedPathNoneZ_OK : Result_BlindedPathNoneZ {
-               public readonly BlindedPath res;
-               internal Result_BlindedPathNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_BlindedPathNoneZ_get_ok(ptr);
-                       org.ldk.structs.BlindedPath res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.BlindedPath(null, res); }
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public class Result_BlindedPathNoneZ_Err : Result_BlindedPathNoneZ {
-               internal Result_BlindedPathNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-               }
-       }
-
-       /**
-        * Creates a new CResult_BlindedPathNoneZ in the success state.
-        */
-       public static Result_BlindedPathNoneZ ok(org.ldk.structs.BlindedPath o) {
-               long ret = bindings.CResult_BlindedPathNoneZ_ok(o.ptr);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathNoneZ ret_hu_conv = Result_BlindedPathNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_BlindedPathNoneZ in the error state.
-        */
-       public static Result_BlindedPathNoneZ err() {
-               long ret = bindings.CResult_BlindedPathNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathNoneZ ret_hu_conv = Result_BlindedPathNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_BlindedPathNoneZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_BlindedPathNoneZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_BlindedPathNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_BlindedPathNoneZ clone() {
-               long ret = bindings.CResult_BlindedPathNoneZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_BlindedPathNoneZ ret_hu_conv = Result_BlindedPathNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 6e4b58e364458c87a690bb213fe3ce7bf20a76b5..c4ce9dc04cdc0d0203c06165eb2810ec87fb715c 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BlindedPayInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedPayInfoDecodeErrorZ ret_hu_conv = Result_BlindedPayInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BlindedPayInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedPayInfoDecodeErrorZ ret_hu_conv = Result_BlindedPayInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_BlindedPaymentPathNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_BlindedPaymentPathNoneZ.cs
new file mode 100644 (file)
index 0000000..99dfdb1
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_BlindedPaymentPathNoneZ : CommonBase {
+       Result_BlindedPaymentPathNoneZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_BlindedPaymentPathNoneZ() {
+               if (ptr != 0) { bindings.CResult_BlindedPaymentPathNoneZ_free(ptr); }
+       }
+
+       internal static Result_BlindedPaymentPathNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_BlindedPaymentPathNoneZ_is_ok(ptr)) {
+                       return new Result_BlindedPaymentPathNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_BlindedPaymentPathNoneZ_Err(null, ptr);
+               }
+       }
+       public class Result_BlindedPaymentPathNoneZ_OK : Result_BlindedPaymentPathNoneZ {
+               public readonly BlindedPaymentPath res;
+               internal Result_BlindedPaymentPathNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_BlindedPaymentPathNoneZ_get_ok(ptr);
+                       org.ldk.structs.BlindedPaymentPath res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.BlindedPaymentPath(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_BlindedPaymentPathNoneZ_Err : Result_BlindedPaymentPathNoneZ {
+               internal Result_BlindedPaymentPathNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       /**
+        * Creates a new CResult_BlindedPaymentPathNoneZ in the success state.
+        */
+       public static Result_BlindedPaymentPathNoneZ ok(org.ldk.structs.BlindedPaymentPath o) {
+               long ret = bindings.CResult_BlindedPaymentPathNoneZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedPaymentPathNoneZ ret_hu_conv = Result_BlindedPaymentPathNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_BlindedPaymentPathNoneZ in the error state.
+        */
+       public static Result_BlindedPaymentPathNoneZ err() {
+               long ret = bindings.CResult_BlindedPaymentPathNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedPaymentPathNoneZ ret_hu_conv = Result_BlindedPaymentPathNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_BlindedPaymentPathNoneZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_BlindedPaymentPathNoneZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_BlindedPaymentPathNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_BlindedPaymentPathNoneZ clone() {
+               long ret = bindings.CResult_BlindedPaymentPathNoneZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_BlindedPaymentPathNoneZ ret_hu_conv = Result_BlindedPaymentPathNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 0bfc6ebbeb4c830040dc9f175df9c9402bc04081..d6b572d896adb80345b296c81b4cffa657be1c3c 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BlindedTailDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedTailDecodeErrorZ ret_hu_conv = Result_BlindedTailDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BlindedTailDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BlindedTailDecodeErrorZ ret_hu_conv = Result_BlindedTailDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c2ce8a5406260a342b71ac76ba052916655b7ca0..125582be2467589333558f9672c32d9212bb8301 100644 (file)
@@ -43,7 +43,6 @@ public class Result_Bolt11InvoiceBolt11SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceBolt11SemanticErrorZ ret_hu_conv = Result_Bolt11InvoiceBolt11SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index f7f65454da9aee54f6a6a4c28b6322bb8419b592..c85e8b0d0383f7a7aaec0fe4c127b31c723cce7d 100644 (file)
@@ -46,7 +46,6 @@ public class Result_Bolt11InvoiceFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt11InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_Bolt11InvoiceFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt11InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 9e464393fccf1d2c8e1a2927ec5b066a1636633e..61ed14814bad354d5bd69a4b5a3e06524b700608 100644 (file)
@@ -46,7 +46,6 @@ public class Result_Bolt11InvoiceParseOrSemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceParseOrSemanticErrorZ ret_hu_conv = Result_Bolt11InvoiceParseOrSemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_Bolt11InvoiceParseOrSemanticErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceParseOrSemanticErrorZ ret_hu_conv = Result_Bolt11InvoiceParseOrSemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 26d6a249369535d8bf15992171b1b3d3bae84b2f..3cf573967892b0694eb25f57b16be7f7b71966cc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_Bolt11InvoiceSignOrCreationErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_Bolt11InvoiceSignOrCreationErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7dfe984dd8f55e71172fc01e405788a468509541..4f3bbbf541bd8ece8d527bf51a30b312f5d0fdaf 100644 (file)
@@ -43,7 +43,6 @@ public class Result_Bolt12InvoiceBolt12SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12InvoiceBolt12SemanticErrorZ ret_hu_conv = Result_Bolt12InvoiceBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_Bolt12InvoiceDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_Bolt12InvoiceDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..300c01a
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_Bolt12InvoiceDecodeErrorZ : CommonBase {
+       Result_Bolt12InvoiceDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_Bolt12InvoiceDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_Bolt12InvoiceDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_Bolt12InvoiceDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_Bolt12InvoiceDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_Bolt12InvoiceDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_Bolt12InvoiceDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_Bolt12InvoiceDecodeErrorZ_OK : Result_Bolt12InvoiceDecodeErrorZ {
+               public readonly Bolt12Invoice res;
+               internal Result_Bolt12InvoiceDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_Bolt12InvoiceDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Bolt12Invoice res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.Bolt12Invoice(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_Bolt12InvoiceDecodeErrorZ_Err : Result_Bolt12InvoiceDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_Bolt12InvoiceDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_Bolt12InvoiceDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_Bolt12InvoiceDecodeErrorZ in the success state.
+        */
+       public static Result_Bolt12InvoiceDecodeErrorZ ok(org.ldk.structs.Bolt12Invoice o) {
+               long ret = bindings.CResult_Bolt12InvoiceDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_Bolt12InvoiceDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_Bolt12InvoiceDecodeErrorZ in the error state.
+        */
+       public static Result_Bolt12InvoiceDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_Bolt12InvoiceDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_Bolt12InvoiceDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_Bolt12InvoiceDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_Bolt12InvoiceDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_Bolt12InvoiceDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_Bolt12InvoiceDecodeErrorZ clone() {
+               long ret = bindings.CResult_Bolt12InvoiceDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_Bolt12InvoiceDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 1501b05246012baa39ee4a5eca5c01f2643b1dd2..1b8dba7ba9ac35ac9952ce25ea947468e1721539 100644 (file)
@@ -46,7 +46,6 @@ public class Result_Bolt12InvoiceFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_Bolt12InvoiceFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12InvoiceFeaturesDecodeErrorZ ret_hu_conv = Result_Bolt12InvoiceFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 8d99376f71f892acdce9a76672cc43c9ddabc0de..779e517112afd2c45e747aea0880609d50e0d138 100644 (file)
@@ -46,7 +46,6 @@ public class Result_Bolt12OfferContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12OfferContextDecodeErrorZ ret_hu_conv = Result_Bolt12OfferContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_Bolt12OfferContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12OfferContextDecodeErrorZ ret_hu_conv = Result_Bolt12OfferContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index dc91b8d30812f3b173a719c567b07144166a9032..d06418120eda6065483ea0c20df54f124cca690c 100644 (file)
@@ -46,7 +46,6 @@ public class Result_Bolt12RefundContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12RefundContextDecodeErrorZ ret_hu_conv = Result_Bolt12RefundContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_Bolt12RefundContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_Bolt12RefundContextDecodeErrorZ ret_hu_conv = Result_Bolt12RefundContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 67ea9ab22003a89480b74a733017d126d87db77d..e21a5d6fd81df56322c9405660319c729598caf3 100644 (file)
@@ -46,7 +46,6 @@ public class Result_BuiltCommitmentTransactionDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BuiltCommitmentTransactionDecodeErrorZ ret_hu_conv = Result_BuiltCommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_BuiltCommitmentTransactionDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_BuiltCommitmentTransactionDecodeErrorZ ret_hu_conv = Result_BuiltCommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 23d3f310daabcd0e59faf38f77d6351b648bd594..ba9251e33765a05a9b3fbc3519a0f4ae31aa48de 100644 (file)
@@ -46,6 +46,7 @@ public class Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -57,7 +58,6 @@ public class Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BestBlockOutputSweeperZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.cs
deleted file mode 100644 (file)
index 35b8b5f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ : CommonBase {
-       Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ() {
-               if (ptr != 0) { bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(ptr); }
-       }
-
-       internal static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_Err(null, ptr);
-               }
-       }
-       public class Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_OK : Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ {
-               public readonly TwoTuple_BlindedPayInfoBlindedPathZ res;
-               internal Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(ptr);
-                       TwoTuple_BlindedPayInfoBlindedPathZ res_hu_conv = new TwoTuple_BlindedPayInfoBlindedPathZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public class Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_Err : Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ {
-               internal Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ in the success state.
-        */
-       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ok(org.ldk.structs.TwoTuple_BlindedPayInfoBlindedPathZ o) {
-               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(o.ptr);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ in the error state.
-        */
-       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ err() {
-               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ clone() {
-               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 627f6344b0c651401d5b9d1895fde9c4027dee7b..0e37fc32abc283f783f3478833415aafe76f3429 100644 (file)
@@ -46,6 +46,7 @@ public class Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ : CommonBa
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -57,7 +58,6 @@ public class Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ : CommonBa
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 3582541dd263e1c12319475dfacbfd2d33eedc28..dffb063b6b2f55701c4e3afa7466ab496ed7cc05 100644 (file)
@@ -57,7 +57,6 @@ public class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ : CommonBa
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ce21d578343b63127b28c66b1eeb20b7566dff32..0426359bf4d32fc23f4c09a695f63b10a87d2475 100644 (file)
@@ -57,7 +57,6 @@ public class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ : C
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index b8ab9339869004221f55d2fc442b72eb10cd6679..9482296ded6dd42429f437e4267e2c3245c05784 100644 (file)
@@ -57,7 +57,6 @@ public class Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSe
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ ret_hu_conv = Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c3ef603787a2384c9894e654723638aba5da8cfe..d3a8195789586a363709dbf91ef6423a1370e34e 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_APIErrorZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_APIErrorZDecodeErrorZ ret_hu_conv = Result_COption_APIErrorZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_APIErrorZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_APIErrorZDecodeErrorZ ret_hu_conv = Result_COption_APIErrorZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 258edbe780f04772a3c410138dda5820b4b6e1e3..2471d6eeb576c60fe76d6c0dd4fd94f32c5bcca3 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_ClosureReasonZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_ClosureReasonZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 02d7c7f9e201c108f1a5c1c56139dad6365a861d..16982439935c478741939cc63de08adfadc692c6 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_EventZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_EventZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7d92a7f1791909a94e260876bca8c06ed41eee77..5b392a4d890831f5f3fe0e935de9616d1b699b3f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_HTLCDestinationZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_HTLCDestinationZDecodeErrorZ ret_hu_conv = Result_COption_HTLCDestinationZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_HTLCDestinationZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_HTLCDestinationZDecodeErrorZ ret_hu_conv = Result_COption_HTLCDestinationZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 153d8d218b3a0aa34e9496270ecb822755850d67..a2270d911b3d80d7cb5469ec8f6098b2dce6f865 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_InboundHTLCStateDetailsZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_InboundHTLCStateDetailsZDecodeErrorZ ret_hu_conv = Result_COption_InboundHTLCStateDetailsZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_InboundHTLCStateDetailsZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_InboundHTLCStateDetailsZDecodeErrorZ ret_hu_conv = Result_COption_InboundHTLCStateDetailsZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 02395f8d606f562081f529a62d697f34c9a358c8..2f75f616c85847b0b611e8ffa921518bbb176c91 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_MonitorEventZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_MonitorEventZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 2dad04a95a6cd0f9c7d8a04276590617e30dc784..bb5228aa315414f1fc692c814b133febf7c44097 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_NetworkUpdateZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_NetworkUpdateZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a71c821da4a68ccecc246a7fa81ab0923805e7b8..5b723d5745da165fb59758c699b1b649f90e477b 100644 (file)
@@ -58,7 +58,6 @@ public class Result_COption_OnionMessageContentsZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_OnionMessageContentsZDecodeErrorZ ret_hu_conv = Result_COption_OnionMessageContentsZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6caee8bb1d1df11bee88273b74bb9f2b82b4da44..015221dbc95d670e50a0d69bbc9f7522fa579f0c 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ ret_hu_conv = Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ ret_hu_conv = Result_COption_OutboundHTLCStateDetailsZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 52b1916872536b954cf1d7d4af4543831b93d744..7ea378f634d3877ff78c984087afe26010fdf3bc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_COption_PathFailureZDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_PathFailureZDecodeErrorZ ret_hu_conv = Result_COption_PathFailureZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_COption_PathFailureZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_PathFailureZDecodeErrorZ ret_hu_conv = Result_COption_PathFailureZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_COption_PaymentFailureReasonZDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_COption_PaymentFailureReasonZDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..3644ad5
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_COption_PaymentFailureReasonZDecodeErrorZ : CommonBase {
+       Result_COption_PaymentFailureReasonZDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_COption_PaymentFailureReasonZDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_COption_PaymentFailureReasonZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_PaymentFailureReasonZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_PaymentFailureReasonZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_COption_PaymentFailureReasonZDecodeErrorZ_OK : Result_COption_PaymentFailureReasonZDecodeErrorZ {
+               public readonly Option_PaymentFailureReasonZ res;
+               internal Result_COption_PaymentFailureReasonZDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Option_PaymentFailureReasonZ res_hu_conv = org.ldk.structs.Option_PaymentFailureReasonZ.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_COption_PaymentFailureReasonZDecodeErrorZ_Err : Result_COption_PaymentFailureReasonZDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_COption_PaymentFailureReasonZDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_COption_PaymentFailureReasonZDecodeErrorZ in the success state.
+        */
+       public static Result_COption_PaymentFailureReasonZDecodeErrorZ ok(org.ldk.structs.Option_PaymentFailureReasonZ o) {
+               long ret = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_PaymentFailureReasonZDecodeErrorZ ret_hu_conv = Result_COption_PaymentFailureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_COption_PaymentFailureReasonZDecodeErrorZ in the error state.
+        */
+       public static Result_COption_PaymentFailureReasonZDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_PaymentFailureReasonZDecodeErrorZ ret_hu_conv = Result_COption_PaymentFailureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_COption_PaymentFailureReasonZDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_COption_PaymentFailureReasonZDecodeErrorZ clone() {
+               long ret = bindings.CResult_COption_PaymentFailureReasonZDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_PaymentFailureReasonZDecodeErrorZ ret_hu_conv = Result_COption_PaymentFailureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 483e59d4e2618fe0cfaeac4bcace9c5043763d91..a0b17de77bbb956c5bea2cd02cd0f53c842c58da 100644 (file)
@@ -58,7 +58,6 @@ public class Result_COption_TypeZDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_COption_TypeZDecodeErrorZ ret_hu_conv = Result_COption_TypeZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_CVec_BlindedMessagePathZNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_CVec_BlindedMessagePathZNoneZ.cs
new file mode 100644 (file)
index 0000000..ba93476
--- /dev/null
@@ -0,0 +1,92 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_CVec_BlindedMessagePathZNoneZ : CommonBase {
+       Result_CVec_BlindedMessagePathZNoneZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_CVec_BlindedMessagePathZNoneZ() {
+               if (ptr != 0) { bindings.CResult_CVec_BlindedMessagePathZNoneZ_free(ptr); }
+       }
+
+       internal static Result_CVec_BlindedMessagePathZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_BlindedMessagePathZNoneZ_is_ok(ptr)) {
+                       return new Result_CVec_BlindedMessagePathZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_BlindedMessagePathZNoneZ_Err(null, ptr);
+               }
+       }
+       public class Result_CVec_BlindedMessagePathZNoneZ_OK : Result_CVec_BlindedMessagePathZNoneZ {
+               public readonly BlindedMessagePath[] res;
+               internal Result_CVec_BlindedMessagePathZNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_CVec_BlindedMessagePathZNoneZ_get_ok(ptr);
+                       int res_conv_20_len = InternalUtils.getArrayLength(res);
+                       BlindedMessagePath[] res_conv_20_arr = new BlindedMessagePath[res_conv_20_len];
+                       for (int u = 0; u < res_conv_20_len; u++) {
+                               long res_conv_20 = InternalUtils.getU64ArrayElem(res, u);
+                               org.ldk.structs.BlindedMessagePath res_conv_20_hu_conv = null; if (res_conv_20 < 0 || res_conv_20 > 4096) { res_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, res_conv_20); }
+                               if (res_conv_20_hu_conv != null) { res_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                               res_conv_20_arr[u] = res_conv_20_hu_conv;
+                       }
+                       bindings.free_buffer(res);
+                       this.res = res_conv_20_arr;
+               }
+       }
+
+       public class Result_CVec_BlindedMessagePathZNoneZ_Err : Result_CVec_BlindedMessagePathZNoneZ {
+               internal Result_CVec_BlindedMessagePathZNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_BlindedMessagePathZNoneZ in the success state.
+        */
+       public static Result_CVec_BlindedMessagePathZNoneZ ok(BlindedMessagePath[] o) {
+               long ret = bindings.CResult_CVec_BlindedMessagePathZNoneZ_ok(InternalUtils.encodeUint64Array(InternalUtils.mapArray(o, o_conv_20 => o_conv_20.ptr)));
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedMessagePathZNoneZ ret_hu_conv = Result_CVec_BlindedMessagePathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_BlindedMessagePathZNoneZ in the error state.
+        */
+       public static Result_CVec_BlindedMessagePathZNoneZ err() {
+               long ret = bindings.CResult_CVec_BlindedMessagePathZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedMessagePathZNoneZ ret_hu_conv = Result_CVec_BlindedMessagePathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_CVec_BlindedMessagePathZNoneZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_CVec_BlindedMessagePathZNoneZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_BlindedMessagePathZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_BlindedMessagePathZNoneZ clone() {
+               long ret = bindings.CResult_CVec_BlindedMessagePathZNoneZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedMessagePathZNoneZ ret_hu_conv = Result_CVec_BlindedMessagePathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_CVec_BlindedPathZNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_CVec_BlindedPathZNoneZ.cs
deleted file mode 100644 (file)
index 2e7e899..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_CVec_BlindedPathZNoneZ : CommonBase {
-       Result_CVec_BlindedPathZNoneZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_CVec_BlindedPathZNoneZ() {
-               if (ptr != 0) { bindings.CResult_CVec_BlindedPathZNoneZ_free(ptr); }
-       }
-
-       internal static Result_CVec_BlindedPathZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_CVec_BlindedPathZNoneZ_is_ok(ptr)) {
-                       return new Result_CVec_BlindedPathZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_CVec_BlindedPathZNoneZ_Err(null, ptr);
-               }
-       }
-       public class Result_CVec_BlindedPathZNoneZ_OK : Result_CVec_BlindedPathZNoneZ {
-               public readonly BlindedPath[] res;
-               internal Result_CVec_BlindedPathZNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_CVec_BlindedPathZNoneZ_get_ok(ptr);
-                       int res_conv_13_len = InternalUtils.getArrayLength(res);
-                       BlindedPath[] res_conv_13_arr = new BlindedPath[res_conv_13_len];
-                       for (int n = 0; n < res_conv_13_len; n++) {
-                               long res_conv_13 = InternalUtils.getU64ArrayElem(res, n);
-                               org.ldk.structs.BlindedPath res_conv_13_hu_conv = null; if (res_conv_13 < 0 || res_conv_13 > 4096) { res_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, res_conv_13); }
-                               if (res_conv_13_hu_conv != null) { res_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                               res_conv_13_arr[n] = res_conv_13_hu_conv;
-                       }
-                       bindings.free_buffer(res);
-                       this.res = res_conv_13_arr;
-               }
-       }
-
-       public class Result_CVec_BlindedPathZNoneZ_Err : Result_CVec_BlindedPathZNoneZ {
-               internal Result_CVec_BlindedPathZNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-               }
-       }
-
-       /**
-        * Creates a new CResult_CVec_BlindedPathZNoneZ in the success state.
-        */
-       public static Result_CVec_BlindedPathZNoneZ ok(BlindedPath[] o) {
-               long ret = bindings.CResult_CVec_BlindedPathZNoneZ_ok(InternalUtils.encodeUint64Array(InternalUtils.mapArray(o, o_conv_13 => o_conv_13.ptr)));
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_BlindedPathZNoneZ ret_hu_conv = Result_CVec_BlindedPathZNoneZ.constr_from_ptr(ret);
-               foreach (BlindedPath o_conv_13 in o) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_conv_13); }; };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_CVec_BlindedPathZNoneZ in the error state.
-        */
-       public static Result_CVec_BlindedPathZNoneZ err() {
-               long ret = bindings.CResult_CVec_BlindedPathZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_BlindedPathZNoneZ ret_hu_conv = Result_CVec_BlindedPathZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_CVec_BlindedPathZNoneZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_CVec_BlindedPathZNoneZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_CVec_BlindedPathZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_CVec_BlindedPathZNoneZ clone() {
-               long ret = bindings.CResult_CVec_BlindedPathZNoneZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_BlindedPathZNoneZ ret_hu_conv = Result_CVec_BlindedPathZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_CVec_BlindedPaymentPathZNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_CVec_BlindedPaymentPathZNoneZ.cs
new file mode 100644 (file)
index 0000000..879774c
--- /dev/null
@@ -0,0 +1,92 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_CVec_BlindedPaymentPathZNoneZ : CommonBase {
+       Result_CVec_BlindedPaymentPathZNoneZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_CVec_BlindedPaymentPathZNoneZ() {
+               if (ptr != 0) { bindings.CResult_CVec_BlindedPaymentPathZNoneZ_free(ptr); }
+       }
+
+       internal static Result_CVec_BlindedPaymentPathZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(ptr)) {
+                       return new Result_CVec_BlindedPaymentPathZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_BlindedPaymentPathZNoneZ_Err(null, ptr);
+               }
+       }
+       public class Result_CVec_BlindedPaymentPathZNoneZ_OK : Result_CVec_BlindedPaymentPathZNoneZ {
+               public readonly BlindedPaymentPath[] res;
+               internal Result_CVec_BlindedPaymentPathZNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_CVec_BlindedPaymentPathZNoneZ_get_ok(ptr);
+                       int res_conv_20_len = InternalUtils.getArrayLength(res);
+                       BlindedPaymentPath[] res_conv_20_arr = new BlindedPaymentPath[res_conv_20_len];
+                       for (int u = 0; u < res_conv_20_len; u++) {
+                               long res_conv_20 = InternalUtils.getU64ArrayElem(res, u);
+                               org.ldk.structs.BlindedPaymentPath res_conv_20_hu_conv = null; if (res_conv_20 < 0 || res_conv_20 > 4096) { res_conv_20_hu_conv = new org.ldk.structs.BlindedPaymentPath(null, res_conv_20); }
+                               if (res_conv_20_hu_conv != null) { res_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                               res_conv_20_arr[u] = res_conv_20_hu_conv;
+                       }
+                       bindings.free_buffer(res);
+                       this.res = res_conv_20_arr;
+               }
+       }
+
+       public class Result_CVec_BlindedPaymentPathZNoneZ_Err : Result_CVec_BlindedPaymentPathZNoneZ {
+               internal Result_CVec_BlindedPaymentPathZNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_BlindedPaymentPathZNoneZ in the success state.
+        */
+       public static Result_CVec_BlindedPaymentPathZNoneZ ok(BlindedPaymentPath[] o) {
+               long ret = bindings.CResult_CVec_BlindedPaymentPathZNoneZ_ok(InternalUtils.encodeUint64Array(InternalUtils.mapArray(o, o_conv_20 => o_conv_20.ptr)));
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedPaymentPathZNoneZ ret_hu_conv = Result_CVec_BlindedPaymentPathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_BlindedPaymentPathZNoneZ in the error state.
+        */
+       public static Result_CVec_BlindedPaymentPathZNoneZ err() {
+               long ret = bindings.CResult_CVec_BlindedPaymentPathZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedPaymentPathZNoneZ ret_hu_conv = Result_CVec_BlindedPaymentPathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_CVec_BlindedPaymentPathZNoneZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_CVec_BlindedPaymentPathZNoneZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_BlindedPaymentPathZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_BlindedPaymentPathZNoneZ clone() {
+               long ret = bindings.CResult_CVec_BlindedPaymentPathZNoneZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_BlindedPaymentPathZNoneZ ret_hu_conv = Result_CVec_BlindedPaymentPathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.cs b/c_sharp/src/org/ldk/structs/Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.cs
deleted file mode 100644 (file)
index cc8501a..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ : CommonBase {
-       Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ() {
-               if (ptr != 0) { bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_free(ptr); }
-       }
-
-       internal static Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(ptr)) {
-                       return new Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_Err(null, ptr);
-               }
-       }
-       public class Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_OK : Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ {
-               public readonly TwoTuple_BlindedPayInfoBlindedPathZ[] res;
-               internal Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_get_ok(ptr);
-                       int res_conv_37_len = InternalUtils.getArrayLength(res);
-                       TwoTuple_BlindedPayInfoBlindedPathZ[] res_conv_37_arr = new TwoTuple_BlindedPayInfoBlindedPathZ[res_conv_37_len];
-                       for (int l = 0; l < res_conv_37_len; l++) {
-                               long res_conv_37 = InternalUtils.getU64ArrayElem(res, l);
-                               TwoTuple_BlindedPayInfoBlindedPathZ res_conv_37_hu_conv = new TwoTuple_BlindedPayInfoBlindedPathZ(null, res_conv_37);
-                               if (res_conv_37_hu_conv != null) { res_conv_37_hu_conv.ptrs_to.AddLast(this); };
-                               res_conv_37_arr[l] = res_conv_37_hu_conv;
-                       }
-                       bindings.free_buffer(res);
-                       this.res = res_conv_37_arr;
-               }
-       }
-
-       public class Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_Err : Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ {
-               internal Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-               }
-       }
-
-       /**
-        * Creates a new CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ in the success state.
-        */
-       public static Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ok(TwoTuple_BlindedPayInfoBlindedPathZ[] o) {
-               long ret = bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_ok(InternalUtils.encodeUint64Array(InternalUtils.mapArray(o, o_conv_37 => o_conv_37.ptr)));
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret_hu_conv = Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ in the error state.
-        */
-       public static Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ err() {
-               long ret = bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret_hu_conv = Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ clone() {
-               long ret = bindings.CResult_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret_hu_conv = Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 273082035671fec7f4dbcba3068878768f6d3a68..d7ebe0b09af683e4ac11db4e8d3d68e063ee938a 100644 (file)
@@ -64,7 +64,6 @@ public class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c3d60e0a91c145a807e0c4a67613a8d13685f3b8..b47e72ef076023fc52deaca80335c08719011344 100644 (file)
@@ -48,7 +48,6 @@ public class Result_CVec_UtxoZNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_UtxoZNoneZ ret_hu_conv = Result_CVec_UtxoZNoneZ.constr_from_ptr(ret);
-               foreach (Utxo o_conv_6 in o) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_conv_6); }; };
                return ret_hu_conv;
        }
 
index c5b1cf3e05a7672d4856f52124156f01a7d0015a..c3ea14fc4d3e95f172ece208b297f4918d6a820c 100644 (file)
@@ -56,7 +56,6 @@ public class Result_CVec_u8ZPeerHandleErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_u8ZPeerHandleErrorZ ret_hu_conv = Result_CVec_u8ZPeerHandleErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f8f2007afe701bb9d6625647c8757301d6da81f9..54e651d8898ce96b03911126d8655f4aa9251b11 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelAnnouncementDecodeErrorZ ret_hu_conv = Result_ChannelAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelAnnouncementDecodeErrorZ ret_hu_conv = Result_ChannelAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 146a8fa054213e32f2111b27f55a3bba429329f2..b612f7b90e8ba40e2415a8bded85248aa6ceb758 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelConfigDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelConfigDecodeErrorZ ret_hu_conv = Result_ChannelConfigDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelConfigDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelConfigDecodeErrorZ ret_hu_conv = Result_ChannelConfigDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7f0af086d62725e1e216001cf34511ba1e591ad8..4e7cf30c442ac45d355df92f16a24a2b26545f93 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelCounterpartyDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelCounterpartyDecodeErrorZ ret_hu_conv = Result_ChannelCounterpartyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelCounterpartyDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelCounterpartyDecodeErrorZ ret_hu_conv = Result_ChannelCounterpartyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 58c0f193aa27a1648eb19447a9e5588b933f97b4..aac47833479d358d9208fd5ad5e215b734450bea 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelDerivationParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelDerivationParametersDecodeErrorZ ret_hu_conv = Result_ChannelDerivationParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelDerivationParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelDerivationParametersDecodeErrorZ ret_hu_conv = Result_ChannelDerivationParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 715ed0c4f074c8ff051bb1f5a0f98e5f9d31c1be..42001339b383bb7abba29644501370989180699b 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelDetailsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelDetailsDecodeErrorZ ret_hu_conv = Result_ChannelDetailsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelDetailsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelDetailsDecodeErrorZ ret_hu_conv = Result_ChannelDetailsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 07b2d0d21a7868db3f7c74ac93ac5ea02337b735..0faff45ae2552b5f32b515533f089e1eaf2e233f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index dc4db8de737c3f5e072903f73ac2baea2b36f7c1..7a903455ab32445d0641b4be94e2bd2c1afe8bea 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelIdAPIErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelIdAPIErrorZ ret_hu_conv = Result_ChannelIdAPIErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelIdAPIErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelIdAPIErrorZ ret_hu_conv = Result_ChannelIdAPIErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 4ec32de9536fd5a74f76cbbc8f995d8a4fb9c26a..b3aa59b8e24cf10dc58dd51480323f7ed5688f98 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelIdDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelIdDecodeErrorZ ret_hu_conv = Result_ChannelIdDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelIdDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelIdDecodeErrorZ ret_hu_conv = Result_ChannelIdDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d25c231aa19cd7335082578a4c04cf087e365343..c834f9c2c6d66ada8936a46521d50a688e506297 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelInfoDecodeErrorZ ret_hu_conv = Result_ChannelInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelInfoDecodeErrorZ ret_hu_conv = Result_ChannelInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 80316e3fc8e3559f69a21169f57ca954af0c4026..af695e3711e2da2a440b26a345db36d75e46621f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelMonitorUpdateDecodeErrorZ ret_hu_conv = Result_ChannelMonitorUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelMonitorUpdateDecodeErrorZ ret_hu_conv = Result_ChannelMonitorUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 0208a7a8fc6138d7ba1218916bf9b5db400ba52e..02d352947a06c04f2e9faf8c69ab4575b5626712 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelPublicKeysDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelPublicKeysDecodeErrorZ ret_hu_conv = Result_ChannelPublicKeysDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelPublicKeysDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelPublicKeysDecodeErrorZ ret_hu_conv = Result_ChannelPublicKeysDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 0bbd1bc93805b403db6cd86a8e4f3e52d2044074..cb9231b07a9608531ee4a298cc0ceed6d1665872 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelReadyDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelReadyDecodeErrorZ ret_hu_conv = Result_ChannelReadyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelReadyDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelReadyDecodeErrorZ ret_hu_conv = Result_ChannelReadyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 0632b14e9b9a5d94dd0fc1380fc0361e046aac9f..3f6037902fc9a79c776f869f699337533d98b149 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelReestablishDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelReestablishDecodeErrorZ ret_hu_conv = Result_ChannelReestablishDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelReestablishDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelReestablishDecodeErrorZ ret_hu_conv = Result_ChannelReestablishDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index eaf104c5c8f4f8e3b7893f17e79b99d01f3eff5a..27f502878fd2f45c61c74702a86790e80ec7eeba 100644 (file)
@@ -54,7 +54,6 @@ public class Result_ChannelShutdownStateDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelShutdownStateDecodeErrorZ ret_hu_conv = Result_ChannelShutdownStateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d0d82ee8601b199de9d1f753d90207d25f4d0267..b9bc1dd870265479703c8e39da30491bd744ce35 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelTransactionParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelTransactionParametersDecodeErrorZ ret_hu_conv = Result_ChannelTransactionParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelTransactionParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelTransactionParametersDecodeErrorZ ret_hu_conv = Result_ChannelTransactionParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d68db307471b726582fefa5401655e1546017103..21d1706f59daf114635a98a213fe6d381fc47973 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelTypeFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelTypeFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelTypeFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelTypeFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelTypeFeaturesDecodeErrorZ ret_hu_conv = Result_ChannelTypeFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 906676d1406bbc0da37e40d69e8e8271e0034a6e..676b1549aea363bebbbb5bb8cfc5c856cbef8aac 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelUpdateDecodeErrorZ ret_hu_conv = Result_ChannelUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelUpdateDecodeErrorZ ret_hu_conv = Result_ChannelUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 9407eb56c30dbfbe0a24a00d3074a7bb6b49a294..61abbbda7b2b2d49e428ccdb021b2fd99a281d18 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ChannelUpdateInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelUpdateInfoDecodeErrorZ ret_hu_conv = Result_ChannelUpdateInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ChannelUpdateInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelUpdateInfoDecodeErrorZ ret_hu_conv = Result_ChannelUpdateInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 79f8ff048e4ebbb8686096f12e708309cf83c5c3..62b5700b6bdd827243019f10850a68dd3c43cbf2 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ClaimedHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ClaimedHTLCDecodeErrorZ ret_hu_conv = Result_ClaimedHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ClaimedHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ClaimedHTLCDecodeErrorZ ret_hu_conv = Result_ClaimedHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index dc96f3668771ebc02ade476e8cc0d704424b4489..326531f119187951184b6831a6f0a361c2375252 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ClosingSignedDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ClosingSignedDecodeErrorZ ret_hu_conv = Result_ClosingSignedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ClosingSignedDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ClosingSignedDecodeErrorZ ret_hu_conv = Result_ClosingSignedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index fd43cd588d070a6965d8b9d79ca0cdf143d64e84..00d5ad90b2fbb3be7cf15025a9405552af7dd510 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ClosingSignedFeeRangeDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ClosingSignedFeeRangeDecodeErrorZ ret_hu_conv = Result_ClosingSignedFeeRangeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ClosingSignedFeeRangeDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ClosingSignedFeeRangeDecodeErrorZ ret_hu_conv = Result_ClosingSignedFeeRangeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7564078bb26a5073cfba73bebb51639723fc3a93..687898e64faabe46d46910003c6105e0f475be33 100644 (file)
@@ -41,7 +41,6 @@ public class Result_CoinSelectionNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CoinSelectionNoneZ ret_hu_conv = Result_CoinSelectionNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_CommitmentSignedBatchDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_CommitmentSignedBatchDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..2db36c3
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_CommitmentSignedBatchDecodeErrorZ : CommonBase {
+       Result_CommitmentSignedBatchDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_CommitmentSignedBatchDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_CommitmentSignedBatchDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_CommitmentSignedBatchDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_CommitmentSignedBatchDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_CommitmentSignedBatchDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_CommitmentSignedBatchDecodeErrorZ_OK : Result_CommitmentSignedBatchDecodeErrorZ {
+               public readonly CommitmentSignedBatch res;
+               internal Result_CommitmentSignedBatchDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.CommitmentSignedBatch res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.CommitmentSignedBatch(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_CommitmentSignedBatchDecodeErrorZ_Err : Result_CommitmentSignedBatchDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_CommitmentSignedBatchDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_CommitmentSignedBatchDecodeErrorZ in the success state.
+        */
+       public static Result_CommitmentSignedBatchDecodeErrorZ ok(org.ldk.structs.CommitmentSignedBatch o) {
+               long ret = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CommitmentSignedBatchDecodeErrorZ ret_hu_conv = Result_CommitmentSignedBatchDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CommitmentSignedBatchDecodeErrorZ in the error state.
+        */
+       public static Result_CommitmentSignedBatchDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CommitmentSignedBatchDecodeErrorZ ret_hu_conv = Result_CommitmentSignedBatchDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CommitmentSignedBatchDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CommitmentSignedBatchDecodeErrorZ clone() {
+               long ret = bindings.CResult_CommitmentSignedBatchDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CommitmentSignedBatchDecodeErrorZ ret_hu_conv = Result_CommitmentSignedBatchDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index e281fd18c9634581c615a3e261c15bb1cec96d22..f00f8062950644084acd0e707c99aff1355d89d5 100644 (file)
@@ -46,7 +46,6 @@ public class Result_CommitmentSignedDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CommitmentSignedDecodeErrorZ ret_hu_conv = Result_CommitmentSignedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_CommitmentSignedDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CommitmentSignedDecodeErrorZ ret_hu_conv = Result_CommitmentSignedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d3dae238dea404a1055b69703de1da5a45281702..7226be0c71bc83a7f99c4261a0d8427160f61bab 100644 (file)
@@ -46,7 +46,6 @@ public class Result_CommitmentTransactionDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CommitmentTransactionDecodeErrorZ ret_hu_conv = Result_CommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_CommitmentTransactionDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CommitmentTransactionDecodeErrorZ ret_hu_conv = Result_CommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 72f78bbe50bfdf4d4a70d78aec0f9faceecb5674..52b7efce6f2c3853ee9bb173082f62ad509cb6a2 100644 (file)
@@ -46,7 +46,6 @@ public class Result_CounterpartyChannelTransactionParametersDecodeErrorZ : Commo
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CounterpartyChannelTransactionParametersDecodeErrorZ ret_hu_conv = Result_CounterpartyChannelTransactionParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_CounterpartyChannelTransactionParametersDecodeErrorZ : Commo
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CounterpartyChannelTransactionParametersDecodeErrorZ ret_hu_conv = Result_CounterpartyChannelTransactionParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7b1edaced0afbc22c39f418bbef13aa7e50dddc2..50283c134e4120c8defa42f8450dd875da1706cf 100644 (file)
@@ -46,7 +46,6 @@ public class Result_CounterpartyCommitmentSecretsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CounterpartyCommitmentSecretsDecodeErrorZ ret_hu_conv = Result_CounterpartyCommitmentSecretsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_CounterpartyCommitmentSecretsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CounterpartyCommitmentSecretsDecodeErrorZ ret_hu_conv = Result_CounterpartyCommitmentSecretsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a21839e7e9dcc8eb3aadd365532b89ef630128fc..234c2178331347ff530226bc9344ff5720a8f4bc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_CounterpartyForwardingInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CounterpartyForwardingInfoDecodeErrorZ ret_hu_conv = Result_CounterpartyForwardingInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_CounterpartyForwardingInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CounterpartyForwardingInfoDecodeErrorZ ret_hu_conv = Result_CounterpartyForwardingInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 470491521532c11ce22650d4c6b7ab0da5d68c18..6cee23ec7489936ec90f7698e4f4ed80b501c995 100644 (file)
@@ -46,7 +46,6 @@ public class Result_DelayedPaymentBasepointDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DelayedPaymentBasepointDecodeErrorZ ret_hu_conv = Result_DelayedPaymentBasepointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_DelayedPaymentBasepointDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DelayedPaymentBasepointDecodeErrorZ ret_hu_conv = Result_DelayedPaymentBasepointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 2e5355a709df0516a3f818acd2f570c65ab55460..3f487bdb96439bac5d44d733718fce4188b3374f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_DelayedPaymentKeyDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DelayedPaymentKeyDecodeErrorZ ret_hu_conv = Result_DelayedPaymentKeyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_DelayedPaymentKeyDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DelayedPaymentKeyDecodeErrorZ ret_hu_conv = Result_DelayedPaymentKeyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 36570ac4ad349d17ebeac74c5ee02cbf7b03d022..719a52a59c26e666df33d092eea258ed84af14f3 100644 (file)
@@ -46,7 +46,6 @@ public class Result_DelayedPaymentOutputDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DelayedPaymentOutputDescriptorDecodeErrorZ ret_hu_conv = Result_DelayedPaymentOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_DelayedPaymentOutputDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DelayedPaymentOutputDescriptorDecodeErrorZ ret_hu_conv = Result_DelayedPaymentOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d3496ff87ff3f925c591010373feb79cd5c663ee..763f4ba70855e39cfadfd19881b563bd1a493624 100644 (file)
@@ -43,7 +43,6 @@ public class Result_DescriptionCreationErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_DescriptionCreationErrorZ ret_hu_conv = Result_DescriptionCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_EcdsaChannelSignerDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_EcdsaChannelSignerDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..a349449
--- /dev/null
@@ -0,0 +1,92 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_EcdsaChannelSignerDecodeErrorZ : CommonBase {
+       Result_EcdsaChannelSignerDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_EcdsaChannelSignerDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_EcdsaChannelSignerDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_EcdsaChannelSignerDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_EcdsaChannelSignerDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_EcdsaChannelSignerDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_EcdsaChannelSignerDecodeErrorZ_OK : Result_EcdsaChannelSignerDecodeErrorZ {
+               public readonly EcdsaChannelSigner res;
+               internal Result_EcdsaChannelSignerDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_get_ok(ptr);
+                       EcdsaChannelSigner ret_hu_conv = new EcdsaChannelSigner(null, res);
+                       if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = ret_hu_conv;
+               }
+       }
+
+       public class Result_EcdsaChannelSignerDecodeErrorZ_Err : Result_EcdsaChannelSignerDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_EcdsaChannelSignerDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_EcdsaChannelSignerDecodeErrorZ in the success state.
+        */
+       public static Result_EcdsaChannelSignerDecodeErrorZ ok(org.ldk.structs.EcdsaChannelSigner o) {
+               long ret = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_EcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_EcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_EcdsaChannelSignerDecodeErrorZ in the error state.
+        */
+       public static Result_EcdsaChannelSignerDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_EcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_EcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_EcdsaChannelSignerDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_EcdsaChannelSignerDecodeErrorZ clone() {
+               long ret = bindings.CResult_EcdsaChannelSignerDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_EcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_EcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index aedf8291795f00f6a49668e2378bc1b68565ea88..1c6dad8823ae12a9cf513ed65cdcb6cb5a2a1ea8 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ErrorMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ErrorMessageDecodeErrorZ ret_hu_conv = Result_ErrorMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ErrorMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ErrorMessageDecodeErrorZ ret_hu_conv = Result_ErrorMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 8bce25300dfd45372c5a727343ecc4a4146009b5..00c76c6d894eef1e3b4391c1692d304fffb5e6c8 100644 (file)
@@ -46,7 +46,6 @@ public class Result_FinalOnionHopDataDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FinalOnionHopDataDecodeErrorZ ret_hu_conv = Result_FinalOnionHopDataDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_FinalOnionHopDataDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FinalOnionHopDataDecodeErrorZ ret_hu_conv = Result_FinalOnionHopDataDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 84c522a8f5392dac65bac26dcd8847df70e7b32d..36aa92e26374dd5d536a91a6ed3f3c5625b074e6 100644 (file)
@@ -46,7 +46,6 @@ public class Result_FixedPenaltyScorerDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FixedPenaltyScorerDecodeErrorZ ret_hu_conv = Result_FixedPenaltyScorerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_FixedPenaltyScorerDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FixedPenaltyScorerDecodeErrorZ ret_hu_conv = Result_FixedPenaltyScorerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 20411eeb66e1cbe1b361975c542542a491f9cb9d..3b5e7a7f1b0031d87bb7b61f9442f248a8bd76b5 100644 (file)
@@ -46,7 +46,6 @@ public class Result_FundingCreatedDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FundingCreatedDecodeErrorZ ret_hu_conv = Result_FundingCreatedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_FundingCreatedDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FundingCreatedDecodeErrorZ ret_hu_conv = Result_FundingCreatedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_FundingInfoDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_FundingInfoDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..cd5bdd8
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_FundingInfoDecodeErrorZ : CommonBase {
+       Result_FundingInfoDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_FundingInfoDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_FundingInfoDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_FundingInfoDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_FundingInfoDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_FundingInfoDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_FundingInfoDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_FundingInfoDecodeErrorZ_OK : Result_FundingInfoDecodeErrorZ {
+               public readonly FundingInfo res;
+               internal Result_FundingInfoDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_FundingInfoDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.FundingInfo res_hu_conv = org.ldk.structs.FundingInfo.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_FundingInfoDecodeErrorZ_Err : Result_FundingInfoDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_FundingInfoDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_FundingInfoDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_FundingInfoDecodeErrorZ in the success state.
+        */
+       public static Result_FundingInfoDecodeErrorZ ok(org.ldk.structs.FundingInfo o) {
+               long ret = bindings.CResult_FundingInfoDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_FundingInfoDecodeErrorZ ret_hu_conv = Result_FundingInfoDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_FundingInfoDecodeErrorZ in the error state.
+        */
+       public static Result_FundingInfoDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_FundingInfoDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_FundingInfoDecodeErrorZ ret_hu_conv = Result_FundingInfoDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_FundingInfoDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_FundingInfoDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_FundingInfoDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_FundingInfoDecodeErrorZ clone() {
+               long ret = bindings.CResult_FundingInfoDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_FundingInfoDecodeErrorZ ret_hu_conv = Result_FundingInfoDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index e32fac25f9045893e6b18c86afa7911ff0bf8fb9..539879eb2d441c2384398c7e2b006fa042fe46dd 100644 (file)
@@ -46,7 +46,6 @@ public class Result_FundingSignedDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FundingSignedDecodeErrorZ ret_hu_conv = Result_FundingSignedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_FundingSignedDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_FundingSignedDecodeErrorZ ret_hu_conv = Result_FundingSignedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 4a580887a9cd8f4550f9637715e498e0c706929e..a957937d80e2f372b95be98770214e094487f227 100644 (file)
@@ -46,7 +46,6 @@ public class Result_GossipTimestampFilterDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_GossipTimestampFilterDecodeErrorZ ret_hu_conv = Result_GossipTimestampFilterDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_GossipTimestampFilterDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_GossipTimestampFilterDecodeErrorZ ret_hu_conv = Result_GossipTimestampFilterDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 34f1b8558ea3095153195dc85a927da7cbe1d500..c852fbd5254de9fb571c8770f977d4b8576fb963 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HTLCDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HTLCDescriptorDecodeErrorZ ret_hu_conv = Result_HTLCDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HTLCDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HTLCDescriptorDecodeErrorZ ret_hu_conv = Result_HTLCDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 501a8fba949de67694f81c8731760f20d79c1b80..946aeeeab371a276b0fc246e3708962118ba531a 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HTLCOutputInCommitmentDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HTLCOutputInCommitmentDecodeErrorZ ret_hu_conv = Result_HTLCOutputInCommitmentDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HTLCOutputInCommitmentDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HTLCOutputInCommitmentDecodeErrorZ ret_hu_conv = Result_HTLCOutputInCommitmentDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 3ef6aa6aaa4fcc9430b9888f9676fa7e39203507..cc1e35220ca6776a01a63ae9fab5e9b5f2361a24 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HTLCUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HTLCUpdateDecodeErrorZ ret_hu_conv = Result_HTLCUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HTLCUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HTLCUpdateDecodeErrorZ ret_hu_conv = Result_HTLCUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_HeldHtlcAvailableDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_HeldHtlcAvailableDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..43b65f3
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_HeldHtlcAvailableDecodeErrorZ : CommonBase {
+       Result_HeldHtlcAvailableDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_HeldHtlcAvailableDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_HeldHtlcAvailableDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_HeldHtlcAvailableDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_HeldHtlcAvailableDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_HeldHtlcAvailableDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_HeldHtlcAvailableDecodeErrorZ_OK : Result_HeldHtlcAvailableDecodeErrorZ {
+               public readonly HeldHtlcAvailable res;
+               internal Result_HeldHtlcAvailableDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.HeldHtlcAvailable res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.HeldHtlcAvailable(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_HeldHtlcAvailableDecodeErrorZ_Err : Result_HeldHtlcAvailableDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_HeldHtlcAvailableDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_HeldHtlcAvailableDecodeErrorZ in the success state.
+        */
+       public static Result_HeldHtlcAvailableDecodeErrorZ ok(org.ldk.structs.HeldHtlcAvailable o) {
+               long ret = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HeldHtlcAvailableDecodeErrorZ ret_hu_conv = Result_HeldHtlcAvailableDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_HeldHtlcAvailableDecodeErrorZ in the error state.
+        */
+       public static Result_HeldHtlcAvailableDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HeldHtlcAvailableDecodeErrorZ ret_hu_conv = Result_HeldHtlcAvailableDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_HeldHtlcAvailableDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_HeldHtlcAvailableDecodeErrorZ clone() {
+               long ret = bindings.CResult_HeldHtlcAvailableDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HeldHtlcAvailableDecodeErrorZ ret_hu_conv = Result_HeldHtlcAvailableDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index e37b5e4441d9652d23ffb165804a32f212eb4087..f6c4a191a0953d310dc31ba6e3fcf34220e1cead 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HolderCommitmentTransactionDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HolderCommitmentTransactionDecodeErrorZ ret_hu_conv = Result_HolderCommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HolderCommitmentTransactionDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HolderCommitmentTransactionDecodeErrorZ ret_hu_conv = Result_HolderCommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c7e34cfcb3ee7a5a3cf6917045eec2f566500116..d4089142bbe89f05d1d3c55818e5e08c394ff732 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HostnameDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HostnameDecodeErrorZ ret_hu_conv = Result_HostnameDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HostnameDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HostnameDecodeErrorZ ret_hu_conv = Result_HostnameDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7e4886d6f4d4f91c8d917182590d556c8a21120d..70c1d37ef64458b26b49e8cad883af0fc9186a14 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HtlcBasepointDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HtlcBasepointDecodeErrorZ ret_hu_conv = Result_HtlcBasepointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HtlcBasepointDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HtlcBasepointDecodeErrorZ ret_hu_conv = Result_HtlcBasepointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7037bc7f167e270ce5a5474e4b80902782ace18f..e859206d9e6b6eeb6ef53cdfd8d76137c4468210 100644 (file)
@@ -46,7 +46,6 @@ public class Result_HtlcKeyDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HtlcKeyDecodeErrorZ ret_hu_conv = Result_HtlcKeyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_HtlcKeyDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_HtlcKeyDecodeErrorZ ret_hu_conv = Result_HtlcKeyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 09681eabce9b0e486b2e468170af0e492f27edfe..6aa4fbff93a3c1f6ef3f38b7da87f7a68b1ee345 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InFlightHtlcsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InFlightHtlcsDecodeErrorZ ret_hu_conv = Result_InFlightHtlcsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InFlightHtlcsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InFlightHtlcsDecodeErrorZ ret_hu_conv = Result_InFlightHtlcsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 0fdca818b7c8e966926d572ce9e26f0731b2dc6c..271d7edc5122be1bcac31274e83002639ed1f121 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InMemorySignerDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InMemorySignerDecodeErrorZ ret_hu_conv = Result_InMemorySignerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InMemorySignerDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InMemorySignerDecodeErrorZ ret_hu_conv = Result_InMemorySignerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 1039db70ca17c1e0091c8b271297c7bbfcbff151..346935dfc51521e017f89161ac174192ea9facbb 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InboundHTLCDetailsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InboundHTLCDetailsDecodeErrorZ ret_hu_conv = Result_InboundHTLCDetailsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InboundHTLCDetailsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InboundHTLCDetailsDecodeErrorZ ret_hu_conv = Result_InboundHTLCDetailsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f0e3abc55fc0ac299c1e4ddccfc60acd6e2219a2..ee1dacd4c011d5a0a40c12dc92ed62fd716ec0c4 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InitDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InitDecodeErrorZ ret_hu_conv = Result_InitDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InitDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InitDecodeErrorZ ret_hu_conv = Result_InitDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 18bd0b756bb3251309146985992c4298022d9b69..3b2d43020315d57cf3dd28fdf3e34c6eb7ca6dab 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InitFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InitFeaturesDecodeErrorZ ret_hu_conv = Result_InitFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InitFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InitFeaturesDecodeErrorZ ret_hu_conv = Result_InitFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 96667d997c45fff148fd621892cf2613398c4274..c6fc30071693c000674acf18489be8d83bc4d925 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InvoiceErrorDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceErrorDecodeErrorZ ret_hu_conv = Result_InvoiceErrorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InvoiceErrorDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceErrorDecodeErrorZ ret_hu_conv = Result_InvoiceErrorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f24d56d70f8b8d4c79b8bb7dc8604ddc2e6a0f4b..746d21cc3e52a0a0133a03502516c043fa812ee7 100644 (file)
@@ -43,7 +43,6 @@ public class Result_InvoiceRequestBolt12SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceRequestBolt12SemanticErrorZ ret_hu_conv = Result_InvoiceRequestBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index cf99b087147d68a07c26afa828553f863b54cc0f..34847c7d494ef6e207766b75e951ee3638713328 100644 (file)
@@ -46,7 +46,6 @@ public class Result_InvoiceRequestFieldsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceRequestFieldsDecodeErrorZ ret_hu_conv = Result_InvoiceRequestFieldsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_InvoiceRequestFieldsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_InvoiceRequestFieldsDecodeErrorZ ret_hu_conv = Result_InvoiceRequestFieldsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 3d3b7f815603086ee05bc6f271924a983c2103b6..b86b32eaa0db492307c6d0ca685e733024f144b4 100644 (file)
@@ -46,7 +46,6 @@ public class Result_MaxDustHTLCExposureDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_MaxDustHTLCExposureDecodeErrorZ ret_hu_conv = Result_MaxDustHTLCExposureDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_MaxDustHTLCExposureDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_MaxDustHTLCExposureDecodeErrorZ ret_hu_conv = Result_MaxDustHTLCExposureDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_MessageContextDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_MessageContextDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..8a43e56
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_MessageContextDecodeErrorZ : CommonBase {
+       Result_MessageContextDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_MessageContextDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_MessageContextDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_MessageContextDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_MessageContextDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_MessageContextDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_MessageContextDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_MessageContextDecodeErrorZ_OK : Result_MessageContextDecodeErrorZ {
+               public readonly MessageContext res;
+               internal Result_MessageContextDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_MessageContextDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.MessageContext res_hu_conv = org.ldk.structs.MessageContext.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_MessageContextDecodeErrorZ_Err : Result_MessageContextDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_MessageContextDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_MessageContextDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_MessageContextDecodeErrorZ in the success state.
+        */
+       public static Result_MessageContextDecodeErrorZ ok(org.ldk.structs.MessageContext o) {
+               long ret = bindings.CResult_MessageContextDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_MessageContextDecodeErrorZ ret_hu_conv = Result_MessageContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_MessageContextDecodeErrorZ in the error state.
+        */
+       public static Result_MessageContextDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_MessageContextDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_MessageContextDecodeErrorZ ret_hu_conv = Result_MessageContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_MessageContextDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_MessageContextDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_MessageContextDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_MessageContextDecodeErrorZ clone() {
+               long ret = bindings.CResult_MessageContextDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_MessageContextDecodeErrorZ ret_hu_conv = Result_MessageContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 31f4e81dff7d793ead6e6b442a99532ea9556e73..1a76915eaa157aba28079235d3fb9eb0dc0a5229 100644 (file)
@@ -59,7 +59,6 @@ public class Result_NetworkGraphDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NetworkGraphDecodeErrorZ ret_hu_conv = Result_NetworkGraphDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c63587669b1a2f316483ff5d94d6781de21ac59a..68168bac905fbff8da3faa73af9be168d92a7bd1 100644 (file)
@@ -46,7 +46,6 @@ public class Result_NodeAliasDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeAliasDecodeErrorZ ret_hu_conv = Result_NodeAliasDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_NodeAliasDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeAliasDecodeErrorZ ret_hu_conv = Result_NodeAliasDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c17dff49a578cb87c379ef5f21e1956f097f9d23..8a16b13ede701f643ed28033a58ee95df853b03a 100644 (file)
@@ -46,7 +46,6 @@ public class Result_NodeAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeAnnouncementDecodeErrorZ ret_hu_conv = Result_NodeAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_NodeAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeAnnouncementDecodeErrorZ ret_hu_conv = Result_NodeAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d92148232fdd32b22ee4cc4703afe6dd410061a7..3c3a2fcf2fc8825b9a449219edb082b32d944afb 100644 (file)
@@ -22,7 +22,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ : CommonBase {
                public readonly NodeAnnouncementInfo res;
                internal Result_NodeAnnouncementInfoDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
                        long res = bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(ptr);
-                       org.ldk.structs.NodeAnnouncementInfo res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.NodeAnnouncementInfo(null, res); }
+                       org.ldk.structs.NodeAnnouncementInfo res_hu_conv = org.ldk.structs.NodeAnnouncementInfo.constr_from_ptr(res);
                        if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
                        this.res = res_hu_conv;
                }
@@ -46,7 +46,6 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeAnnouncementInfoDecodeErrorZ ret_hu_conv = Result_NodeAnnouncementInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeAnnouncementInfoDecodeErrorZ ret_hu_conv = Result_NodeAnnouncementInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f7eba84ffbb620bd5b1957e5d9a07f4b46c9a8c9..112198c216e3b9004457b396503443c3a71bd36b 100644 (file)
@@ -46,7 +46,6 @@ public class Result_NodeFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeFeaturesDecodeErrorZ ret_hu_conv = Result_NodeFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_NodeFeaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeFeaturesDecodeErrorZ ret_hu_conv = Result_NodeFeaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 0d1f6e9cf8d978f9e1aba6120c65b8fed79468bf..af32cb7df2166f364408c15faea1b5072b156c6e 100644 (file)
@@ -46,7 +46,6 @@ public class Result_NodeIdDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeIdDecodeErrorZ ret_hu_conv = Result_NodeIdDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_NodeIdDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeIdDecodeErrorZ ret_hu_conv = Result_NodeIdDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7474a7da598116c68b53115c83b0df660ec4501e..118b0b30d02136862c77feef7c7b4926a92d3cf1 100644 (file)
@@ -46,7 +46,6 @@ public class Result_NodeInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeInfoDecodeErrorZ ret_hu_conv = Result_NodeInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_NodeInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NodeInfoDecodeErrorZ ret_hu_conv = Result_NodeInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_NonceDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_NonceDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..309e223
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_NonceDecodeErrorZ : CommonBase {
+       Result_NonceDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_NonceDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_NonceDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_NonceDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_NonceDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_NonceDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_NonceDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_NonceDecodeErrorZ_OK : Result_NonceDecodeErrorZ {
+               public readonly Nonce res;
+               internal Result_NonceDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_NonceDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Nonce res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.Nonce(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_NonceDecodeErrorZ_Err : Result_NonceDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_NonceDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_NonceDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_NonceDecodeErrorZ in the success state.
+        */
+       public static Result_NonceDecodeErrorZ ok(org.ldk.structs.Nonce o) {
+               long ret = bindings.CResult_NonceDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NonceDecodeErrorZ ret_hu_conv = Result_NonceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_NonceDecodeErrorZ in the error state.
+        */
+       public static Result_NonceDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_NonceDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NonceDecodeErrorZ ret_hu_conv = Result_NonceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_NonceDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_NonceDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_NonceDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_NonceDecodeErrorZ clone() {
+               long ret = bindings.CResult_NonceDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NonceDecodeErrorZ ret_hu_conv = Result_NonceDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index a89d3eb0d294eb6175f83a2678d3e0e02b3a1d5b..9ec27783a9bfea177129bac1d55320d8459a40b2 100644 (file)
@@ -51,7 +51,6 @@ public class Result_NoneAPIErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a69057fb90677fc78915e53546bfadc448f11335..2d9214047c0b1e310a13c0937c159e8e0a72743c 100644 (file)
@@ -51,7 +51,6 @@ public class Result_NoneLightningErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 91eb760231da4d96db0e492a3dc69728fdd281b2..11184a9840a70422911cea6f744cbbeb8f05f302 100644 (file)
@@ -51,7 +51,6 @@ public class Result_NonePaymentSendFailureZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 41960438bc46caab073363acc48972cdd6fbe59c..3d2b3dcd3e649b2736b0f21088799ecf2a4a404d 100644 (file)
@@ -51,7 +51,6 @@ public class Result_NonePeerHandleErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NonePeerHandleErrorZ ret_hu_conv = Result_NonePeerHandleErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_NoneReplayEventZ.cs b/c_sharp/src/org/ldk/structs/Result_NoneReplayEventZ.cs
new file mode 100644 (file)
index 0000000..d849065
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_NoneReplayEventZ : CommonBase {
+       Result_NoneReplayEventZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_NoneReplayEventZ() {
+               if (ptr != 0) { bindings.CResult_NoneReplayEventZ_free(ptr); }
+       }
+
+       internal static Result_NoneReplayEventZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_NoneReplayEventZ_is_ok(ptr)) {
+                       return new Result_NoneReplayEventZ_OK(null, ptr);
+               } else {
+                       return new Result_NoneReplayEventZ_Err(null, ptr);
+               }
+       }
+       public class Result_NoneReplayEventZ_OK : Result_NoneReplayEventZ {
+               internal Result_NoneReplayEventZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       public class Result_NoneReplayEventZ_Err : Result_NoneReplayEventZ {
+               public readonly ReplayEvent err;
+               internal Result_NoneReplayEventZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_NoneReplayEventZ_get_err(ptr);
+                       org.ldk.structs.ReplayEvent err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new org.ldk.structs.ReplayEvent(null, err); }
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_NoneReplayEventZ in the success state.
+        */
+       public static Result_NoneReplayEventZ ok() {
+               long ret = bindings.CResult_NoneReplayEventZ_ok();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneReplayEventZ ret_hu_conv = Result_NoneReplayEventZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_NoneReplayEventZ in the error state.
+        */
+       public static Result_NoneReplayEventZ err(org.ldk.structs.ReplayEvent e) {
+               long ret = bindings.CResult_NoneReplayEventZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneReplayEventZ ret_hu_conv = Result_NoneReplayEventZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_NoneReplayEventZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_NoneReplayEventZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_NoneReplayEventZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_NoneReplayEventZ clone() {
+               long ret = bindings.CResult_NoneReplayEventZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneReplayEventZ ret_hu_conv = Result_NoneReplayEventZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_NoneSendErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_NoneSendErrorZ.cs
new file mode 100644 (file)
index 0000000..e0e09e7
--- /dev/null
@@ -0,0 +1,85 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_NoneSendErrorZ : CommonBase {
+       Result_NoneSendErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_NoneSendErrorZ() {
+               if (ptr != 0) { bindings.CResult_NoneSendErrorZ_free(ptr); }
+       }
+
+       internal static Result_NoneSendErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_NoneSendErrorZ_is_ok(ptr)) {
+                       return new Result_NoneSendErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_NoneSendErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_NoneSendErrorZ_OK : Result_NoneSendErrorZ {
+               internal Result_NoneSendErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       public class Result_NoneSendErrorZ_Err : Result_NoneSendErrorZ {
+               public readonly SendError err;
+               internal Result_NoneSendErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_NoneSendErrorZ_get_err(ptr);
+                       org.ldk.structs.SendError err_hu_conv = org.ldk.structs.SendError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_NoneSendErrorZ in the success state.
+        */
+       public static Result_NoneSendErrorZ ok() {
+               long ret = bindings.CResult_NoneSendErrorZ_ok();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneSendErrorZ ret_hu_conv = Result_NoneSendErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_NoneSendErrorZ in the error state.
+        */
+       public static Result_NoneSendErrorZ err(org.ldk.structs.SendError e) {
+               long ret = bindings.CResult_NoneSendErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneSendErrorZ ret_hu_conv = Result_NoneSendErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_NoneSendErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_NoneSendErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_NoneSendErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_NoneSendErrorZ clone() {
+               long ret = bindings.CResult_NoneSendErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneSendErrorZ ret_hu_conv = Result_NoneSendErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 9a90137a443a2c832dfe42e31a5973bfe3dcf365..09f3cb2208cb2759fdaf7c8c2184c1e414092b1d 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OfferBolt12ParseErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferBolt12ParseErrorZ ret_hu_conv = Result_OfferBolt12ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OfferBolt12ParseErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferBolt12ParseErrorZ ret_hu_conv = Result_OfferBolt12ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a0cd06550c3c562520f5478cdd5ded6017c1ea91..b90fdf3649b308c3a17e17a31c05979bb4236292 100644 (file)
@@ -43,7 +43,6 @@ public class Result_OfferBolt12SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferBolt12SemanticErrorZ ret_hu_conv = Result_OfferBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_OfferDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_OfferDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..70e5b6a
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_OfferDecodeErrorZ : CommonBase {
+       Result_OfferDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_OfferDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_OfferDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_OfferDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_OfferDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_OfferDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_OfferDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_OfferDecodeErrorZ_OK : Result_OfferDecodeErrorZ {
+               public readonly Offer res;
+               internal Result_OfferDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_OfferDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Offer res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.Offer(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_OfferDecodeErrorZ_Err : Result_OfferDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_OfferDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_OfferDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_OfferDecodeErrorZ in the success state.
+        */
+       public static Result_OfferDecodeErrorZ ok(org.ldk.structs.Offer o) {
+               long ret = bindings.CResult_OfferDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OfferDecodeErrorZ ret_hu_conv = Result_OfferDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_OfferDecodeErrorZ in the error state.
+        */
+       public static Result_OfferDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_OfferDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OfferDecodeErrorZ ret_hu_conv = Result_OfferDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_OfferDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_OfferDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_OfferDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_OfferDecodeErrorZ clone() {
+               long ret = bindings.CResult_OfferDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OfferDecodeErrorZ ret_hu_conv = Result_OfferDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 75dccc426d45a842f1d6732b744ea2bb2f926a5b..fcba1157f2491df36a2f3d8544025ee84b838a78 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OfferIdDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferIdDecodeErrorZ ret_hu_conv = Result_OfferIdDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OfferIdDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferIdDecodeErrorZ ret_hu_conv = Result_OfferIdDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a653b236df416502db58392672a2b115fb2bf488..5d82574e09518aadcfc36a123aa68dc795ff5da2 100644 (file)
@@ -43,7 +43,6 @@ public class Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ : Common
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ ret_hu_conv = Result_OfferWithDerivedMetadataBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_OffersContextDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_OffersContextDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..dc33586
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_OffersContextDecodeErrorZ : CommonBase {
+       Result_OffersContextDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_OffersContextDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_OffersContextDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_OffersContextDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_OffersContextDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_OffersContextDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_OffersContextDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_OffersContextDecodeErrorZ_OK : Result_OffersContextDecodeErrorZ {
+               public readonly OffersContext res;
+               internal Result_OffersContextDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_OffersContextDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.OffersContext res_hu_conv = org.ldk.structs.OffersContext.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_OffersContextDecodeErrorZ_Err : Result_OffersContextDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_OffersContextDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_OffersContextDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_OffersContextDecodeErrorZ in the success state.
+        */
+       public static Result_OffersContextDecodeErrorZ ok(org.ldk.structs.OffersContext o) {
+               long ret = bindings.CResult_OffersContextDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OffersContextDecodeErrorZ ret_hu_conv = Result_OffersContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_OffersContextDecodeErrorZ in the error state.
+        */
+       public static Result_OffersContextDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_OffersContextDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OffersContextDecodeErrorZ ret_hu_conv = Result_OffersContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_OffersContextDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_OffersContextDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_OffersContextDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_OffersContextDecodeErrorZ clone() {
+               long ret = bindings.CResult_OffersContextDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_OffersContextDecodeErrorZ ret_hu_conv = Result_OffersContextDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index fc13b343dd76815b1b72f9d22a0261fa0d977f38..7a3a48ddcc1cfaa0282a10ea17d36a7e11e7ea85 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OffersMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OffersMessageDecodeErrorZ ret_hu_conv = Result_OffersMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OffersMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OffersMessageDecodeErrorZ ret_hu_conv = Result_OffersMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 680124ef2f25e98185d3ebedc910e6ff7eee408c..5cbea5b1ddba86048cecf1b5e7271ca3e8d94540 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OnionMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OnionMessageDecodeErrorZ ret_hu_conv = Result_OnionMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OnionMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OnionMessageDecodeErrorZ ret_hu_conv = Result_OnionMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7ed0a8956a3999335fda64adff0317eb0b7be0c4..300820940dc382ae40d49519a3cd4a9c2bc08f9f 100644 (file)
@@ -41,7 +41,6 @@ public class Result_OnionMessagePathNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OnionMessagePathNoneZ ret_hu_conv = Result_OnionMessagePathNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 99f3eaed6e985dc0dac32701e502fe8ba550e519..049dd25950e57279e0639f5a27ec32ce22c744de 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OnionPacketDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OnionPacketDecodeErrorZ ret_hu_conv = Result_OnionPacketDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OnionPacketDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OnionPacketDecodeErrorZ ret_hu_conv = Result_OnionPacketDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a3b6e9c01543ad4888cdf4aade3c82520e12c7e7..feb0905586d241ca2c7f80bd70204f71078c06e2 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OpenChannelDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OpenChannelDecodeErrorZ ret_hu_conv = Result_OpenChannelDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OpenChannelDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OpenChannelDecodeErrorZ ret_hu_conv = Result_OpenChannelDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f6814da3d4a3492bb47baeb6908d3d7f8fd442f1..db4ee336501441018abc227958bca162de190d74 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OpenChannelV2DecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OpenChannelV2DecodeErrorZ ret_hu_conv = Result_OpenChannelV2DecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OpenChannelV2DecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OpenChannelV2DecodeErrorZ ret_hu_conv = Result_OpenChannelV2DecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ae29f7e020a6e971a7e24b99c6d79cb3955d4646..85bbab2f812356df5a5e11bfba8c9a7298735223 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OutPointDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutPointDecodeErrorZ ret_hu_conv = Result_OutPointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OutPointDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutPointDecodeErrorZ ret_hu_conv = Result_OutPointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 8a084cd1afc5e88e5d107a8d986cbb38c73cbb58..5b5eb34da659c069e98fe5b79d4df4aa4de82515 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OutboundHTLCDetailsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutboundHTLCDetailsDecodeErrorZ ret_hu_conv = Result_OutboundHTLCDetailsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OutboundHTLCDetailsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutboundHTLCDetailsDecodeErrorZ ret_hu_conv = Result_OutboundHTLCDetailsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ca8bcb05721f3ec8e8e57f901b050f6d233988a7..ac3e88f85054fcb52fccc7bded59df7dd59787ed 100644 (file)
@@ -46,7 +46,6 @@ public class Result_OutputSpendStatusDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutputSpendStatusDecodeErrorZ ret_hu_conv = Result_OutputSpendStatusDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_OutputSpendStatusDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutputSpendStatusDecodeErrorZ ret_hu_conv = Result_OutputSpendStatusDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index bc1dcc901e751170ef46cb10c6337fc4c611844a..ae08ede495ef3719d0bfd5408da0b401c57306a9 100644 (file)
@@ -53,7 +53,7 @@ public class Result_OutputSweeperDecodeErrorZ : CommonBase {
                GC.KeepAlive(o_logger);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutputSweeperDecodeErrorZ ret_hu_conv = Result_OutputSweeperDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_best_block); };
+               ;
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_broadcaster); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_fee_estimator); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_chain_data_source); };
@@ -72,7 +72,6 @@ public class Result_OutputSweeperDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_OutputSweeperDecodeErrorZ ret_hu_conv = Result_OutputSweeperDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6cdfdd88018e55a7473ddd3b5214f8ce88f0b29c..26189dda24ffa78d461e3a4d481de2d6c4da1345 100644 (file)
@@ -43,7 +43,6 @@ public class Result_PayeePubKeySecp256k1ErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PayeePubKeySecp256k1ErrorZ ret_hu_conv = Result_PayeePubKeySecp256k1ErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 2b95c9c526ff498b19d08e476b2366cf4b7caa65..983b8d581d1eebbadea93f17df6f973d66f165dc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PaymentConstraintsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentConstraintsDecodeErrorZ ret_hu_conv = Result_PaymentConstraintsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PaymentConstraintsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentConstraintsDecodeErrorZ ret_hu_conv = Result_PaymentConstraintsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6742f4a309625caa54656ca8f455f1316032a3f4..ae812f41cbd4a3a39c576cde512b9c6babf395a0 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PaymentContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentContextDecodeErrorZ ret_hu_conv = Result_PaymentContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PaymentContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentContextDecodeErrorZ ret_hu_conv = Result_PaymentContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_PaymentFailureReasonDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_PaymentFailureReasonDecodeErrorZ.cs
deleted file mode 100644 (file)
index 433c819..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_PaymentFailureReasonDecodeErrorZ : CommonBase {
-       Result_PaymentFailureReasonDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_PaymentFailureReasonDecodeErrorZ() {
-               if (ptr != 0) { bindings.CResult_PaymentFailureReasonDecodeErrorZ_free(ptr); }
-       }
-
-       internal static Result_PaymentFailureReasonDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PaymentFailureReasonDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_PaymentFailureReasonDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_PaymentFailureReasonDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public class Result_PaymentFailureReasonDecodeErrorZ_OK : Result_PaymentFailureReasonDecodeErrorZ {
-               public readonly PaymentFailureReason res;
-               internal Result_PaymentFailureReasonDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       this.res = bindings.CResult_PaymentFailureReasonDecodeErrorZ_get_ok(ptr);
-               }
-       }
-
-       public class Result_PaymentFailureReasonDecodeErrorZ_Err : Result_PaymentFailureReasonDecodeErrorZ {
-               public readonly DecodeError err;
-               internal Result_PaymentFailureReasonDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long err = bindings.CResult_PaymentFailureReasonDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_PaymentFailureReasonDecodeErrorZ in the success state.
-        */
-       public static Result_PaymentFailureReasonDecodeErrorZ ok(PaymentFailureReason o) {
-               long ret = bindings.CResult_PaymentFailureReasonDecodeErrorZ_ok(o);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentFailureReasonDecodeErrorZ ret_hu_conv = Result_PaymentFailureReasonDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PaymentFailureReasonDecodeErrorZ in the error state.
-        */
-       public static Result_PaymentFailureReasonDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_PaymentFailureReasonDecodeErrorZ_err(e.ptr);
-               GC.KeepAlive(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentFailureReasonDecodeErrorZ ret_hu_conv = Result_PaymentFailureReasonDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_PaymentFailureReasonDecodeErrorZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PaymentFailureReasonDecodeErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PaymentFailureReasonDecodeErrorZ clone() {
-               long ret = bindings.CResult_PaymentFailureReasonDecodeErrorZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentFailureReasonDecodeErrorZ ret_hu_conv = Result_PaymentFailureReasonDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 1464897dcfe543d4621989c42cd9b6617460869e..6c1fe339b814abdabb1c08e54dff097ceb4f9214 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PaymentParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentParametersDecodeErrorZ ret_hu_conv = Result_PaymentParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PaymentParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentParametersDecodeErrorZ ret_hu_conv = Result_PaymentParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f4ab8b26972eea213f18cf6ebd39b897e118f1aa..3c6d01988eff332bd35c4f76c6307e6b95042c91 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PaymentPurposeDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentPurposeDecodeErrorZ ret_hu_conv = Result_PaymentPurposeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PaymentPurposeDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentPurposeDecodeErrorZ ret_hu_conv = Result_PaymentPurposeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 01e945f8001268c0793d755300cfb82ab9c807e1..fbc9e7bba421224c6ce3f58c615480b78bc9241c 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PaymentRelayDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentRelayDecodeErrorZ ret_hu_conv = Result_PaymentRelayDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PaymentRelayDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentRelayDecodeErrorZ ret_hu_conv = Result_PaymentRelayDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 64592855c9bfbeb01b3446dcdebaa6292d369225..477c68aa19edb5724a2adc665d1a80dc84adc9de 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PendingHTLCInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PendingHTLCInfoDecodeErrorZ ret_hu_conv = Result_PendingHTLCInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PendingHTLCInfoDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PendingHTLCInfoDecodeErrorZ ret_hu_conv = Result_PendingHTLCInfoDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index aaf1b9b981f7b038b4b801f9867e91b299fdd016..690fef62240ce01b63af97d9eeb1b1c48f1e3131 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PendingHTLCInfoInboundHTLCErrZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PendingHTLCInfoInboundHTLCErrZ ret_hu_conv = Result_PendingHTLCInfoInboundHTLCErrZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PendingHTLCInfoInboundHTLCErrZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PendingHTLCInfoInboundHTLCErrZ ret_hu_conv = Result_PendingHTLCInfoInboundHTLCErrZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index e4527a21dc1713ab16215c382fa76cfaab91ab0c..6d30fa965721cf3220b2d12a73ce5fd8af4b0e97 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PendingHTLCRoutingDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PendingHTLCRoutingDecodeErrorZ ret_hu_conv = Result_PendingHTLCRoutingDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PendingHTLCRoutingDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PendingHTLCRoutingDecodeErrorZ ret_hu_conv = Result_PendingHTLCRoutingDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6878b86f5cc7e7056c4110062295eda91c73f670..65d6f0cb8b5bb871c7b3b314687d27a74e746e5b 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PhantomRouteHintsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PhantomRouteHintsDecodeErrorZ ret_hu_conv = Result_PhantomRouteHintsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PhantomRouteHintsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PhantomRouteHintsDecodeErrorZ ret_hu_conv = Result_PhantomRouteHintsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index e0e355b399ab93ce877c490ee26fff3cd6e893d9..54f6fa811727ecddaa283dfdabaf4ab4198d8b25 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PingDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PingDecodeErrorZ ret_hu_conv = Result_PingDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PingDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PingDecodeErrorZ ret_hu_conv = Result_PingDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 1211fe6819339a3926fe772c3d3b969928a9d2e7..c9a0aaff5da7346fe9c76ef14ca8fd56e2d7cc75 100644 (file)
@@ -46,7 +46,6 @@ public class Result_PongDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PongDecodeErrorZ ret_hu_conv = Result_PongDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_PongDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PongDecodeErrorZ ret_hu_conv = Result_PongDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index cf59f0873eae0bfed44af047c6d01eb09cfb703c..fb4d151a328cb5ec96f161a9e606d606d4c153fa 100644 (file)
@@ -43,7 +43,6 @@ public class Result_PositiveTimestampCreationErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PositiveTimestampCreationErrorZ ret_hu_conv = Result_PositiveTimestampCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index ba1b46a1ed4f2e05df68b8301eb0e52632aba78f..beb5d9c18fc9439c97b6041d6b3084800c37857c 100644 (file)
@@ -43,7 +43,6 @@ public class Result_PrivateRouteCreationErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PrivateRouteCreationErrorZ ret_hu_conv = Result_PrivateRouteCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index f887d5472e54d31e5895666a3dcd3100a519c34c..e5800f56717874d1c570de02e1bc2eed1c4dc6f1 100644 (file)
@@ -48,7 +48,7 @@ public class Result_ProbabilisticScorerDecodeErrorZ : CommonBase {
                GC.KeepAlive(o_logger);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ProbabilisticScorerDecodeErrorZ ret_hu_conv = Result_ProbabilisticScorerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_decay_params); };
+               ;
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_network_graph); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o_logger); };
                return ret_hu_conv;
@@ -62,7 +62,6 @@ public class Result_ProbabilisticScorerDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ProbabilisticScorerDecodeErrorZ ret_hu_conv = Result_ProbabilisticScorerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 15726858ffc69019091a3f07a44477cad41094bf..8f9ea2d5df75164693b435b9a5d28a92551322d3 100644 (file)
@@ -46,7 +46,6 @@ public class Result_QueryChannelRangeDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_QueryChannelRangeDecodeErrorZ ret_hu_conv = Result_QueryChannelRangeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_QueryChannelRangeDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_QueryChannelRangeDecodeErrorZ ret_hu_conv = Result_QueryChannelRangeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d697980675b47002806bdd937afade2c5b49a571..121845c963d2d69fcd44dc8d0958337c545feedb 100644 (file)
@@ -46,7 +46,6 @@ public class Result_QueryShortChannelIdsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_QueryShortChannelIdsDecodeErrorZ ret_hu_conv = Result_QueryShortChannelIdsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_QueryShortChannelIdsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_QueryShortChannelIdsDecodeErrorZ ret_hu_conv = Result_QueryShortChannelIdsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a29aed19a4f35f5d29736454c0d5dd00a69aa1d9..9b180f91b9a1e20b77b56efa4105dafb0aacc2bc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RecipientOnionFieldsDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RecipientOnionFieldsDecodeErrorZ ret_hu_conv = Result_RecipientOnionFieldsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RecipientOnionFieldsDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RecipientOnionFieldsDecodeErrorZ ret_hu_conv = Result_RecipientOnionFieldsDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 87b0d9e26782c46bae49247981222ac68cc6a0e0..0939c42a92a14e7f6211af0beb6e08342400439f 100644 (file)
@@ -41,7 +41,6 @@ public class Result_RecipientOnionFieldsNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RecipientOnionFieldsNoneZ ret_hu_conv = Result_RecipientOnionFieldsNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 320ee92af57e8cb45a4c320fcacc7e21b81c0390..1fb30f5f7bd75f0f57711adced57dd9ffc1cc991 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RefundBolt12ParseErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundBolt12ParseErrorZ ret_hu_conv = Result_RefundBolt12ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RefundBolt12ParseErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundBolt12ParseErrorZ ret_hu_conv = Result_RefundBolt12ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d926ad2db1d5fc51e8407def5f52534610150a88..c970673914493a79796c534ec62b6b882d852793 100644 (file)
@@ -43,7 +43,6 @@ public class Result_RefundBolt12SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundBolt12SemanticErrorZ ret_hu_conv = Result_RefundBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_RefundDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_RefundDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..8cb4249
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_RefundDecodeErrorZ : CommonBase {
+       Result_RefundDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_RefundDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_RefundDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_RefundDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_RefundDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_RefundDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_RefundDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_RefundDecodeErrorZ_OK : Result_RefundDecodeErrorZ {
+               public readonly Refund res;
+               internal Result_RefundDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_RefundDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Refund res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.Refund(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_RefundDecodeErrorZ_Err : Result_RefundDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_RefundDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_RefundDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_RefundDecodeErrorZ in the success state.
+        */
+       public static Result_RefundDecodeErrorZ ok(org.ldk.structs.Refund o) {
+               long ret = bindings.CResult_RefundDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RefundDecodeErrorZ ret_hu_conv = Result_RefundDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_RefundDecodeErrorZ in the error state.
+        */
+       public static Result_RefundDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_RefundDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RefundDecodeErrorZ ret_hu_conv = Result_RefundDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_RefundDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_RefundDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_RefundDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_RefundDecodeErrorZ clone() {
+               long ret = bindings.CResult_RefundDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RefundDecodeErrorZ ret_hu_conv = Result_RefundDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 820bf5bfbadb10b7ae0ed571e0850726123059f2..f3e23d88138a4f9073c97ce1508fe52642f7ec0f 100644 (file)
@@ -43,7 +43,6 @@ public class Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ :
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ ret_hu_conv = Result_RefundMaybeWithDerivedMetadataBuilderBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_ReleaseHeldHtlcDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_ReleaseHeldHtlcDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..1dc830d
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_ReleaseHeldHtlcDecodeErrorZ : CommonBase {
+       Result_ReleaseHeldHtlcDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_ReleaseHeldHtlcDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_ReleaseHeldHtlcDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ReleaseHeldHtlcDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ReleaseHeldHtlcDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_ReleaseHeldHtlcDecodeErrorZ_OK : Result_ReleaseHeldHtlcDecodeErrorZ {
+               public readonly ReleaseHeldHtlc res;
+               internal Result_ReleaseHeldHtlcDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.ReleaseHeldHtlc res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.ReleaseHeldHtlc(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_ReleaseHeldHtlcDecodeErrorZ_Err : Result_ReleaseHeldHtlcDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_ReleaseHeldHtlcDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ReleaseHeldHtlcDecodeErrorZ in the success state.
+        */
+       public static Result_ReleaseHeldHtlcDecodeErrorZ ok(org.ldk.structs.ReleaseHeldHtlc o) {
+               long ret = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReleaseHeldHtlcDecodeErrorZ ret_hu_conv = Result_ReleaseHeldHtlcDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ReleaseHeldHtlcDecodeErrorZ in the error state.
+        */
+       public static Result_ReleaseHeldHtlcDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReleaseHeldHtlcDecodeErrorZ ret_hu_conv = Result_ReleaseHeldHtlcDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ReleaseHeldHtlcDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ReleaseHeldHtlcDecodeErrorZ clone() {
+               long ret = bindings.CResult_ReleaseHeldHtlcDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReleaseHeldHtlcDecodeErrorZ ret_hu_conv = Result_ReleaseHeldHtlcDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 513b5e4e1bbcff756cc85f52e2d01f72b90a6e4e..33b2171b2f34917a8d7992c028bfea18f8b93f0e 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ReplyChannelRangeDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ReplyChannelRangeDecodeErrorZ ret_hu_conv = Result_ReplyChannelRangeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ReplyChannelRangeDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ReplyChannelRangeDecodeErrorZ ret_hu_conv = Result_ReplyChannelRangeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 59802c4c2a0fddc9e8fe67f18dc545d627edb2b3..b1c2d23eac32b9d844ec823632fbf2eb583ace8b 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ReplyShortChannelIdsEndDecodeErrorZ ret_hu_conv = Result_ReplyShortChannelIdsEndDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ReplyShortChannelIdsEndDecodeErrorZ ret_hu_conv = Result_ReplyShortChannelIdsEndDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_ResponderDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_ResponderDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..65d8f08
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_ResponderDecodeErrorZ : CommonBase {
+       Result_ResponderDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_ResponderDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_ResponderDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_ResponderDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ResponderDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ResponderDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ResponderDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_ResponderDecodeErrorZ_OK : Result_ResponderDecodeErrorZ {
+               public readonly Responder res;
+               internal Result_ResponderDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_ResponderDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Responder res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.Responder(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_ResponderDecodeErrorZ_Err : Result_ResponderDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_ResponderDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_ResponderDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ResponderDecodeErrorZ in the success state.
+        */
+       public static Result_ResponderDecodeErrorZ ok(org.ldk.structs.Responder o) {
+               long ret = bindings.CResult_ResponderDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ResponderDecodeErrorZ ret_hu_conv = Result_ResponderDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ResponderDecodeErrorZ in the error state.
+        */
+       public static Result_ResponderDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_ResponderDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ResponderDecodeErrorZ ret_hu_conv = Result_ResponderDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_ResponderDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_ResponderDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ResponderDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ResponderDecodeErrorZ clone() {
+               long ret = bindings.CResult_ResponderDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ResponderDecodeErrorZ ret_hu_conv = Result_ResponderDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index db35a4d0991e1fecf342cf08e4a64ca65a71a196..27e7daf09ffc182d5e22d2e8073ece3921e61e34 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RetryDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RetryDecodeErrorZ ret_hu_conv = Result_RetryDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RetryDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RetryDecodeErrorZ ret_hu_conv = Result_RetryDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ec111f904ffd362eb226837e9cbcd4cb52e832e9..7d7883826df35ac1b9543de78b7edec5e249805f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RevocationBasepointDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RevocationBasepointDecodeErrorZ ret_hu_conv = Result_RevocationBasepointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RevocationBasepointDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RevocationBasepointDecodeErrorZ ret_hu_conv = Result_RevocationBasepointDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 8b672e6aee72a55b18b0429bce39bbf603c707f5..fc556c91c7415f555a8e856602f54a1da51b2fd6 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RevocationKeyDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RevocationKeyDecodeErrorZ ret_hu_conv = Result_RevocationKeyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RevocationKeyDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RevocationKeyDecodeErrorZ ret_hu_conv = Result_RevocationKeyDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 9fb090dd7f0b9dcc5049c38d999ba7c323c830b7..47f8dd25f4db1442247c91f751d892292ffc9e1f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RevokeAndACKDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RevokeAndACKDecodeErrorZ ret_hu_conv = Result_RevokeAndACKDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RevokeAndACKDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RevokeAndACKDecodeErrorZ ret_hu_conv = Result_RevokeAndACKDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 548a404c662170b6435a0a2acfb0939e5a4ea190..a4361434b21f48ce1e9238b950b1f0d7846bd8da 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RouteDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteDecodeErrorZ ret_hu_conv = Result_RouteDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RouteDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteDecodeErrorZ ret_hu_conv = Result_RouteDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index aa7ab448d8ae60fab798fd4c3a1aa79a1bc96b80..e8def913e39f8c9fa34b2543c290cd2ad07f6d88 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RouteHintDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteHintDecodeErrorZ ret_hu_conv = Result_RouteHintDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RouteHintDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteHintDecodeErrorZ ret_hu_conv = Result_RouteHintDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 1dfe84a7ef86128da02056f2120addf6e7962a69..c4a9a17b8e2a738202d5d5f5ba9411be4ba0f1ed 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RouteHintHopDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteHintHopDecodeErrorZ ret_hu_conv = Result_RouteHintHopDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RouteHintHopDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteHintHopDecodeErrorZ ret_hu_conv = Result_RouteHintHopDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 5dc7988779cedc1b472c6a68403fe3d5b2d01e99..a92aacfcc9b9b35295f17e99f00d81cfa30f7fa8 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RouteHopDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteHopDecodeErrorZ ret_hu_conv = Result_RouteHopDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RouteHopDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteHopDecodeErrorZ ret_hu_conv = Result_RouteHopDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 52d35517de071f3d516a9e1a138dcb5d7cda120d..b661bddbd7af28a0ce2d0ac52db05f427bc22b7b 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RouteLightningErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RouteLightningErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 77380130b508630a9f07f885ef480a12e5706b9d..091031827db5524cf88483f5fec49ebba9f2ace1 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RouteParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteParametersDecodeErrorZ ret_hu_conv = Result_RouteParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RouteParametersDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteParametersDecodeErrorZ ret_hu_conv = Result_RouteParametersDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 21d1577aebbd2331c3e46f1e9d992a7edfc3a422..a7a123f73df8acbca21732634ab5335feacdd0b5 100644 (file)
@@ -46,7 +46,6 @@ public class Result_RoutingFeesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RoutingFeesDecodeErrorZ ret_hu_conv = Result_RoutingFeesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_RoutingFeesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RoutingFeesDecodeErrorZ ret_hu_conv = Result_RoutingFeesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index b23c46ac157134f6d6f5dcbc7b9b6ad87648a018..9faa837115b19f9c69b16bcf6eadd1e75ac27302 100644 (file)
@@ -46,7 +46,6 @@ public class Result_SendSuccessSendErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SendSuccessSendErrorZ ret_hu_conv = Result_SendSuccessSendErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_SendSuccessSendErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SendSuccessSendErrorZ ret_hu_conv = Result_SendSuccessSendErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c711270207f5167c0656a7b593fc961eefa50a8b..2bbe158525d3c9158c286342651fa6af20f6c36f 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ShutdownDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownDecodeErrorZ ret_hu_conv = Result_ShutdownDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ShutdownDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownDecodeErrorZ ret_hu_conv = Result_ShutdownDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index d1791c16860f16f0c28cc6bfc81fcf14302daf6c..cecab43d89d520f4cbc4d3d817f93e01aae3bb17 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ShutdownScriptDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownScriptDecodeErrorZ ret_hu_conv = Result_ShutdownScriptDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ShutdownScriptDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownScriptDecodeErrorZ ret_hu_conv = Result_ShutdownScriptDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c6c8cdb9279ca248e286af4965139f59091a9467..4e4a1567b172cd1ea5969f263538cec63e98b8a8 100644 (file)
@@ -46,7 +46,6 @@ public class Result_ShutdownScriptInvalidShutdownScriptZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownScriptInvalidShutdownScriptZ ret_hu_conv = Result_ShutdownScriptInvalidShutdownScriptZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_ShutdownScriptInvalidShutdownScriptZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownScriptInvalidShutdownScriptZ ret_hu_conv = Result_ShutdownScriptInvalidShutdownScriptZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 13e659f0dbd21961d5384b3a798c6f03edf2ead9..2e3b30dd9cd15e74000d965110775856b37b686f 100644 (file)
@@ -41,7 +41,6 @@ public class Result_ShutdownScriptNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ShutdownScriptNoneZ ret_hu_conv = Result_ShutdownScriptNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 442c71b6d00ee37a93757441c5661307f8245fa0..e4f5ab38f065b3029a0c706251c104b2c53d0871 100644 (file)
@@ -54,7 +54,6 @@ public class Result_SiPrefixBolt11ParseErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SiPrefixBolt11ParseErrorZ ret_hu_conv = Result_SiPrefixBolt11ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 5377866ef9a7c81676e26aeff8401c7b9c8e3476..ef2f5585acd75dd27f7016baa35e7f06a4cbb822 100644 (file)
@@ -46,7 +46,6 @@ public class Result_SignedRawBolt11InvoiceBolt11ParseErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SignedRawBolt11InvoiceBolt11ParseErrorZ ret_hu_conv = Result_SignedRawBolt11InvoiceBolt11ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_SignedRawBolt11InvoiceBolt11ParseErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SignedRawBolt11InvoiceBolt11ParseErrorZ ret_hu_conv = Result_SignedRawBolt11InvoiceBolt11ParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 4752af6cd8121d93a7c254b02e01c40a6dce6571..275b8c37667d608c6126211b47380f65c2db73e1 100644 (file)
@@ -46,7 +46,6 @@ public class Result_SocketAddressDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SocketAddressDecodeErrorZ ret_hu_conv = Result_SocketAddressDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_SocketAddressDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SocketAddressDecodeErrorZ ret_hu_conv = Result_SocketAddressDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 6972f8cd329eddd60ecb7a22e9b01da4535b4675..354c3a6880a46b5019cd13feaedb7d85fedff608 100644 (file)
@@ -43,7 +43,6 @@ public class Result_SocketAddressSocketAddressParseErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SocketAddressSocketAddressParseErrorZ ret_hu_conv = Result_SocketAddressSocketAddressParseErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index a04b460c9334ac9605f1e9a677c83e68472e7271..b0bc1e8f19083b79b5facdf50b45bdbd448229b0 100644 (file)
@@ -46,7 +46,6 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SpendableOutputDescriptorDecodeErrorZ ret_hu_conv = Result_SpendableOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SpendableOutputDescriptorDecodeErrorZ ret_hu_conv = Result_SpendableOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index e3da67c7a476a45169588c905817abc7a11d8557..2954e110cf0f0b01945cd00c65f06cef9ff0cde6 100644 (file)
@@ -46,7 +46,6 @@ public class Result_SpliceAckDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SpliceAckDecodeErrorZ ret_hu_conv = Result_SpliceAckDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_SpliceAckDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SpliceAckDecodeErrorZ ret_hu_conv = Result_SpliceAckDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_SpliceDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_SpliceDecodeErrorZ.cs
deleted file mode 100644 (file)
index c7f5c79..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_SpliceDecodeErrorZ : CommonBase {
-       Result_SpliceDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_SpliceDecodeErrorZ() {
-               if (ptr != 0) { bindings.CResult_SpliceDecodeErrorZ_free(ptr); }
-       }
-
-       internal static Result_SpliceDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_SpliceDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_SpliceDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_SpliceDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public class Result_SpliceDecodeErrorZ_OK : Result_SpliceDecodeErrorZ {
-               public readonly Splice res;
-               internal Result_SpliceDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_SpliceDecodeErrorZ_get_ok(ptr);
-                       org.ldk.structs.Splice res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.Splice(null, res); }
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public class Result_SpliceDecodeErrorZ_Err : Result_SpliceDecodeErrorZ {
-               public readonly DecodeError err;
-               internal Result_SpliceDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long err = bindings.CResult_SpliceDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_SpliceDecodeErrorZ in the success state.
-        */
-       public static Result_SpliceDecodeErrorZ ok(org.ldk.structs.Splice o) {
-               long ret = bindings.CResult_SpliceDecodeErrorZ_ok(o.ptr);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SpliceDecodeErrorZ ret_hu_conv = Result_SpliceDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_SpliceDecodeErrorZ in the error state.
-        */
-       public static Result_SpliceDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_SpliceDecodeErrorZ_err(e.ptr);
-               GC.KeepAlive(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SpliceDecodeErrorZ ret_hu_conv = Result_SpliceDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_SpliceDecodeErrorZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_SpliceDecodeErrorZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_SpliceDecodeErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_SpliceDecodeErrorZ clone() {
-               long ret = bindings.CResult_SpliceDecodeErrorZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SpliceDecodeErrorZ ret_hu_conv = Result_SpliceDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/Result_SpliceInitDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_SpliceInitDecodeErrorZ.cs
new file mode 100644 (file)
index 0000000..c89021f
--- /dev/null
@@ -0,0 +1,91 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result_SpliceInitDecodeErrorZ : CommonBase {
+       Result_SpliceInitDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result_SpliceInitDecodeErrorZ() {
+               if (ptr != 0) { bindings.CResult_SpliceInitDecodeErrorZ_free(ptr); }
+       }
+
+       internal static Result_SpliceInitDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_SpliceInitDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_SpliceInitDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_SpliceInitDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public class Result_SpliceInitDecodeErrorZ_OK : Result_SpliceInitDecodeErrorZ {
+               public readonly SpliceInit res;
+               internal Result_SpliceInitDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult_SpliceInitDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.SpliceInit res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.SpliceInit(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.AddLast(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public class Result_SpliceInitDecodeErrorZ_Err : Result_SpliceInitDecodeErrorZ {
+               public readonly DecodeError err;
+               internal Result_SpliceInitDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long err = bindings.CResult_SpliceInitDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_SpliceInitDecodeErrorZ in the success state.
+        */
+       public static Result_SpliceInitDecodeErrorZ ok(org.ldk.structs.SpliceInit o) {
+               long ret = bindings.CResult_SpliceInitDecodeErrorZ_ok(o.ptr);
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SpliceInitDecodeErrorZ ret_hu_conv = Result_SpliceInitDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_SpliceInitDecodeErrorZ in the error state.
+        */
+       public static Result_SpliceInitDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_SpliceInitDecodeErrorZ_err(e.ptr);
+               GC.KeepAlive(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SpliceInitDecodeErrorZ ret_hu_conv = Result_SpliceInitDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult_SpliceInitDecodeErrorZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult_SpliceInitDecodeErrorZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_SpliceInitDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_SpliceInitDecodeErrorZ clone() {
+               long ret = bindings.CResult_SpliceInitDecodeErrorZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SpliceInitDecodeErrorZ ret_hu_conv = Result_SpliceInitDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 0aa08456aeeff531a978ced4429e11a39c0b17d8..65dba3c0fe4d00a87dac4227a0cb4d15bac9b168 100644 (file)
@@ -46,7 +46,6 @@ public class Result_SpliceLockedDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SpliceLockedDecodeErrorZ ret_hu_conv = Result_SpliceLockedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_SpliceLockedDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SpliceLockedDecodeErrorZ ret_hu_conv = Result_SpliceLockedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index dd98f277b70fa6c4960342704a6b84ce69328dc2..877f7a0ae4c6971f77a8df1fbe6ea33228287f23 100644 (file)
@@ -46,7 +46,6 @@ public class Result_StaticPaymentOutputDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_StaticPaymentOutputDescriptorDecodeErrorZ ret_hu_conv = Result_StaticPaymentOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_StaticPaymentOutputDescriptorDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_StaticPaymentOutputDescriptorDecodeErrorZ ret_hu_conv = Result_StaticPaymentOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index be1dd7701ea795b1fd2aae0cfae197b45b8dc1e9..1877b3c16c6b0a44261b3b5395fa774548894162 100644 (file)
@@ -46,7 +46,6 @@ public class Result_StfuDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_StfuDecodeErrorZ ret_hu_conv = Result_StfuDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_StfuDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_StfuDecodeErrorZ ret_hu_conv = Result_StfuDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_StrSecp256k1ErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_StrSecp256k1ErrorZ.cs
deleted file mode 100644 (file)
index 421ccb3..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_StrSecp256k1ErrorZ : CommonBase {
-       Result_StrSecp256k1ErrorZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_StrSecp256k1ErrorZ() {
-               if (ptr != 0) { bindings.CResult_StrSecp256k1ErrorZ_free(ptr); }
-       }
-
-       internal static Result_StrSecp256k1ErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_StrSecp256k1ErrorZ_is_ok(ptr)) {
-                       return new Result_StrSecp256k1ErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_StrSecp256k1ErrorZ_Err(null, ptr);
-               }
-       }
-       public class Result_StrSecp256k1ErrorZ_OK : Result_StrSecp256k1ErrorZ {
-               public readonly string res;
-               internal Result_StrSecp256k1ErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_StrSecp256k1ErrorZ_get_ok(ptr);
-                       string res_conv = InternalUtils.decodeString(res);
-                       this.res = res_conv;
-               }
-       }
-
-       public class Result_StrSecp256k1ErrorZ_Err : Result_StrSecp256k1ErrorZ {
-               public readonly Secp256k1Error err;
-               internal Result_StrSecp256k1ErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-                       this.err = bindings.CResult_StrSecp256k1ErrorZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_StrSecp256k1ErrorZ in the success state.
-        */
-       public static Result_StrSecp256k1ErrorZ ok(string o) {
-               long ret = bindings.CResult_StrSecp256k1ErrorZ_ok(InternalUtils.encodeString(o));
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_StrSecp256k1ErrorZ in the error state.
-        */
-       public static Result_StrSecp256k1ErrorZ err(Secp256k1Error e) {
-               long ret = bindings.CResult_StrSecp256k1ErrorZ_err(e);
-               GC.KeepAlive(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_StrSecp256k1ErrorZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_StrSecp256k1ErrorZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_StrSecp256k1ErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_StrSecp256k1ErrorZ clone() {
-               long ret = bindings.CResult_StrSecp256k1ErrorZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 44bfed188b17ca4a0b3ee7450b329a8161fcad7a..2675950cf4dac8018c4558cec89fbecd8a0cc401 100644 (file)
@@ -56,7 +56,6 @@ public class Result_ThirtyTwoBytesAPIErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesAPIErrorZ ret_hu_conv = Result_ThirtyTwoBytesAPIErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f3869ba10eead96032b55404afc025926bf514f0..64a67ef5ad217ecfd471c5f02c949580da851ef5 100644 (file)
@@ -56,7 +56,6 @@ public class Result_ThirtyTwoBytesPaymentSendFailureZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesPaymentSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesPaymentSendFailureZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 3afd7ee11d7924fafc4f8868236c85f2f0ebd408..0292ad297b29693b593157e5f637442573c94a1a 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TrackedSpendableOutputDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TrackedSpendableOutputDecodeErrorZ ret_hu_conv = Result_TrackedSpendableOutputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TrackedSpendableOutputDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TrackedSpendableOutputDecodeErrorZ ret_hu_conv = Result_TrackedSpendableOutputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7508f5000e960943fe3b2c8e21c67ce617d666a0..2169fb25afad33276301a111de5261d0bb085175 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TransactionU16LenLimitedDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TransactionU16LenLimitedDecodeErrorZ ret_hu_conv = Result_TransactionU16LenLimitedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TransactionU16LenLimitedDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TransactionU16LenLimitedDecodeErrorZ ret_hu_conv = Result_TransactionU16LenLimitedDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 5b5442ec7f226b702dcce385b5f1280eaa263b08..a3d493cf528549452d5865e1eac9c3c6a65e0ec7 100644 (file)
@@ -41,7 +41,6 @@ public class Result_TransactionU16LenLimitedNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TransactionU16LenLimitedNoneZ ret_hu_conv = Result_TransactionU16LenLimitedNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 2c25b573d915913ac36b183f5a26cdbfc2a066e2..9cd26713946e3d7951907dc5603b23a821df53be 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxAbortDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAbortDecodeErrorZ ret_hu_conv = Result_TxAbortDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxAbortDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAbortDecodeErrorZ ret_hu_conv = Result_TxAbortDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 19ff18c39ba5cc4c878f9dbd370f6be830da22b0..cc921659a79f609a35600728af8ccac9891fd7a2 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxAckRbfDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAckRbfDecodeErrorZ ret_hu_conv = Result_TxAckRbfDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxAckRbfDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAckRbfDecodeErrorZ ret_hu_conv = Result_TxAckRbfDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ad5ead8fb52056877e911ccef98200ebf46dd6e1..18d6f31bffbd21809394c610ac557f84f7a350d6 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxAddInputDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAddInputDecodeErrorZ ret_hu_conv = Result_TxAddInputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxAddInputDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAddInputDecodeErrorZ ret_hu_conv = Result_TxAddInputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 0d2d4143974259ff24b8f2e5c10e1423abae22d6..7ff87091f449c4093575ad548fb5ac6a461ab15d 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxAddOutputDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAddOutputDecodeErrorZ ret_hu_conv = Result_TxAddOutputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxAddOutputDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxAddOutputDecodeErrorZ ret_hu_conv = Result_TxAddOutputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 9d2e5d6d4d7613aa2299cb465b689baea09257f2..534d35a708aca80fbe44713ae708131b7f07d0fa 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxCompleteDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxCompleteDecodeErrorZ ret_hu_conv = Result_TxCompleteDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxCompleteDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxCompleteDecodeErrorZ ret_hu_conv = Result_TxCompleteDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 66017604ccace543c118b5b0c2c5f19b89ea3ed7..9833961070b88afb34d6380a7c3c5d89a865508a 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxCreationKeysDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxCreationKeysDecodeErrorZ ret_hu_conv = Result_TxCreationKeysDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxCreationKeysDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxCreationKeysDecodeErrorZ ret_hu_conv = Result_TxCreationKeysDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 33e386979eb29da9d8d4edb6b1fb8d6a92ca6d1d..1b91bc9363d78538ee1e7b0ebc22a3c6f1f9ca71 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxInitRbfDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxInitRbfDecodeErrorZ ret_hu_conv = Result_TxInitRbfDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxInitRbfDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxInitRbfDecodeErrorZ ret_hu_conv = Result_TxInitRbfDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 3d0b4ee8afe775746c00a5fd6284caf36db69ecf..daf6543c2c744317411030993fec8a985dcfa063 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxRemoveInputDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxRemoveInputDecodeErrorZ ret_hu_conv = Result_TxRemoveInputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxRemoveInputDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxRemoveInputDecodeErrorZ ret_hu_conv = Result_TxRemoveInputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f005783e9d2a2530dae9f08eadc78f0e85aaee81..992a3b307a0fbb2d3e566fffb4484b7068d22b11 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxRemoveOutputDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxRemoveOutputDecodeErrorZ ret_hu_conv = Result_TxRemoveOutputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxRemoveOutputDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxRemoveOutputDecodeErrorZ ret_hu_conv = Result_TxRemoveOutputDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index db18f188483622ef8c80a34b5fb12ef14091c4db..4fc22ed65e4c4d98db5b688bfeb0732cc156cd66 100644 (file)
@@ -46,7 +46,6 @@ public class Result_TxSignaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxSignaturesDecodeErrorZ ret_hu_conv = Result_TxSignaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_TxSignaturesDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxSignaturesDecodeErrorZ ret_hu_conv = Result_TxSignaturesDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 805857dd140a42add905270feb3322fa162b84cb..d98d08d564a8e4098cc9419f078b854c38bb4943 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UnknownPaymentContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnknownPaymentContextDecodeErrorZ ret_hu_conv = Result_UnknownPaymentContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UnknownPaymentContextDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnknownPaymentContextDecodeErrorZ ret_hu_conv = Result_UnknownPaymentContextDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index a51ee9eb67ec980d450c84ee0cc4bcf86f05d78a..11e7757f914634d2b6d8c268c318f0a6e82bd52f 100644 (file)
@@ -43,7 +43,6 @@ public class Result_UnsignedBolt12InvoiceBolt12SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedBolt12InvoiceBolt12SemanticErrorZ ret_hu_conv = Result_UnsignedBolt12InvoiceBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 8ee0b2101566d7260c7d8a67c7253b91933ab3cd..dca0fc26b53db40e5dfddaf93c2979688ba6ee02 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedChannelAnnouncementDecodeErrorZ ret_hu_conv = Result_UnsignedChannelAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedChannelAnnouncementDecodeErrorZ ret_hu_conv = Result_UnsignedChannelAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 048c120db95d1ebc7df46321ba4af97125f4178e..60064cc5b09dc98607bfc42e59d07b65e9293bbc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedChannelUpdateDecodeErrorZ ret_hu_conv = Result_UnsignedChannelUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedChannelUpdateDecodeErrorZ ret_hu_conv = Result_UnsignedChannelUpdateDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 7a19769d42d2907e3760c58aad341a8f13375bd6..58f20047b89a8aad29da6d98a63a608976471aad 100644 (file)
@@ -43,7 +43,6 @@ public class Result_UnsignedInvoiceRequestBolt12SemanticErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedInvoiceRequestBolt12SemanticErrorZ ret_hu_conv = Result_UnsignedInvoiceRequestBolt12SemanticErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index a1aa0e53aa20032ba9426372f70ff299a90e9197..b7c6394a8f54dcdbc16b377811aa6adc9bc1075c 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedNodeAnnouncementDecodeErrorZ ret_hu_conv = Result_UnsignedNodeAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UnsignedNodeAnnouncementDecodeErrorZ ret_hu_conv = Result_UnsignedNodeAnnouncementDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 5efe4543572e81ea12b6060e2665b103bd26fdb4..d0d45e343ffa296067297275a74d7478135e46fc 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UntrustedStringDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UntrustedStringDecodeErrorZ ret_hu_conv = Result_UntrustedStringDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UntrustedStringDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UntrustedStringDecodeErrorZ ret_hu_conv = Result_UntrustedStringDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index c1dbef0ff9c0970f9f2821f70be8c4a83cd355f9..a58de8b02c3bd3ec4349c197483f21a55e41c96a 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UpdateAddHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateAddHTLCDecodeErrorZ ret_hu_conv = Result_UpdateAddHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UpdateAddHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateAddHTLCDecodeErrorZ ret_hu_conv = Result_UpdateAddHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index ec4bd62435de77ebf5f9d971d4fb4022191a3062..5825a2df46956571d463084ae7abec2db8bdadb8 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UpdateFailHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFailHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFailHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UpdateFailHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFailHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFailHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 4bc43bb3a3dcb6d7d329e2b8f132518c257e84d9..2f8f43dd43ceb597ccd4e6de417370904ea8c23e 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UpdateFailMalformedHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFailMalformedHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFailMalformedHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UpdateFailMalformedHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFailMalformedHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFailMalformedHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 5345c4d8792a806dfe077734fff423a4f5c9846f..2cb5a2ae447e8bc4048ff4e568e844ef9c080dd2 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UpdateFeeDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFeeDecodeErrorZ ret_hu_conv = Result_UpdateFeeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UpdateFeeDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFeeDecodeErrorZ ret_hu_conv = Result_UpdateFeeDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 52c70d5ef34384eecbcea41cc5c7d3a63656506a..c7a40a72ea911afb9408c031ed4299d8545de9d5 100644 (file)
@@ -46,7 +46,6 @@ public class Result_UpdateFulfillHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFulfillHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFulfillHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_UpdateFulfillHTLCDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_UpdateFulfillHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFulfillHTLCDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 5604a78c6927ad1b63509a412a6c9f4dfeafe714..e55b81c3f848453c0703d7e99f072e5a85345934 100644 (file)
@@ -41,7 +41,6 @@ public class Result_VerifiedInvoiceRequestNoneZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
index 30e4e181f7cab64a2c7d4c27e4c11b6851464ea6..077c94564a8611c73e77fa42c12e8c829badfc1e 100644 (file)
@@ -46,7 +46,6 @@ public class Result_WarningMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(o);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_WarningMessageDecodeErrorZ ret_hu_conv = Result_WarningMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
                return ret_hu_conv;
        }
 
@@ -58,7 +57,6 @@ public class Result_WarningMessageDecodeErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_WarningMessageDecodeErrorZ ret_hu_conv = Result_WarningMessageDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Result_WriteableEcdsaChannelSignerDecodeErrorZ.cs b/c_sharp/src/org/ldk/structs/Result_WriteableEcdsaChannelSignerDecodeErrorZ.cs
deleted file mode 100644 (file)
index 6c4cb5c..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-public class Result_WriteableEcdsaChannelSignerDecodeErrorZ : CommonBase {
-       Result_WriteableEcdsaChannelSignerDecodeErrorZ(object _dummy, long ptr) : base(ptr) { }
-       ~Result_WriteableEcdsaChannelSignerDecodeErrorZ() {
-               if (ptr != 0) { bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_free(ptr); }
-       }
-
-       internal static Result_WriteableEcdsaChannelSignerDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_WriteableEcdsaChannelSignerDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_WriteableEcdsaChannelSignerDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public class Result_WriteableEcdsaChannelSignerDecodeErrorZ_OK : Result_WriteableEcdsaChannelSignerDecodeErrorZ {
-               public readonly WriteableEcdsaChannelSigner res;
-               internal Result_WriteableEcdsaChannelSignerDecodeErrorZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long res = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(ptr);
-                       WriteableEcdsaChannelSigner ret_hu_conv = new WriteableEcdsaChannelSigner(null, res);
-                       if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-                       this.res = ret_hu_conv;
-               }
-       }
-
-       public class Result_WriteableEcdsaChannelSignerDecodeErrorZ_Err : Result_WriteableEcdsaChannelSignerDecodeErrorZ {
-               public readonly DecodeError err;
-               internal Result_WriteableEcdsaChannelSignerDecodeErrorZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
-                       long err = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.AddLast(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_WriteableEcdsaChannelSignerDecodeErrorZ in the success state.
-        */
-       public static Result_WriteableEcdsaChannelSignerDecodeErrorZ ok(org.ldk.structs.WriteableEcdsaChannelSigner o) {
-               long ret = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(o.ptr);
-               GC.KeepAlive(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_WriteableEcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_WriteableEcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_WriteableEcdsaChannelSignerDecodeErrorZ in the error state.
-        */
-       public static Result_WriteableEcdsaChannelSignerDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(e.ptr);
-               GC.KeepAlive(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_WriteableEcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_WriteableEcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public bool is_ok() {
-               bool ret = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_is_ok(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_WriteableEcdsaChannelSignerDecodeErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_WriteableEcdsaChannelSignerDecodeErrorZ clone() {
-               long ret = bindings.CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_WriteableEcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_WriteableEcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/Result__u832NoneZ.cs b/c_sharp/src/org/ldk/structs/Result__u832NoneZ.cs
new file mode 100644 (file)
index 0000000..a1279c5
--- /dev/null
@@ -0,0 +1,84 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+public class Result__u832NoneZ : CommonBase {
+       Result__u832NoneZ(object _dummy, long ptr) : base(ptr) { }
+       ~Result__u832NoneZ() {
+               if (ptr != 0) { bindings.CResult__u832NoneZ_free(ptr); }
+       }
+
+       internal static Result__u832NoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult__u832NoneZ_is_ok(ptr)) {
+                       return new Result__u832NoneZ_OK(null, ptr);
+               } else {
+                       return new Result__u832NoneZ_Err(null, ptr);
+               }
+       }
+       public class Result__u832NoneZ_OK : Result__u832NoneZ {
+               public readonly byte[] res;
+               internal Result__u832NoneZ_OK(object _dummy, long ptr) : base(_dummy, ptr) {
+                       long res = bindings.CResult__u832NoneZ_get_ok(ptr);
+                       byte[] res_conv = InternalUtils.decodeUint8Array(res);
+                       this.res = res_conv;
+               }
+       }
+
+       public class Result__u832NoneZ_Err : Result__u832NoneZ {
+               internal Result__u832NoneZ_Err(object _dummy, long ptr) : base(_dummy, ptr) {
+               }
+       }
+
+       /**
+        * Creates a new CResult__u832NoneZ in the success state.
+        */
+       public static Result__u832NoneZ ok(byte[] o) {
+               long ret = bindings.CResult__u832NoneZ_ok(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(o, 32)));
+               GC.KeepAlive(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result__u832NoneZ ret_hu_conv = Result__u832NoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult__u832NoneZ in the error state.
+        */
+       public static Result__u832NoneZ err() {
+               long ret = bindings.CResult__u832NoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result__u832NoneZ ret_hu_conv = Result__u832NoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public bool is_ok() {
+               bool ret = bindings.CResult__u832NoneZ_is_ok(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.CResult__u832NoneZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult__u832NoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result__u832NoneZ clone() {
+               long ret = bindings.CResult__u832NoneZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result__u832NoneZ ret_hu_conv = Result__u832NoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 8ecbc7f89b54456f3977892d0963239cbf8b4323..f9c4e961379a12a483ee6197117009650dff553f 100644 (file)
@@ -54,7 +54,6 @@ public class Result_boolLightningErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_boolLightningErrorZ ret_hu_conv = Result_boolLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 951b16fdfa4160334a896acbd5ea9e5fdf6af8a4..85f2df48f91d2e1e256721fb4d9adcc9a73835d5 100644 (file)
@@ -54,7 +54,6 @@ public class Result_boolPeerHandleErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_boolPeerHandleErrorZ ret_hu_conv = Result_boolPeerHandleErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index 30e15ca2a40e9d0e7f624722e8830417c505adda..38ea424b8e3629251df05a6a5dd2814a442186de 100644 (file)
@@ -54,7 +54,6 @@ public class Result_u32GraphSyncErrorZ : CommonBase {
                GC.KeepAlive(e);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_u32GraphSyncErrorZ ret_hu_conv = Result_u32GraphSyncErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(e); };
                return ret_hu_conv;
        }
 
index f57166a7f63eacfeb8fec2be1c3c2851b0940cd3..abe0c0959ef0bbba20ff7b891a32af8421d3f824 100644 (file)
@@ -14,7 +14,7 @@ namespace org { namespace ldk { namespace structs {
  * per_commitment_point which is used in both commitment and HTLC transactions.
  * 
  * See [the BOLT spec for derivation details]
- * (https://github.com/lightning/bolts/blob/master/03-transactions.md#revocationpubkey-derivation)
+ * <https://github.com/lightning/bolts/blob/master/03-transactions.md#revocationpubkey-derivation>
  */
 public class RevocationKey : CommonBase {
        internal RevocationKey(object _dummy, long ptr) : base(ptr) { }
index e4ea40c72873b66eb51cdc649c018af1be96e4be..0c1a3c222cb66bf5308a75f2509959347d1245dd 100644 (file)
@@ -36,7 +36,6 @@ public class RevokeAndACK : CommonBase {
                bindings.RevokeAndACK_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -90,7 +89,6 @@ public class RevokeAndACK : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RevokeAndACK ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RevokeAndACK(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index d5a7f296f4f15ec090ed519ed8eaa3d0b87abd8a..c5f455a52fa1c3ad847ed575369d1291c59bb54c 100644 (file)
@@ -46,7 +46,6 @@ public class Route : CommonBase {
                bindings.Route_set_paths(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_6 => val_conv_6.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (Path val_conv_6 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_6); }; };
        }
 
        /**
@@ -80,7 +79,6 @@ public class Route : CommonBase {
                bindings.Route_set_route_params(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -95,8 +93,6 @@ public class Route : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Route ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Route(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (Path paths_arg_conv_6 in paths_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(paths_arg_conv_6); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(route_params_arg); };
                return ret_hu_conv;
        }
 
index 04597b7db54df5cf5b614715e64545893bbfa8fb..dc727f1e9f20301a11ec4cd19db263c4cc4cc3f4 100644 (file)
@@ -15,6 +15,28 @@ public class RouteHint : CommonBase {
                if (ptr != 0) { bindings.RouteHint_free(ptr); }
        }
 
+       /**
+        * Serialize the RouteHint object into a byte array which can be read by RouteHint_read
+        */
+       public byte[] write() {
+               long ret = bindings.RouteHint_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a RouteHint from a byte array, created by RouteHint_write
+        */
+       public static Result_RouteHintDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.RouteHint_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RouteHintDecodeErrorZ ret_hu_conv = Result_RouteHintDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        public RouteHintHop[] get_a() {
                long ret = bindings.RouteHint_get_a(this.ptr);
                GC.KeepAlive(this);
@@ -35,7 +57,6 @@ public class RouteHint : CommonBase {
                bindings.RouteHint_set_a(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_14 => val_conv_14.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (RouteHintHop val_conv_14 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_14); }; };
        }
 
        /**
@@ -47,7 +68,6 @@ public class RouteHint : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteHint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteHint(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (RouteHintHop a_arg_conv_14 in a_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a_arg_conv_14); }; };
                return ret_hu_conv;
        }
 
@@ -98,27 +118,5 @@ public class RouteHint : CommonBase {
                if (!(o is RouteHint)) return false;
                return this.eq((RouteHint)o);
        }
-       /**
-        * Serialize the RouteHint object into a byte array which can be read by RouteHint_read
-        */
-       public byte[] write() {
-               long ret = bindings.RouteHint_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a RouteHint from a byte array, created by RouteHint_write
-        */
-       public static Result_RouteHintDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.RouteHint_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_RouteHintDecodeErrorZ ret_hu_conv = Result_RouteHintDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
 }
 } } }
index 54d00a4c4360f887ce84d4d228f482f4287d6dfa..c5a5e303eccffc5ccd6a0dab7fe99c8ba07d77ad 100644 (file)
@@ -19,6 +19,28 @@ public class RouteHintHop : CommonBase {
                if (ptr != 0) { bindings.RouteHintHop_free(ptr); }
        }
 
+       /**
+        * Serialize the RouteHintHop object into a byte array which can be read by RouteHintHop_read
+        */
+       public byte[] write() {
+               long ret = bindings.RouteHintHop_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a RouteHintHop from a byte array, created by RouteHintHop_write
+        */
+       public static Result_RouteHintHopDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.RouteHintHop_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RouteHintHopDecodeErrorZ ret_hu_conv = Result_RouteHintHopDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * The node_id of the non-target end of the route
         */
@@ -76,7 +98,6 @@ public class RouteHintHop : CommonBase {
                bindings.RouteHintHop_set_fees(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -116,7 +137,6 @@ public class RouteHintHop : CommonBase {
                bindings.RouteHintHop_set_htlc_minimum_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -138,7 +158,6 @@ public class RouteHintHop : CommonBase {
                bindings.RouteHintHop_set_htlc_maximum_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -155,9 +174,6 @@ public class RouteHintHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteHintHop ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteHintHop(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fees_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlc_minimum_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(htlc_maximum_msat_arg); };
                return ret_hu_conv;
        }
 
@@ -208,27 +224,5 @@ public class RouteHintHop : CommonBase {
                if (!(o is RouteHintHop)) return false;
                return this.eq((RouteHintHop)o);
        }
-       /**
-        * Serialize the RouteHintHop object into a byte array which can be read by RouteHintHop_read
-        */
-       public byte[] write() {
-               long ret = bindings.RouteHintHop_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a RouteHintHop from a byte array, created by RouteHintHop_write
-        */
-       public static Result_RouteHintHopDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.RouteHintHop_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_RouteHintHopDecodeErrorZ ret_hu_conv = Result_RouteHintHopDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
 }
 } } }
index e26de5bb5fc00c40196ea9e8438512934ebdb24d..4ecae16584cb08b168fe5fcf252abb9f703c4658 100644 (file)
@@ -57,7 +57,6 @@ public class RouteHop : CommonBase {
                bindings.RouteHop_set_node_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -99,16 +98,14 @@ public class RouteHop : CommonBase {
                bindings.RouteHop_set_channel_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
         * The fee taken on this hop (for paying for the use of the *next* channel in the path).
         * If this is the last hop in [`Path::hops`]:
-        * if we're sending to a [`BlindedPath`], this is the fee paid for use of the entire blinded path
+        * if we're sending to a [`BlindedPaymentPath`], this is the fee paid for use of the entire
+        * blinded path
         * otherwise, this is the full value of this [`Path`]'s part of the payment
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
         */
        public long get_fee_msat() {
                long ret = bindings.RouteHop_get_fee_msat(this.ptr);
@@ -119,10 +116,9 @@ public class RouteHop : CommonBase {
        /**
         * The fee taken on this hop (for paying for the use of the *next* channel in the path).
         * If this is the last hop in [`Path::hops`]:
-        * if we're sending to a [`BlindedPath`], this is the fee paid for use of the entire blinded path
+        * if we're sending to a [`BlindedPaymentPath`], this is the fee paid for use of the entire
+        * blinded path
         * otherwise, this is the full value of this [`Path`]'s part of the payment
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
         */
        public void set_fee_msat(long val) {
                bindings.RouteHop_set_fee_msat(this.ptr, val);
@@ -133,10 +129,9 @@ public class RouteHop : CommonBase {
        /**
         * The CLTV delta added for this hop.
         * If this is the last hop in [`Path::hops`]:
-        * if we're sending to a [`BlindedPath`], this is the CLTV delta for the entire blinded path
+        * if we're sending to a [`BlindedPaymentPath`], this is the CLTV delta for the entire blinded
+        * path
         * otherwise, this is the CLTV delta expected at the destination
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
         */
        public int get_cltv_expiry_delta() {
                int ret = bindings.RouteHop_get_cltv_expiry_delta(this.ptr);
@@ -147,10 +142,9 @@ public class RouteHop : CommonBase {
        /**
         * The CLTV delta added for this hop.
         * If this is the last hop in [`Path::hops`]:
-        * if we're sending to a [`BlindedPath`], this is the CLTV delta for the entire blinded path
+        * if we're sending to a [`BlindedPaymentPath`], this is the CLTV delta for the entire blinded
+        * path
         * otherwise, this is the CLTV delta expected at the destination
-        * 
-        * [`BlindedPath`]: crate::blinded_path::BlindedPath
         */
        public void set_cltv_expiry_delta(int val) {
                bindings.RouteHop_set_cltv_expiry_delta(this.ptr, val);
@@ -205,8 +199,6 @@ public class RouteHop : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteHop ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteHop(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_features_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_features_arg); };
                return ret_hu_conv;
        }
 
index 48fb9758123c97fdd44bac7615efd04d5c5d1c94..ed61d088c312eca74ae256feb5e494335e6877f7 100644 (file)
@@ -36,7 +36,6 @@ public class RouteParameters : CommonBase {
                bindings.RouteParameters_set_payment_params(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -86,7 +85,6 @@ public class RouteParameters : CommonBase {
                bindings.RouteParameters_set_max_total_routing_fee_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -100,8 +98,6 @@ public class RouteParameters : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_params_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(max_total_routing_fee_msat_arg); };
                return ret_hu_conv;
        }
 
@@ -164,7 +160,22 @@ public class RouteParameters : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_params); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets the maximum number of hops that can be included in a payment path, based on the provided
+        * [`RecipientOnionFields`] and blinded paths.
+        */
+       public Result_NoneNoneZ set_max_path_length(org.ldk.structs.RecipientOnionFields recipient_onion, bool is_keysend, int best_block_height) {
+               long ret = bindings.RouteParameters_set_max_path_length(this.ptr, recipient_onion.ptr, is_keysend, best_block_height);
+               GC.KeepAlive(this);
+               GC.KeepAlive(recipient_onion);
+               GC.KeepAlive(is_keysend);
+               GC.KeepAlive(best_block_height);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.AddLast(recipient_onion); };
                return ret_hu_conv;
        }
 
index bff09f0f21d3828dc9d66f82b55b5a3a2dccb55e..21dddecab710c7204280bc0b6e30a4a78e159d93 100644 (file)
@@ -29,11 +29,11 @@ public interface RouterInterface {
         * Note that first_hops (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        Result_RouteLightningErrorZ find_route_with_id(byte[] payer, RouteParameters route_params, ChannelDetails[] first_hops, InFlightHtlcs inflight_htlcs, byte[] _payment_hash, byte[] _payment_id);
-       /**Creates [`BlindedPath`]s for payment to the `recipient` node. The channels in `first_hops`
+       /**Creates [`BlindedPaymentPath`]s for payment to the `recipient` node. The channels in `first_hops`
         * are assumed to be with the `recipient`'s peers. The payment secret and any constraints are
         * given in `tlvs`.
         */
-       Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ create_blinded_payment_paths(byte[] recipient, ChannelDetails[] first_hops, ReceiveTlvs tlvs, long amount_msats);
+       Result_CVec_BlindedPaymentPathZNoneZ create_blinded_payment_paths(byte[] recipient, ChannelDetails[] first_hops, ReceiveTlvs tlvs, long amount_msats);
 }
 
 /**
@@ -110,7 +110,7 @@ public class Router : CommonBase {
                        bindings.free_buffer(_first_hops);
                        org.ldk.structs.ReceiveTlvs _tlvs_hu_conv = null; if (_tlvs < 0 || _tlvs > 4096) { _tlvs_hu_conv = new org.ldk.structs.ReceiveTlvs(null, _tlvs); }
                        if (_tlvs_hu_conv != null) { _tlvs_hu_conv.ptrs_to.AddLast(this); };
-                       Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret = arg.create_blinded_payment_paths(_recipient_conv, _first_hops_conv_16_arr, _tlvs_hu_conv, _amount_msats);
+                       Result_CVec_BlindedPaymentPathZNoneZ ret = arg.create_blinded_payment_paths(_recipient_conv, _first_hops_conv_16_arr, _tlvs_hu_conv, _amount_msats);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
                        return result;
@@ -150,7 +150,6 @@ public class Router : CommonBase {
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(route_params); };
                if (first_hops != null) { foreach (ChannelDetails first_hops_conv_16 in first_hops) { if (this != null) { this.ptrs_to.AddLast(first_hops_conv_16); }; } };
-               if (this != null) { this.ptrs_to.AddLast(inflight_htlcs); };
                return ret_hu_conv;
        }
 
@@ -178,16 +177,15 @@ public class Router : CommonBase {
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.AddLast(route_params); };
                if (first_hops != null) { foreach (ChannelDetails first_hops_conv_16 in first_hops) { if (this != null) { this.ptrs_to.AddLast(first_hops_conv_16); }; } };
-               if (this != null) { this.ptrs_to.AddLast(inflight_htlcs); };
                return ret_hu_conv;
        }
 
        /**
-        * Creates [`BlindedPath`]s for payment to the `recipient` node. The channels in `first_hops`
+        * Creates [`BlindedPaymentPath`]s for payment to the `recipient` node. The channels in `first_hops`
         * are assumed to be with the `recipient`'s peers. The payment secret and any constraints are
         * given in `tlvs`.
         */
-       public Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ create_blinded_payment_paths(byte[] recipient, ChannelDetails[] first_hops, org.ldk.structs.ReceiveTlvs tlvs, long amount_msats) {
+       public Result_CVec_BlindedPaymentPathZNoneZ create_blinded_payment_paths(byte[] recipient, ChannelDetails[] first_hops, org.ldk.structs.ReceiveTlvs tlvs, long amount_msats) {
                long ret = bindings.Router_create_blinded_payment_paths(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(recipient, 33)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(first_hops, first_hops_conv_16 => first_hops_conv_16.ptr)), tlvs.ptr, amount_msats);
                GC.KeepAlive(this);
                GC.KeepAlive(recipient);
@@ -195,9 +193,7 @@ public class Router : CommonBase {
                GC.KeepAlive(tlvs);
                GC.KeepAlive(amount_msats);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ ret_hu_conv = Result_CVec_C2Tuple_BlindedPayInfoBlindedPathZZNoneZ.constr_from_ptr(ret);
-               foreach (ChannelDetails first_hops_conv_16 in first_hops) { if (this != null) { this.ptrs_to.AddLast(first_hops_conv_16); }; };
-               if (this != null) { this.ptrs_to.AddLast(tlvs); };
+               Result_CVec_BlindedPaymentPathZNoneZ ret_hu_conv = Result_CVec_BlindedPaymentPathZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index 5cf7bbc22bea4b9094d9afe8219523d06a47370d..0ab4d54765d0d180c2d49f4b879529ca7ef88247 100644 (file)
@@ -15,6 +15,28 @@ public class RoutingFees : CommonBase {
                if (ptr != 0) { bindings.RoutingFees_free(ptr); }
        }
 
+       /**
+        * Serialize the RoutingFees object into a byte array which can be read by RoutingFees_read
+        */
+       public byte[] write() {
+               long ret = bindings.RoutingFees_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a RoutingFees from a byte array, created by RoutingFees_write
+        */
+       public static Result_RoutingFeesDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.RoutingFees_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RoutingFeesDecodeErrorZ ret_hu_conv = Result_RoutingFeesDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Flat routing fee in millisatoshis.
         */
@@ -113,27 +135,5 @@ public class RoutingFees : CommonBase {
        public override int GetHashCode() {
                return (int)this.hash();
        }
-       /**
-        * Serialize the RoutingFees object into a byte array which can be read by RoutingFees_read
-        */
-       public byte[] write() {
-               long ret = bindings.RoutingFees_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a RoutingFees from a byte array, created by RoutingFees_write
-        */
-       public static Result_RoutingFeesDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.RoutingFees_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_RoutingFeesDecodeErrorZ ret_hu_conv = Result_RoutingFeesDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
 }
 } } }
index 5b645f238a1aa640103437abb2d0e8ab3998aa2c..63659d55c9c8e85456ce92ba014501d649299c1a 100644 (file)
@@ -132,7 +132,6 @@ public class RoutingMessageHandler : CommonBase {
                        Option_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = arg.get_next_channel_announcement(_starting_point);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
-                       if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret); };
                        return result;
                }
                public long get_next_node_announcement(long _starting_point) {
@@ -294,7 +293,6 @@ public class RoutingMessageHandler : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.NodeAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.NodeAnnouncement(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(starting_point); };
                return ret_hu_conv;
        }
 
@@ -331,7 +329,6 @@ public class RoutingMessageHandler : CommonBase {
                GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -348,7 +345,6 @@ public class RoutingMessageHandler : CommonBase {
                GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -363,7 +359,6 @@ public class RoutingMessageHandler : CommonBase {
                GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
@@ -378,7 +373,6 @@ public class RoutingMessageHandler : CommonBase {
                GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
index 7406d65046053513432fe309e7dc11270c34cfeb..f1d72df276b15eb030744a14a5f3fc571f29701c 100644 (file)
@@ -82,7 +82,6 @@ public class ScoreLookUp : CommonBase {
                GC.KeepAlive(candidate);
                GC.KeepAlive(usage);
                GC.KeepAlive(score_params);
-               if (this != null) { this.ptrs_to.AddLast(usage); };
                if (this != null) { this.ptrs_to.AddLast(score_params); };
                return ret;
        }
index f9c46f702433b21ecbf4be6b3703a646d1a4b1a6..40fc0331b768d6ca93451f7d902ca1706c40d12e 100644 (file)
@@ -36,7 +36,6 @@ public class Shutdown : CommonBase {
                bindings.Shutdown_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -73,7 +72,6 @@ public class Shutdown : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Shutdown ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Shutdown(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 8ffbf5d316ce0bb84d296c7bb3bd607e6ba03afb..07c95eea842edd57225d7c61c236ed4e4b477216 100644 (file)
@@ -124,7 +124,7 @@ public class ShutdownScript : CommonBase {
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_conv;
        }
 
index d08116278102172fa33bf73262f9bd749c5796de..f55f7d65af60444ee5482cc7a4541288ca0975e9 100644 (file)
@@ -78,7 +78,7 @@ public class SignedRawBolt11Invoice : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                ThreeTuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ ret_hu_conv = new ThreeTuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_hu_conv;
        }
 
index 053f60cdef3dfaba3d4e522ce85ee7a0d3cd5eb6..d56b2e5127cd85ec3392ad7c6501f02ff9782733 100644 (file)
@@ -25,10 +25,10 @@ public interface SignerProviderInterface {
         * re-derived from its `channel_keys_id`, which can be obtained through its trait method
         * [`ChannelSigner::channel_keys_id`].
         */
-       WriteableEcdsaChannelSigner derive_channel_signer(long channel_value_satoshis, byte[] channel_keys_id);
+       EcdsaChannelSigner derive_channel_signer(long channel_value_satoshis, byte[] channel_keys_id);
        /**Reads a [`Signer`] for this [`SignerProvider`] from the given input stream.
         * This is only called during deserialization of other objects which contain
-        * [`WriteableEcdsaChannelSigner`]-implementing objects (i.e., [`ChannelMonitor`]s and [`ChannelManager`]s).
+        * [`EcdsaChannelSigner`]-implementing objects (i.e., [`ChannelMonitor`]s and [`ChannelManager`]s).
         * The bytes are exactly those which `<Self::Signer as Writeable>::write()` writes, and
         * contain no versioning scheme. You may wish to include your own version prefix and ensure
         * you've read all of the provided bytes to ensure no corruption occurred.
@@ -40,7 +40,7 @@ public interface SignerProviderInterface {
         * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
-       Result_WriteableEcdsaChannelSignerDecodeErrorZ read_chan_signer(byte[] reader);
+       Result_EcdsaChannelSignerDecodeErrorZ read_chan_signer(byte[] reader);
        /**Get a script pubkey which we send funds to when claiming on-chain contestable outputs.
         * 
         * If this function returns an error, this will result in a channel failing to open.
@@ -88,7 +88,7 @@ public class SignerProvider : CommonBase {
                }
                public long derive_channel_signer(long _channel_value_satoshis, long _channel_keys_id) {
                        byte[] _channel_keys_id_conv = InternalUtils.decodeUint8Array(_channel_keys_id);
-                       WriteableEcdsaChannelSigner ret = arg.derive_channel_signer(_channel_value_satoshis, _channel_keys_id_conv);
+                       EcdsaChannelSigner ret = arg.derive_channel_signer(_channel_value_satoshis, _channel_keys_id_conv);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
                        if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret); };
@@ -96,7 +96,7 @@ public class SignerProvider : CommonBase {
                }
                public long read_chan_signer(long _reader) {
                        byte[] _reader_conv = InternalUtils.decodeUint8Array(_reader);
-                       Result_WriteableEcdsaChannelSignerDecodeErrorZ ret = arg.read_chan_signer(_reader_conv);
+                       Result_EcdsaChannelSignerDecodeErrorZ ret = arg.read_chan_signer(_reader_conv);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
                        return result;
@@ -155,13 +155,13 @@ public class SignerProvider : CommonBase {
         * re-derived from its `channel_keys_id`, which can be obtained through its trait method
         * [`ChannelSigner::channel_keys_id`].
         */
-       public WriteableEcdsaChannelSigner derive_channel_signer(long channel_value_satoshis, byte[] channel_keys_id) {
+       public EcdsaChannelSigner derive_channel_signer(long channel_value_satoshis, byte[] channel_keys_id) {
                long ret = bindings.SignerProvider_derive_channel_signer(this.ptr, channel_value_satoshis, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(channel_keys_id, 32)));
                GC.KeepAlive(this);
                GC.KeepAlive(channel_value_satoshis);
                GC.KeepAlive(channel_keys_id);
                if (ret >= 0 && ret <= 4096) { return null; }
-               WriteableEcdsaChannelSigner ret_hu_conv = new WriteableEcdsaChannelSigner(null, ret);
+               EcdsaChannelSigner ret_hu_conv = new EcdsaChannelSigner(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
                return ret_hu_conv;
        }
@@ -169,7 +169,7 @@ public class SignerProvider : CommonBase {
        /**
         * Reads a [`Signer`] for this [`SignerProvider`] from the given input stream.
         * This is only called during deserialization of other objects which contain
-        * [`WriteableEcdsaChannelSigner`]-implementing objects (i.e., [`ChannelMonitor`]s and [`ChannelManager`]s).
+        * [`EcdsaChannelSigner`]-implementing objects (i.e., [`ChannelMonitor`]s and [`ChannelManager`]s).
         * The bytes are exactly those which `<Self::Signer as Writeable>::write()` writes, and
         * contain no versioning scheme. You may wish to include your own version prefix and ensure
         * you've read all of the provided bytes to ensure no corruption occurred.
@@ -181,12 +181,12 @@ public class SignerProvider : CommonBase {
         * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
-       public Result_WriteableEcdsaChannelSignerDecodeErrorZ read_chan_signer(byte[] reader) {
+       public Result_EcdsaChannelSignerDecodeErrorZ read_chan_signer(byte[] reader) {
                long ret = bindings.SignerProvider_read_chan_signer(this.ptr, InternalUtils.encodeUint8Array(reader));
                GC.KeepAlive(this);
                GC.KeepAlive(reader);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_WriteableEcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_WriteableEcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
+               Result_EcdsaChannelSignerDecodeErrorZ ret_hu_conv = Result_EcdsaChannelSignerDecodeErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index d086beb1632078a9e638c49054bd1fcf4fe6bdee..4ed4f8aa347971af7cfc0f969fa4c1d37f7cc2bd 100644 (file)
@@ -44,6 +44,23 @@ public class Sleeper : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Constructs a new sleeper from three futures, allowing blocking on all three at once.
+        */
+       public static Sleeper from_three_futures(org.ldk.structs.Future fut_a, org.ldk.structs.Future fut_b, org.ldk.structs.Future fut_c) {
+               long ret = bindings.Sleeper_from_three_futures(fut_a.ptr, fut_b.ptr, fut_c.ptr);
+               GC.KeepAlive(fut_a);
+               GC.KeepAlive(fut_b);
+               GC.KeepAlive(fut_c);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Sleeper ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Sleeper(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fut_a); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fut_b); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(fut_c); };
+               return ret_hu_conv;
+       }
+
        /**
         * Constructs a new sleeper on many futures, allowing blocking on all at once.
         */
index 88754d7dacc8e2675ccb873eef3f60306fd7d708..3cb069602a1f79d45068a3a010fac514257ac464 100644 (file)
@@ -196,7 +196,6 @@ public class SocketAddress : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(hostname); };
                return ret_hu_conv;
        }
 
index b5c67001a3db9a2b1769a97810ec0202381e698c..689b24471059c7a9a6c07ecf778414470b0a8403 100644 (file)
@@ -118,7 +118,6 @@ public class SpendableOutputDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SpendableOutputDescriptor ret_hu_conv = org.ldk.structs.SpendableOutputDescriptor.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint); };
                return ret_hu_conv;
        }
 
@@ -131,7 +130,6 @@ public class SpendableOutputDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SpendableOutputDescriptor ret_hu_conv = org.ldk.structs.SpendableOutputDescriptor.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -144,7 +142,6 @@ public class SpendableOutputDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SpendableOutputDescriptor ret_hu_conv = org.ldk.structs.SpendableOutputDescriptor.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/Splice.cs b/c_sharp/src/org/ldk/structs/Splice.cs
deleted file mode 100644 (file)
index 3cc1c46..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * A splice message to be sent by or received from the stfu initiator (splice initiator).
- */
-public class Splice : CommonBase {
-       internal Splice(object _dummy, long ptr) : base(ptr) { }
-       ~Splice() {
-               if (ptr != 0) { bindings.Splice_free(ptr); }
-       }
-
-       /**
-        * The channel ID where splicing is intended
-        */
-       public ChannelId get_channel_id() {
-               long ret = bindings.Splice_get_channel_id(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ChannelId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelId(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * The channel ID where splicing is intended
-        */
-       public void set_channel_id(org.ldk.structs.ChannelId val) {
-               bindings.Splice_set_channel_id(this.ptr, val.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
-       }
-
-       /**
-        * The genesis hash of the blockchain where the channel is intended to be spliced
-        */
-       public byte[] get_chain_hash() {
-               long ret = bindings.Splice_get_chain_hash(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * The genesis hash of the blockchain where the channel is intended to be spliced
-        */
-       public void set_chain_hash(byte[] val) {
-               bindings.Splice_set_chain_hash(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 32)));
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * The intended change in channel capacity: the amount to be added (positive value)
-        * or removed (negative value) by the sender (splice initiator) by splicing into/from the channel.
-        */
-       public long get_relative_satoshis() {
-               long ret = bindings.Splice_get_relative_satoshis(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * The intended change in channel capacity: the amount to be added (positive value)
-        * or removed (negative value) by the sender (splice initiator) by splicing into/from the channel.
-        */
-       public void set_relative_satoshis(long val) {
-               bindings.Splice_set_relative_satoshis(this.ptr, val);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * The feerate for the new funding transaction, set by the splice initiator
-        */
-       public int get_funding_feerate_perkw() {
-               int ret = bindings.Splice_get_funding_feerate_perkw(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * The feerate for the new funding transaction, set by the splice initiator
-        */
-       public void set_funding_feerate_perkw(int val) {
-               bindings.Splice_set_funding_feerate_perkw(this.ptr, val);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * The locktime for the new funding transaction
-        */
-       public int get_locktime() {
-               int ret = bindings.Splice_get_locktime(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * The locktime for the new funding transaction
-        */
-       public void set_locktime(int val) {
-               bindings.Splice_set_locktime(this.ptr, val);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * The key of the sender (splice initiator) controlling the new funding transaction
-        */
-       public byte[] get_funding_pubkey() {
-               long ret = bindings.Splice_get_funding_pubkey(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * The key of the sender (splice initiator) controlling the new funding transaction
-        */
-       public void set_funding_pubkey(byte[] val) {
-               bindings.Splice_set_funding_pubkey(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-       }
-
-       /**
-        * Constructs a new Splice given each field
-        */
-       public static Splice of(org.ldk.structs.ChannelId channel_id_arg, byte[] chain_hash_arg, long relative_satoshis_arg, int funding_feerate_perkw_arg, int locktime_arg, byte[] funding_pubkey_arg) {
-               long ret = bindings.Splice_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(chain_hash_arg, 32)), relative_satoshis_arg, funding_feerate_perkw_arg, locktime_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(funding_pubkey_arg, 33)));
-               GC.KeepAlive(channel_id_arg);
-               GC.KeepAlive(chain_hash_arg);
-               GC.KeepAlive(relative_satoshis_arg);
-               GC.KeepAlive(funding_feerate_perkw_arg);
-               GC.KeepAlive(locktime_arg);
-               GC.KeepAlive(funding_pubkey_arg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Splice ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Splice(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.Splice_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a copy of the Splice
-        */
-       public Splice clone() {
-               long ret = bindings.Splice_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Splice ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Splice(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if two Splices contain equal inner contents.
-        * This ignores pointers and is_owned flags and looks at the values in fields.
-        * Two objects with NULL inner values will be considered "equal" here.
-        */
-       public bool eq(org.ldk.structs.Splice b) {
-               bool ret = bindings.Splice_eq(this.ptr, b.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(b);
-               if (this != null) { this.ptrs_to.AddLast(b); };
-               return ret;
-       }
-
-       public override bool Equals(object o) {
-               if (!(o is Splice)) return false;
-               return this.eq((Splice)o);
-       }
-       /**
-        * Serialize the Splice object into a byte array which can be read by Splice_read
-        */
-       public byte[] write() {
-               long ret = bindings.Splice_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a Splice from a byte array, created by Splice_write
-        */
-       public static Result_SpliceDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.Splice_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SpliceDecodeErrorZ ret_hu_conv = Result_SpliceDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 9c557d26f350d8bd3598bee00613785030cfc6e4..7748928a91d99ff3f904b880903feef108e85c9e 100644 (file)
@@ -7,7 +7,7 @@ namespace org { namespace ldk { namespace structs {
 
 
 /**
- * A splice_ack message to be received by or sent to the splice initiator.
+ * A `splice_ack` message to be received by or sent to the splice initiator.
  */
 public class SpliceAck : CommonBase {
        internal SpliceAck(object _dummy, long ptr) : base(ptr) { }
@@ -34,65 +34,62 @@ public class SpliceAck : CommonBase {
                bindings.SpliceAck_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
-        * The genesis hash of the blockchain where the channel is intended to be spliced
+        * The amount the splice acceptor is intending to add to its channel balance (splice-in)
+        * or remove from its channel balance (splice-out).
         */
-       public byte[] get_chain_hash() {
-               long ret = bindings.SpliceAck_get_chain_hash(this.ptr);
+       public long get_funding_contribution_satoshis() {
+               long ret = bindings.SpliceAck_get_funding_contribution_satoshis(this.ptr);
                GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               return ret;
        }
 
        /**
-        * The genesis hash of the blockchain where the channel is intended to be spliced
+        * The amount the splice acceptor is intending to add to its channel balance (splice-in)
+        * or remove from its channel balance (splice-out).
         */
-       public void set_chain_hash(byte[] val) {
-               bindings.SpliceAck_set_chain_hash(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 32)));
+       public void set_funding_contribution_satoshis(long val) {
+               bindings.SpliceAck_set_funding_contribution_satoshis(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * The intended change in channel capacity: the amount to be added (positive value)
-        * or removed (negative value) by the sender (splice acceptor) by splicing into/from the channel.
+        * The key of the sender (splice acceptor) controlling the new funding transaction
         */
-       public long get_relative_satoshis() {
-               long ret = bindings.SpliceAck_get_relative_satoshis(this.ptr);
+       public byte[] get_funding_pubkey() {
+               long ret = bindings.SpliceAck_get_funding_pubkey(this.ptr);
                GC.KeepAlive(this);
-               return ret;
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
        }
 
        /**
-        * The intended change in channel capacity: the amount to be added (positive value)
-        * or removed (negative value) by the sender (splice acceptor) by splicing into/from the channel.
+        * The key of the sender (splice acceptor) controlling the new funding transaction
         */
-       public void set_relative_satoshis(long val) {
-               bindings.SpliceAck_set_relative_satoshis(this.ptr, val);
+       public void set_funding_pubkey(byte[] val) {
+               bindings.SpliceAck_set_funding_pubkey(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
 
        /**
-        * The key of the sender (splice acceptor) controlling the new funding transaction
+        * If set, only confirmed inputs added (by the splice initiator) will be accepted
         */
-       public byte[] get_funding_pubkey() {
-               long ret = bindings.SpliceAck_get_funding_pubkey(this.ptr);
+       public COption_NoneZ get_require_confirmed_inputs() {
+               COption_NoneZ ret = bindings.SpliceAck_get_require_confirmed_inputs(this.ptr);
                GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
+               return ret;
        }
 
        /**
-        * The key of the sender (splice acceptor) controlling the new funding transaction
+        * If set, only confirmed inputs added (by the splice initiator) will be accepted
         */
-       public void set_funding_pubkey(byte[] val) {
-               bindings.SpliceAck_set_funding_pubkey(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
+       public void set_require_confirmed_inputs(COption_NoneZ val) {
+               bindings.SpliceAck_set_require_confirmed_inputs(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
@@ -100,16 +97,15 @@ public class SpliceAck : CommonBase {
        /**
         * Constructs a new SpliceAck given each field
         */
-       public static SpliceAck of(org.ldk.structs.ChannelId channel_id_arg, byte[] chain_hash_arg, long relative_satoshis_arg, byte[] funding_pubkey_arg) {
-               long ret = bindings.SpliceAck_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(chain_hash_arg, 32)), relative_satoshis_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(funding_pubkey_arg, 33)));
+       public static SpliceAck of(org.ldk.structs.ChannelId channel_id_arg, long funding_contribution_satoshis_arg, byte[] funding_pubkey_arg, COption_NoneZ require_confirmed_inputs_arg) {
+               long ret = bindings.SpliceAck_new(channel_id_arg.ptr, funding_contribution_satoshis_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(funding_pubkey_arg, 33)), require_confirmed_inputs_arg);
                GC.KeepAlive(channel_id_arg);
-               GC.KeepAlive(chain_hash_arg);
-               GC.KeepAlive(relative_satoshis_arg);
+               GC.KeepAlive(funding_contribution_satoshis_arg);
                GC.KeepAlive(funding_pubkey_arg);
+               GC.KeepAlive(require_confirmed_inputs_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SpliceAck ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.SpliceAck(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/SpliceInit.cs b/c_sharp/src/org/ldk/structs/SpliceInit.cs
new file mode 100644 (file)
index 0000000..3070538
--- /dev/null
@@ -0,0 +1,208 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A `splice_init` message to be sent by or received from the stfu initiator (splice initiator).
+ */
+public class SpliceInit : CommonBase {
+       internal SpliceInit(object _dummy, long ptr) : base(ptr) { }
+       ~SpliceInit() {
+               if (ptr != 0) { bindings.SpliceInit_free(ptr); }
+       }
+
+       /**
+        * The channel ID where splicing is intended
+        */
+       public ChannelId get_channel_id() {
+               long ret = bindings.SpliceInit_get_channel_id(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelId(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The channel ID where splicing is intended
+        */
+       public void set_channel_id(org.ldk.structs.ChannelId val) {
+               bindings.SpliceInit_set_channel_id(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The amount the splice initiator is intending to add to its channel balance (splice-in)
+        * or remove from its channel balance (splice-out).
+        */
+       public long get_funding_contribution_satoshis() {
+               long ret = bindings.SpliceInit_get_funding_contribution_satoshis(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The amount the splice initiator is intending to add to its channel balance (splice-in)
+        * or remove from its channel balance (splice-out).
+        */
+       public void set_funding_contribution_satoshis(long val) {
+               bindings.SpliceInit_set_funding_contribution_satoshis(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The feerate for the new funding transaction, set by the splice initiator
+        */
+       public int get_funding_feerate_perkw() {
+               int ret = bindings.SpliceInit_get_funding_feerate_perkw(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The feerate for the new funding transaction, set by the splice initiator
+        */
+       public void set_funding_feerate_perkw(int val) {
+               bindings.SpliceInit_set_funding_feerate_perkw(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The locktime for the new funding transaction
+        */
+       public int get_locktime() {
+               int ret = bindings.SpliceInit_get_locktime(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * The locktime for the new funding transaction
+        */
+       public void set_locktime(int val) {
+               bindings.SpliceInit_set_locktime(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * The key of the sender (splice initiator) controlling the new funding transaction
+        */
+       public byte[] get_funding_pubkey() {
+               long ret = bindings.SpliceInit_get_funding_pubkey(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The key of the sender (splice initiator) controlling the new funding transaction
+        */
+       public void set_funding_pubkey(byte[] val) {
+               bindings.SpliceInit_set_funding_pubkey(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 33)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * If set, only confirmed inputs added (by the splice acceptor) will be accepted
+        */
+       public COption_NoneZ get_require_confirmed_inputs() {
+               COption_NoneZ ret = bindings.SpliceInit_get_require_confirmed_inputs(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * If set, only confirmed inputs added (by the splice acceptor) will be accepted
+        */
+       public void set_require_confirmed_inputs(COption_NoneZ val) {
+               bindings.SpliceInit_set_require_confirmed_inputs(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Constructs a new SpliceInit given each field
+        */
+       public static SpliceInit of(org.ldk.structs.ChannelId channel_id_arg, long funding_contribution_satoshis_arg, int funding_feerate_perkw_arg, int locktime_arg, byte[] funding_pubkey_arg, COption_NoneZ require_confirmed_inputs_arg) {
+               long ret = bindings.SpliceInit_new(channel_id_arg.ptr, funding_contribution_satoshis_arg, funding_feerate_perkw_arg, locktime_arg, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(funding_pubkey_arg, 33)), require_confirmed_inputs_arg);
+               GC.KeepAlive(channel_id_arg);
+               GC.KeepAlive(funding_contribution_satoshis_arg);
+               GC.KeepAlive(funding_feerate_perkw_arg);
+               GC.KeepAlive(locktime_arg);
+               GC.KeepAlive(funding_pubkey_arg);
+               GC.KeepAlive(require_confirmed_inputs_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SpliceInit ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.SpliceInit(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.SpliceInit_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the SpliceInit
+        */
+       public SpliceInit clone() {
+               long ret = bindings.SpliceInit_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SpliceInit ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.SpliceInit(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two SpliceInits contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public bool eq(org.ldk.structs.SpliceInit b) {
+               bool ret = bindings.SpliceInit_eq(this.ptr, b.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(b);
+               if (this != null) { this.ptrs_to.AddLast(b); };
+               return ret;
+       }
+
+       public override bool Equals(object o) {
+               if (!(o is SpliceInit)) return false;
+               return this.eq((SpliceInit)o);
+       }
+       /**
+        * Serialize the SpliceInit object into a byte array which can be read by SpliceInit_read
+        */
+       public byte[] write() {
+               long ret = bindings.SpliceInit_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a SpliceInit from a byte array, created by SpliceInit_write
+        */
+       public static Result_SpliceInitDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.SpliceInit_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SpliceInitDecodeErrorZ ret_hu_conv = Result_SpliceInitDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
+} } }
index ac5d31fb1095f653076d01a8f93be34c8341f79b..7fde9159ea3ff4415fab3e4d79144691b3421448 100644 (file)
@@ -7,7 +7,7 @@ namespace org { namespace ldk { namespace structs {
 
 
 /**
- * A splice_locked message to be sent to or received from a peer.
+ * A `splice_locked` message to be sent to or received from a peer.
  */
 public class SpliceLocked : CommonBase {
        internal SpliceLocked(object _dummy, long ptr) : base(ptr) { }
@@ -34,19 +34,38 @@ public class SpliceLocked : CommonBase {
                bindings.SpliceLocked_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
+       }
+
+       /**
+        * The ID of the new funding transaction that has been locked
+        */
+       public byte[] get_splice_txid() {
+               long ret = bindings.SpliceLocked_get_splice_txid(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The ID of the new funding transaction that has been locked
+        */
+       public void set_splice_txid(byte[] val) {
+               bindings.SpliceLocked_set_splice_txid(this.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(val, 32)));
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
        }
 
        /**
         * Constructs a new SpliceLocked given each field
         */
-       public static SpliceLocked of(org.ldk.structs.ChannelId channel_id_arg) {
-               long ret = bindings.SpliceLocked_new(channel_id_arg.ptr);
+       public static SpliceLocked of(org.ldk.structs.ChannelId channel_id_arg, byte[] splice_txid_arg) {
+               long ret = bindings.SpliceLocked_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(splice_txid_arg, 32)));
                GC.KeepAlive(channel_id_arg);
+               GC.KeepAlive(splice_txid_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.SpliceLocked ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.SpliceLocked(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 311458443363299ca5c1faf3fca42289e65180ef..2af31d1f094e1ba3e3156e8b3e167a26b79846f5 100644 (file)
@@ -36,7 +36,6 @@ public class StaticPaymentOutputDescriptor : CommonBase {
                bindings.StaticPaymentOutputDescriptor_set_outpoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -128,7 +127,6 @@ public class StaticPaymentOutputDescriptor : CommonBase {
                bindings.StaticPaymentOutputDescriptor_set_channel_transaction_parameters(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -146,8 +144,6 @@ public class StaticPaymentOutputDescriptor : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.StaticPaymentOutputDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.StaticPaymentOutputDescriptor(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_transaction_parameters_arg); };
                return ret_hu_conv;
        }
 
index 5b7cd65e8a58b6d5044d0d1d3c9a78262ea6fe4f..c9b0cc9c169195f9bbb984fa4fcc7d5d3f37c620 100644 (file)
@@ -7,7 +7,7 @@ namespace org { namespace ldk { namespace structs {
 
 
 /**
- * An stfu (quiescence) message to be sent by or received from the stfu initiator.
+ * An `stfu` (quiescence) message to be sent by or received from the stfu initiator.
  */
 public class Stfu : CommonBase {
        internal Stfu(object _dummy, long ptr) : base(ptr) { }
@@ -34,7 +34,6 @@ public class Stfu : CommonBase {
                bindings.Stfu_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -65,7 +64,6 @@ public class Stfu : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Stfu ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Stfu(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index d0524d170689b47c454457185791f39ac4628238..de68d158abf4986be261097df4f1285b6186a9dc 100644 (file)
@@ -81,9 +81,6 @@ public class ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ : CommonB
                if (ret >= 0 && ret <= 4096) { return null; }
                ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_hu_conv = new ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/ThreeTuple_OffersMessageDestinationBlindedPathZ.cs b/c_sharp/src/org/ldk/structs/ThreeTuple_OffersMessageDestinationBlindedPathZ.cs
deleted file mode 100644 (file)
index b17f5a7..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * A Tuple
- */
-public class ThreeTuple_OffersMessageDestinationBlindedPathZ : CommonBase {
-       internal ThreeTuple_OffersMessageDestinationBlindedPathZ(object _dummy, long ptr) : base(ptr) { }
-       ~ThreeTuple_OffersMessageDestinationBlindedPathZ() {
-               if (ptr != 0) { bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public OffersMessage get_a() {
-               long ret = bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_get_a(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.OffersMessage ret_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public Destination get_b() {
-               long ret = bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_get_b(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Destination ret_hu_conv = org.ldk.structs.Destination.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public BlindedPath get_c() {
-               long ret = bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_get_c(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.BlindedPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPath(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public ThreeTuple_OffersMessageDestinationBlindedPathZ clone() {
-               long ret = bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               ThreeTuple_OffersMessageDestinationBlindedPathZ ret_hu_conv = new ThreeTuple_OffersMessageDestinationBlindedPathZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C3Tuple_OffersMessageDestinationBlindedPathZ from the contained elements.
-        */
-       public static ThreeTuple_OffersMessageDestinationBlindedPathZ of(org.ldk.structs.OffersMessage a, org.ldk.structs.Destination b, org.ldk.structs.BlindedPath c) {
-               long ret = bindings.C3Tuple_OffersMessageDestinationBlindedPathZ_new(a.ptr, b.ptr, c.ptr);
-               GC.KeepAlive(a);
-               GC.KeepAlive(b);
-               GC.KeepAlive(c);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               ThreeTuple_OffersMessageDestinationBlindedPathZ ret_hu_conv = new ThreeTuple_OffersMessageDestinationBlindedPathZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/ThreeTuple_OnionMessageContentsDestinationBlindedPathZ.cs b/c_sharp/src/org/ldk/structs/ThreeTuple_OnionMessageContentsDestinationBlindedPathZ.cs
deleted file mode 100644 (file)
index d9fc379..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * A Tuple
- */
-public class ThreeTuple_OnionMessageContentsDestinationBlindedPathZ : CommonBase {
-       internal ThreeTuple_OnionMessageContentsDestinationBlindedPathZ(object _dummy, long ptr) : base(ptr) { }
-       ~ThreeTuple_OnionMessageContentsDestinationBlindedPathZ() {
-               if (ptr != 0) { bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public OnionMessageContents get_a() {
-               long ret = bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_a(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               OnionMessageContents ret_hu_conv = new OnionMessageContents(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public Destination get_b() {
-               long ret = bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_b(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Destination ret_hu_conv = org.ldk.structs.Destination.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public BlindedPath get_c() {
-               long ret = bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_get_c(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.BlindedPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPath(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public ThreeTuple_OnionMessageContentsDestinationBlindedPathZ clone() {
-               long ret = bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               ThreeTuple_OnionMessageContentsDestinationBlindedPathZ ret_hu_conv = new ThreeTuple_OnionMessageContentsDestinationBlindedPathZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C3Tuple_OnionMessageContentsDestinationBlindedPathZ from the contained elements.
-        */
-       public static ThreeTuple_OnionMessageContentsDestinationBlindedPathZ of(org.ldk.structs.OnionMessageContents a, org.ldk.structs.Destination b, org.ldk.structs.BlindedPath c) {
-               long ret = bindings.C3Tuple_OnionMessageContentsDestinationBlindedPathZ_new(a.ptr, b.ptr, c.ptr);
-               GC.KeepAlive(a);
-               GC.KeepAlive(b);
-               GC.KeepAlive(c);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               ThreeTuple_OnionMessageContentsDestinationBlindedPathZ ret_hu_conv = new ThreeTuple_OnionMessageContentsDestinationBlindedPathZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
-               return ret_hu_conv;
-       }
-
-}
-} } }
index bc304560c691510846faaa0c45df7d88b0977591..027b3e18fa74e715ebce5744bdc2ef0396e79ad3 100644 (file)
@@ -80,8 +80,6 @@ public class ThreeTuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ : Com
                if (ret >= 0 && ret <= 4096) { return null; }
                ThreeTuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ ret_hu_conv = new ThreeTuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
                return ret_hu_conv;
        }
 
index cfc2eab8667cbe94f1dce43685e770e6944a7afc..5a63e32c495bae6e001d332215ae1c73c303a0f7 100644 (file)
@@ -80,8 +80,6 @@ public class ThreeTuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ : CommonBas
                if (ret >= 0 && ret <= 4096) { return null; }
                ThreeTuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ ret_hu_conv = new ThreeTuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
                return ret_hu_conv;
        }
 
index ea5e4a99888dc4a328eeeb796bd844368b4414ac..0831e87a3dcb1c14d221c0d1b9a9585e4ca22afe 100644 (file)
@@ -80,8 +80,6 @@ public class ThreeTuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ : Com
                if (ret >= 0 && ret <= 4096) { return null; }
                ThreeTuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ ret_hu_conv = new ThreeTuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
                return ret_hu_conv;
        }
 
index 2fd402ad69b351a4dd9d104ea6e95468a04840b9..ba0cf55a76df9c886c7786811805a1108728db01 100644 (file)
@@ -77,7 +77,6 @@ public class ThreeTuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                ThreeTuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZ ret_hu_conv = new ThreeTuple_ThirtyTwoBytesu32COption_ThirtyTwoBytesZZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(c); };
                return ret_hu_conv;
        }
 
index 0ad49eecb5a93084224cc31c2c6e962c60e0860c..63af8afda2d429f25bff400fc8fb92a648cdc556 100644 (file)
@@ -34,7 +34,6 @@ public class TrackedSpendableOutput : CommonBase {
                bindings.TrackedSpendableOutput_set_descriptor(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -64,7 +63,6 @@ public class TrackedSpendableOutput : CommonBase {
                bindings.TrackedSpendableOutput_set_channel_id(this.ptr, val == null ? 0 : val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -86,7 +84,6 @@ public class TrackedSpendableOutput : CommonBase {
                bindings.TrackedSpendableOutput_set_status(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -102,9 +99,6 @@ public class TrackedSpendableOutput : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TrackedSpendableOutput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TrackedSpendableOutput(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(descriptor_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(status_arg); };
                return ret_hu_conv;
        }
 
index 9e0974ca7007a3baa4744165451d828b65c3f39a..d131009a4f321c528f36c3190e5559c1a465b27b 100644 (file)
@@ -85,7 +85,7 @@ public class TransactionU16LenLimited : CommonBase {
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               if (this != null) { this.ptrs_to.AddLast(this); };
+               ;
                return ret_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ.cs
new file mode 100644 (file)
index 0000000..ec00c35
--- /dev/null
@@ -0,0 +1,75 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ : CommonBase {
+       internal TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ() {
+               if (ptr != 0) { bindings.C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public AsyncPaymentsMessage get_a() {
+               long ret = bindings.C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.AsyncPaymentsMessage ret_hu_conv = org.ldk.structs.AsyncPaymentsMessage.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public MessageSendInstructions get_b() {
+               long ret = bindings.C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ clone() {
+               long ret = bindings.C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ ret_hu_conv = new TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ from the contained elements.
+        */
+       public static TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ of(org.ldk.structs.AsyncPaymentsMessage a, org.ldk.structs.MessageSendInstructions b) {
+               long ret = bindings.C2Tuple_AsyncPaymentsMessageMessageSendInstructionsZ_new(a.ptr, b.ptr);
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ ret_hu_conv = new TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 4ddd8b997c6a8d0a240f1562f9cc32042ce91914..5f2f361df709e94c230322b01bc9df1e0d2a224f 100644 (file)
@@ -56,8 +56,7 @@ public class TwoTuple_BestBlockOutputSweeperZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_BestBlockOutputSweeperZ ret_hu_conv = new TwoTuple_BestBlockOutputSweeperZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_best_block); };
+               ;
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_broadcaster); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_fee_estimator); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_chain_data_source); };
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_BlindedPayInfoBlindedPathZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_BlindedPayInfoBlindedPathZ.cs
deleted file mode 100644 (file)
index a6a31bc..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * A Tuple
- */
-public class TwoTuple_BlindedPayInfoBlindedPathZ : CommonBase {
-       internal TwoTuple_BlindedPayInfoBlindedPathZ(object _dummy, long ptr) : base(ptr) { }
-       ~TwoTuple_BlindedPayInfoBlindedPathZ() {
-               if (ptr != 0) { bindings.C2Tuple_BlindedPayInfoBlindedPathZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public BlindedPayInfo get_a() {
-               long ret = bindings.C2Tuple_BlindedPayInfoBlindedPathZ_get_a(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.BlindedPayInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPayInfo(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public BlindedPath get_b() {
-               long ret = bindings.C2Tuple_BlindedPayInfoBlindedPathZ_get_b(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.BlindedPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPath(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.C2Tuple_BlindedPayInfoBlindedPathZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_BlindedPayInfoBlindedPathZ clone() {
-               long ret = bindings.C2Tuple_BlindedPayInfoBlindedPathZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_BlindedPayInfoBlindedPathZ ret_hu_conv = new TwoTuple_BlindedPayInfoBlindedPathZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_BlindedPayInfoBlindedPathZ from the contained elements.
-        */
-       public static TwoTuple_BlindedPayInfoBlindedPathZ of(org.ldk.structs.BlindedPayInfo a, org.ldk.structs.BlindedPath b) {
-               long ret = bindings.C2Tuple_BlindedPayInfoBlindedPathZ_new(a.ptr, b.ptr);
-               GC.KeepAlive(a);
-               GC.KeepAlive(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_BlindedPayInfoBlindedPathZ ret_hu_conv = new TwoTuple_BlindedPayInfoBlindedPathZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
-               return ret_hu_conv;
-       }
-
-}
-} } }
index 8bccf7a6d6c49dae8b7a9b96993f4cf471697f50..cf1ad0b0a73951aed3bed0a606db7765b3b9a7b4 100644 (file)
@@ -67,7 +67,6 @@ public class TwoTuple_ChannelIdPublicKeyZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_ChannelIdPublicKeyZ ret_hu_conv = new TwoTuple_ChannelIdPublicKeyZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_OffersMessageMessageSendInstructionsZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_OffersMessageMessageSendInstructionsZ.cs
new file mode 100644 (file)
index 0000000..0a5d554
--- /dev/null
@@ -0,0 +1,75 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_OffersMessageMessageSendInstructionsZ : CommonBase {
+       internal TwoTuple_OffersMessageMessageSendInstructionsZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_OffersMessageMessageSendInstructionsZ() {
+               if (ptr != 0) { bindings.C2Tuple_OffersMessageMessageSendInstructionsZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public OffersMessage get_a() {
+               long ret = bindings.C2Tuple_OffersMessageMessageSendInstructionsZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OffersMessage ret_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public MessageSendInstructions get_b() {
+               long ret = bindings.C2Tuple_OffersMessageMessageSendInstructionsZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_OffersMessageMessageSendInstructionsZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_OffersMessageMessageSendInstructionsZ clone() {
+               long ret = bindings.C2Tuple_OffersMessageMessageSendInstructionsZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OffersMessageMessageSendInstructionsZ ret_hu_conv = new TwoTuple_OffersMessageMessageSendInstructionsZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_OffersMessageMessageSendInstructionsZ from the contained elements.
+        */
+       public static TwoTuple_OffersMessageMessageSendInstructionsZ of(org.ldk.structs.OffersMessage a, org.ldk.structs.MessageSendInstructions b) {
+               long ret = bindings.C2Tuple_OffersMessageMessageSendInstructionsZ_new(a.ptr, b.ptr);
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OffersMessageMessageSendInstructionsZ ret_hu_conv = new TwoTuple_OffersMessageMessageSendInstructionsZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_OffersMessageResponseInstructionZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_OffersMessageResponseInstructionZ.cs
new file mode 100644 (file)
index 0000000..7628df2
--- /dev/null
@@ -0,0 +1,75 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_OffersMessageResponseInstructionZ : CommonBase {
+       internal TwoTuple_OffersMessageResponseInstructionZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_OffersMessageResponseInstructionZ() {
+               if (ptr != 0) { bindings.C2Tuple_OffersMessageResponseInstructionZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public OffersMessage get_a() {
+               long ret = bindings.C2Tuple_OffersMessageResponseInstructionZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OffersMessage ret_hu_conv = org.ldk.structs.OffersMessage.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public ResponseInstruction get_b() {
+               long ret = bindings.C2Tuple_OffersMessageResponseInstructionZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ResponseInstruction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ResponseInstruction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_OffersMessageResponseInstructionZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_OffersMessageResponseInstructionZ clone() {
+               long ret = bindings.C2Tuple_OffersMessageResponseInstructionZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OffersMessageResponseInstructionZ ret_hu_conv = new TwoTuple_OffersMessageResponseInstructionZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_OffersMessageResponseInstructionZ from the contained elements.
+        */
+       public static TwoTuple_OffersMessageResponseInstructionZ of(org.ldk.structs.OffersMessage a, org.ldk.structs.ResponseInstruction b) {
+               long ret = bindings.C2Tuple_OffersMessageResponseInstructionZ_new(a.ptr, b.ptr);
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OffersMessageResponseInstructionZ ret_hu_conv = new TwoTuple_OffersMessageResponseInstructionZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_OnionMessageContentsMessageSendInstructionsZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_OnionMessageContentsMessageSendInstructionsZ.cs
new file mode 100644 (file)
index 0000000..937efad
--- /dev/null
@@ -0,0 +1,76 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_OnionMessageContentsMessageSendInstructionsZ : CommonBase {
+       internal TwoTuple_OnionMessageContentsMessageSendInstructionsZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_OnionMessageContentsMessageSendInstructionsZ() {
+               if (ptr != 0) { bindings.C2Tuple_OnionMessageContentsMessageSendInstructionsZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public OnionMessageContents get_a() {
+               long ret = bindings.C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               OnionMessageContents ret_hu_conv = new OnionMessageContents(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public MessageSendInstructions get_b() {
+               long ret = bindings.C2Tuple_OnionMessageContentsMessageSendInstructionsZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MessageSendInstructions ret_hu_conv = org.ldk.structs.MessageSendInstructions.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_OnionMessageContentsMessageSendInstructionsZ clone() {
+               long ret = bindings.C2Tuple_OnionMessageContentsMessageSendInstructionsZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OnionMessageContentsMessageSendInstructionsZ ret_hu_conv = new TwoTuple_OnionMessageContentsMessageSendInstructionsZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_OnionMessageContentsMessageSendInstructionsZ from the contained elements.
+        */
+       public static TwoTuple_OnionMessageContentsMessageSendInstructionsZ of(org.ldk.structs.OnionMessageContents a, org.ldk.structs.MessageSendInstructions b) {
+               long ret = bindings.C2Tuple_OnionMessageContentsMessageSendInstructionsZ_new(a.ptr, b.ptr);
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OnionMessageContentsMessageSendInstructionsZ ret_hu_conv = new TwoTuple_OnionMessageContentsMessageSendInstructionsZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_OnionMessageContentsResponseInstructionZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_OnionMessageContentsResponseInstructionZ.cs
new file mode 100644 (file)
index 0000000..9aeae2d
--- /dev/null
@@ -0,0 +1,76 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_OnionMessageContentsResponseInstructionZ : CommonBase {
+       internal TwoTuple_OnionMessageContentsResponseInstructionZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_OnionMessageContentsResponseInstructionZ() {
+               if (ptr != 0) { bindings.C2Tuple_OnionMessageContentsResponseInstructionZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public OnionMessageContents get_a() {
+               long ret = bindings.C2Tuple_OnionMessageContentsResponseInstructionZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               OnionMessageContents ret_hu_conv = new OnionMessageContents(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public ResponseInstruction get_b() {
+               long ret = bindings.C2Tuple_OnionMessageContentsResponseInstructionZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ResponseInstruction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ResponseInstruction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_OnionMessageContentsResponseInstructionZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_OnionMessageContentsResponseInstructionZ clone() {
+               long ret = bindings.C2Tuple_OnionMessageContentsResponseInstructionZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OnionMessageContentsResponseInstructionZ ret_hu_conv = new TwoTuple_OnionMessageContentsResponseInstructionZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_OnionMessageContentsResponseInstructionZ from the contained elements.
+        */
+       public static TwoTuple_OnionMessageContentsResponseInstructionZ of(org.ldk.structs.OnionMessageContents a, org.ldk.structs.ResponseInstruction b) {
+               long ret = bindings.C2Tuple_OnionMessageContentsResponseInstructionZ_new(a.ptr, b.ptr);
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OnionMessageContentsResponseInstructionZ ret_hu_conv = new TwoTuple_OnionMessageContentsResponseInstructionZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_MonitorUpdateIdZZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_MonitorUpdateIdZZ.cs
deleted file mode 100644 (file)
index 6d6594f..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * A Tuple
- */
-public class TwoTuple_OutPointCVec_MonitorUpdateIdZZ : CommonBase {
-       internal TwoTuple_OutPointCVec_MonitorUpdateIdZZ(object _dummy, long ptr) : base(ptr) { }
-       ~TwoTuple_OutPointCVec_MonitorUpdateIdZZ() {
-               if (ptr != 0) { bindings.C2Tuple_OutPointCVec_MonitorUpdateIdZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public OutPoint get_a() {
-               long ret = bindings.C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.OutPoint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OutPoint(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public MonitorUpdateId[] get_b() {
-               long ret = bindings.C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_17_len = InternalUtils.getArrayLength(ret);
-               MonitorUpdateId[] ret_conv_17_arr = new MonitorUpdateId[ret_conv_17_len];
-               for (int r = 0; r < ret_conv_17_len; r++) {
-                       long ret_conv_17 = InternalUtils.getU64ArrayElem(ret, r);
-                       org.ldk.structs.MonitorUpdateId ret_conv_17_hu_conv = null; if (ret_conv_17 < 0 || ret_conv_17 > 4096) { ret_conv_17_hu_conv = new org.ldk.structs.MonitorUpdateId(null, ret_conv_17); }
-                       if (ret_conv_17_hu_conv != null) { ret_conv_17_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_17_arr[r] = ret_conv_17_hu_conv;
-               }
-               bindings.free_buffer(ret);
-               return ret_conv_17_arr;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_OutPointCVec_MonitorUpdateIdZZ clone() {
-               long ret = bindings.C2Tuple_OutPointCVec_MonitorUpdateIdZZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_OutPointCVec_MonitorUpdateIdZZ ret_hu_conv = new TwoTuple_OutPointCVec_MonitorUpdateIdZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_OutPointCVec_MonitorUpdateIdZZ from the contained elements.
-        */
-       public static TwoTuple_OutPointCVec_MonitorUpdateIdZZ of(org.ldk.structs.OutPoint a, MonitorUpdateId[] b) {
-               long ret = bindings.C2Tuple_OutPointCVec_MonitorUpdateIdZZ_new(a.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(b, b_conv_17 => b_conv_17.ptr)));
-               GC.KeepAlive(a);
-               GC.KeepAlive(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_OutPointCVec_MonitorUpdateIdZZ ret_hu_conv = new TwoTuple_OutPointCVec_MonitorUpdateIdZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               foreach (MonitorUpdateId b_conv_17 in b) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_conv_17); }; };
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_u64ZZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_OutPointCVec_u64ZZ.cs
new file mode 100644 (file)
index 0000000..47c3301
--- /dev/null
@@ -0,0 +1,74 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_OutPointCVec_u64ZZ : CommonBase {
+       internal TwoTuple_OutPointCVec_u64ZZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_OutPointCVec_u64ZZ() {
+               if (ptr != 0) { bindings.C2Tuple_OutPointCVec_u64ZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public OutPoint get_a() {
+               long ret = bindings.C2Tuple_OutPointCVec_u64ZZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OutPoint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OutPoint(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public long[] get_b() {
+               long ret = bindings.C2Tuple_OutPointCVec_u64ZZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               long[] ret_conv = InternalUtils.decodeUint64Array(ret);
+               return ret_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_OutPointCVec_u64ZZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_OutPointCVec_u64ZZ clone() {
+               long ret = bindings.C2Tuple_OutPointCVec_u64ZZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OutPointCVec_u64ZZ ret_hu_conv = new TwoTuple_OutPointCVec_u64ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_OutPointCVec_u64ZZ from the contained elements.
+        */
+       public static TwoTuple_OutPointCVec_u64ZZ of(org.ldk.structs.OutPoint a, long[] b) {
+               long ret = bindings.C2Tuple_OutPointCVec_u64ZZ_new(a.ptr, InternalUtils.encodeUint64Array(b));
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OutPointCVec_u64ZZ ret_hu_conv = new TwoTuple_OutPointCVec_u64ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 4a9d7c1472f0c5df74ba504f737c475ac540496f..d2480a148e748b6b651f8b2a4120285830e1e9a6 100644 (file)
@@ -67,7 +67,6 @@ public class TwoTuple_OutPointCVec_u8ZZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_OutPointCVec_u8ZZ ret_hu_conv = new TwoTuple_OutPointCVec_u8ZZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index a13da11c9f915f4c83bcceb6b08685bb26d16c9c..a3f7101a92b200b2aead0d3f9870a8368da5a043 100644 (file)
@@ -68,8 +68,6 @@ public class TwoTuple_OutPointChannelIdZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_OutPointChannelIdZ ret_hu_conv = new TwoTuple_OutPointChannelIdZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_PublicKeyCVec_SocketAddressZZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_PublicKeyCVec_SocketAddressZZ.cs
deleted file mode 100644 (file)
index a6060a8..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-/**
- * A Tuple
- */
-public class TwoTuple_PublicKeyCVec_SocketAddressZZ : CommonBase {
-       internal TwoTuple_PublicKeyCVec_SocketAddressZZ(object _dummy, long ptr) : base(ptr) { }
-       ~TwoTuple_PublicKeyCVec_SocketAddressZZ() {
-               if (ptr != 0) { bindings.C2Tuple_PublicKeyCVec_SocketAddressZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               long ret = bindings.C2Tuple_PublicKeyCVec_SocketAddressZZ_get_a(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * 
-        */
-       public SocketAddress[] get_b() {
-               long ret = bindings.C2Tuple_PublicKeyCVec_SocketAddressZZ_get_b(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_15_len = InternalUtils.getArrayLength(ret);
-               SocketAddress[] ret_conv_15_arr = new SocketAddress[ret_conv_15_len];
-               for (int p = 0; p < ret_conv_15_len; p++) {
-                       long ret_conv_15 = InternalUtils.getU64ArrayElem(ret, p);
-                       org.ldk.structs.SocketAddress ret_conv_15_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret_conv_15);
-                       if (ret_conv_15_hu_conv != null) { ret_conv_15_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_15_arr[p] = ret_conv_15_hu_conv;
-               }
-               bindings.free_buffer(ret);
-               return ret_conv_15_arr;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.C2Tuple_PublicKeyCVec_SocketAddressZZ_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_PublicKeyCVec_SocketAddressZZ clone() {
-               long ret = bindings.C2Tuple_PublicKeyCVec_SocketAddressZZ_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PublicKeyCVec_SocketAddressZZ ret_hu_conv = new TwoTuple_PublicKeyCVec_SocketAddressZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_PublicKeyCVec_SocketAddressZZ from the contained elements.
-        */
-       public static TwoTuple_PublicKeyCVec_SocketAddressZZ of(byte[] a, SocketAddress[] b) {
-               long ret = bindings.C2Tuple_PublicKeyCVec_SocketAddressZZ_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(a, 33)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(b, b_conv_15 => b_conv_15.ptr)));
-               GC.KeepAlive(a);
-               GC.KeepAlive(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PublicKeyCVec_SocketAddressZZ ret_hu_conv = new TwoTuple_PublicKeyCVec_SocketAddressZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               foreach (SocketAddress b_conv_15 in b) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_conv_15); }; };
-               return ret_hu_conv;
-       }
-
-}
-} } }
diff --git a/c_sharp/src/org/ldk/structs/TwoTuple_ReleaseHeldHtlcResponseInstructionZ.cs b/c_sharp/src/org/ldk/structs/TwoTuple_ReleaseHeldHtlcResponseInstructionZ.cs
new file mode 100644 (file)
index 0000000..bd71e81
--- /dev/null
@@ -0,0 +1,75 @@
+using org.ldk.impl;
+using org.ldk.enums;
+using org.ldk.util;
+using System;
+
+namespace org { namespace ldk { namespace structs {
+
+
+/**
+ * A Tuple
+ */
+public class TwoTuple_ReleaseHeldHtlcResponseInstructionZ : CommonBase {
+       internal TwoTuple_ReleaseHeldHtlcResponseInstructionZ(object _dummy, long ptr) : base(ptr) { }
+       ~TwoTuple_ReleaseHeldHtlcResponseInstructionZ() {
+               if (ptr != 0) { bindings.C2Tuple_ReleaseHeldHtlcResponseInstructionZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public ReleaseHeldHtlc get_a() {
+               long ret = bindings.C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_a(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReleaseHeldHtlc ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReleaseHeldHtlc(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public ResponseInstruction get_b() {
+               long ret = bindings.C2Tuple_ReleaseHeldHtlcResponseInstructionZ_get_b(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ResponseInstruction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ResponseInstruction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       internal long clone_ptr() {
+               long ret = bindings.C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone_ptr(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ReleaseHeldHtlcResponseInstructionZ clone() {
+               long ret = bindings.C2Tuple_ReleaseHeldHtlcResponseInstructionZ_clone(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ReleaseHeldHtlcResponseInstructionZ ret_hu_conv = new TwoTuple_ReleaseHeldHtlcResponseInstructionZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ReleaseHeldHtlcResponseInstructionZ from the contained elements.
+        */
+       public static TwoTuple_ReleaseHeldHtlcResponseInstructionZ of(org.ldk.structs.ReleaseHeldHtlc a, org.ldk.structs.ResponseInstruction b) {
+               long ret = bindings.C2Tuple_ReleaseHeldHtlcResponseInstructionZ_new(a.ptr, b.ptr);
+               GC.KeepAlive(a);
+               GC.KeepAlive(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ReleaseHeldHtlcResponseInstructionZ ret_hu_conv = new TwoTuple_ReleaseHeldHtlcResponseInstructionZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
+} } }
index 9429f8aeb7319f7f3d86fa580ec0b2181fe9536c..b19e2aea9953a63e8f78d46b19a3e1b7a9a49e76 100644 (file)
@@ -66,8 +66,8 @@ public class TwoTuple_ThirtyTwoBytesChannelManagerZ : CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_signer_provider); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_config); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b_params); };
+               ;
+               ;
                return ret_hu_conv;
        }
 
index 33876e00ee643eb06afd053103088a08047f0e47..dcd058b6b5258d86a54b8b66eb14ccac72ec53e6 100644 (file)
@@ -67,7 +67,6 @@ public class TwoTuple_ThirtyTwoBytesChannelMonitorZ : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_ThirtyTwoBytesChannelMonitorZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesChannelMonitorZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(b); };
                return ret_hu_conv;
        }
 
index d40f628e19df49185be2a187d332c8f9276198a2..d7d850ec038a0847d1f149f26e350235798edfb3 100644 (file)
@@ -34,7 +34,6 @@ public class TxAbort : CommonBase {
                bindings.TxAbort_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -69,7 +68,6 @@ public class TxAbort : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxAbort ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxAbort(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 52362a53b75710d48a4ac49b4dd8af3b4907bb03..c85895f8b82b2ab7d40133165f1c5795f61aec92 100644 (file)
@@ -35,7 +35,6 @@ public class TxAckRbf : CommonBase {
                bindings.TxAckRbf_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -59,7 +58,6 @@ public class TxAckRbf : CommonBase {
                bindings.TxAckRbf_set_funding_output_contribution(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -72,8 +70,6 @@ public class TxAckRbf : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxAckRbf ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxAckRbf(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_output_contribution_arg); };
                return ret_hu_conv;
        }
 
index 2893c182a4d7d50e7fe2484dc50d5712c044136a..195f40f2092e03b12eee80d65454459d2cb0fe5d 100644 (file)
@@ -34,7 +34,6 @@ public class TxAddInput : CommonBase {
                bindings.TxAddInput_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -78,7 +77,6 @@ public class TxAddInput : CommonBase {
                bindings.TxAddInput_set_prevtx(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -117,21 +115,41 @@ public class TxAddInput : CommonBase {
                GC.KeepAlive(val);
        }
 
+       /**
+        * The ID of the previous funding transaction, when it is being added as an input during splicing
+        */
+       public Option_ThirtyTwoBytesZ get_shared_input_txid() {
+               long ret = bindings.TxAddInput_get_shared_input_txid(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The ID of the previous funding transaction, when it is being added as an input during splicing
+        */
+       public void set_shared_input_txid(org.ldk.structs.Option_ThirtyTwoBytesZ val) {
+               bindings.TxAddInput_set_shared_input_txid(this.ptr, val.ptr);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
        /**
         * Constructs a new TxAddInput given each field
         */
-       public static TxAddInput of(org.ldk.structs.ChannelId channel_id_arg, long serial_id_arg, org.ldk.structs.TransactionU16LenLimited prevtx_arg, int prevtx_out_arg, int sequence_arg) {
-               long ret = bindings.TxAddInput_new(channel_id_arg.ptr, serial_id_arg, prevtx_arg.ptr, prevtx_out_arg, sequence_arg);
+       public static TxAddInput of(org.ldk.structs.ChannelId channel_id_arg, long serial_id_arg, org.ldk.structs.TransactionU16LenLimited prevtx_arg, int prevtx_out_arg, int sequence_arg, org.ldk.structs.Option_ThirtyTwoBytesZ shared_input_txid_arg) {
+               long ret = bindings.TxAddInput_new(channel_id_arg.ptr, serial_id_arg, prevtx_arg.ptr, prevtx_out_arg, sequence_arg, shared_input_txid_arg.ptr);
                GC.KeepAlive(channel_id_arg);
                GC.KeepAlive(serial_id_arg);
                GC.KeepAlive(prevtx_arg);
                GC.KeepAlive(prevtx_out_arg);
                GC.KeepAlive(sequence_arg);
+               GC.KeepAlive(shared_input_txid_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxAddInput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxAddInput(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(prevtx_arg); };
                return ret_hu_conv;
        }
 
index 1b1fffe295588b3815987e5f662ca1ad3690db60..4eb42fca64a5bf37df4272b0e8e6d0e613555ec6 100644 (file)
@@ -34,7 +34,6 @@ public class TxAddOutput : CommonBase {
                bindings.TxAddOutput_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -107,7 +106,6 @@ public class TxAddOutput : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxAddOutput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxAddOutput(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 906528fa4caefadd18c3446c024f23745ca7906f..c2c0dfc657f4b1d424caa2eea7cababbf74d6b0c 100644 (file)
@@ -35,7 +35,6 @@ public class TxComplete : CommonBase {
                bindings.TxComplete_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -47,7 +46,6 @@ public class TxComplete : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxComplete ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxComplete(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 4be4a177be94a1363be5e35f028b347336caacb4..e692ad568343cb5965f180a91530e3d6a75a7eb0 100644 (file)
@@ -68,7 +68,6 @@ public class TxCreationKeys : CommonBase {
                bindings.TxCreationKeys_set_revocation_key(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -90,7 +89,6 @@ public class TxCreationKeys : CommonBase {
                bindings.TxCreationKeys_set_broadcaster_htlc_key(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -112,7 +110,6 @@ public class TxCreationKeys : CommonBase {
                bindings.TxCreationKeys_set_countersignatory_htlc_key(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -134,7 +131,6 @@ public class TxCreationKeys : CommonBase {
                bindings.TxCreationKeys_set_broadcaster_delayed_payment_key(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -150,10 +146,6 @@ public class TxCreationKeys : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxCreationKeys ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxCreationKeys(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(revocation_key_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(broadcaster_htlc_key_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(countersignatory_htlc_key_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(broadcaster_delayed_payment_key_arg); };
                return ret_hu_conv;
        }
 
index f071512f41000981e63d09c064f83cc216c3be43..fabf8e35863116a16226e8c06f7c9bd216e2b8e7 100644 (file)
@@ -35,7 +35,6 @@ public class TxInitRbf : CommonBase {
                bindings.TxInitRbf_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -95,7 +94,6 @@ public class TxInitRbf : CommonBase {
                bindings.TxInitRbf_set_funding_output_contribution(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -110,8 +108,6 @@ public class TxInitRbf : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxInitRbf ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxInitRbf(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_output_contribution_arg); };
                return ret_hu_conv;
        }
 
index 3a83aa73f06ecc993fd0fb9af2e8b76fefcf152d..cc1199b4e884857e9dc68ef1cad01874cf1795c3 100644 (file)
@@ -34,7 +34,6 @@ public class TxRemoveInput : CommonBase {
                bindings.TxRemoveInput_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -65,7 +64,6 @@ public class TxRemoveInput : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxRemoveInput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxRemoveInput(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 3779df9a4997ba30528c739b41150c11d460c983..6e921273701bb58996cdc2213c1fd3d04f98b829 100644 (file)
@@ -34,7 +34,6 @@ public class TxRemoveOutput : CommonBase {
                bindings.TxRemoveOutput_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -65,7 +64,6 @@ public class TxRemoveOutput : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxRemoveOutput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxRemoveOutput(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 6de18a0970d33a33cd2139932abb7ee641b5ecd8..ef1b70ddda19e0cd42cb0d0b02c64dd68acf6486 100644 (file)
@@ -35,7 +35,6 @@ public class TxSignatures : CommonBase {
                bindings.TxSignatures_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -90,8 +89,8 @@ public class TxSignatures : CommonBase {
        /**
         * Optional signature for the shared input -- the previous funding outpoint -- signed by both peers
         */
-       public Option_ECDSASignatureZ get_funding_outpoint_sig() {
-               long ret = bindings.TxSignatures_get_funding_outpoint_sig(this.ptr);
+       public Option_ECDSASignatureZ get_shared_input_signature() {
+               long ret = bindings.TxSignatures_get_shared_input_signature(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Option_ECDSASignatureZ ret_hu_conv = org.ldk.structs.Option_ECDSASignatureZ.constr_from_ptr(ret);
@@ -102,27 +101,24 @@ public class TxSignatures : CommonBase {
        /**
         * Optional signature for the shared input -- the previous funding outpoint -- signed by both peers
         */
-       public void set_funding_outpoint_sig(org.ldk.structs.Option_ECDSASignatureZ val) {
-               bindings.TxSignatures_set_funding_outpoint_sig(this.ptr, val.ptr);
+       public void set_shared_input_signature(org.ldk.structs.Option_ECDSASignatureZ val) {
+               bindings.TxSignatures_set_shared_input_signature(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
         * Constructs a new TxSignatures given each field
         */
-       public static TxSignatures of(org.ldk.structs.ChannelId channel_id_arg, byte[] tx_hash_arg, byte[][] witnesses_arg, org.ldk.structs.Option_ECDSASignatureZ funding_outpoint_sig_arg) {
-               long ret = bindings.TxSignatures_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(tx_hash_arg, 32)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(witnesses_arg, witnesses_arg_conv_8 => InternalUtils.encodeUint8Array(witnesses_arg_conv_8))), funding_outpoint_sig_arg.ptr);
+       public static TxSignatures of(org.ldk.structs.ChannelId channel_id_arg, byte[] tx_hash_arg, byte[][] witnesses_arg, org.ldk.structs.Option_ECDSASignatureZ shared_input_signature_arg) {
+               long ret = bindings.TxSignatures_new(channel_id_arg.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(tx_hash_arg, 32)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(witnesses_arg, witnesses_arg_conv_8 => InternalUtils.encodeUint8Array(witnesses_arg_conv_8))), shared_input_signature_arg.ptr);
                GC.KeepAlive(channel_id_arg);
                GC.KeepAlive(tx_hash_arg);
                GC.KeepAlive(witnesses_arg);
-               GC.KeepAlive(funding_outpoint_sig_arg);
+               GC.KeepAlive(shared_input_signature_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.TxSignatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TxSignatures(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(funding_outpoint_sig_arg); };
                return ret_hu_conv;
        }
 
index 0b81898fc57bb5a720319a45f83d3a103039aab5..27da41c679612b02511a5afe66987edce934cfab 100644 (file)
@@ -50,6 +50,77 @@ public class UnsignedBolt12Invoice : CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Duration since the Unix epoch when the invoice was created.
+        */
+       public long created_at() {
+               long ret = bindings.UnsignedBolt12Invoice_created_at(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Duration since
+        * [`Bolt12Invoice::created_at`]
+        * when the invoice has expired and therefore should no longer be paid.
+        */
+       public long relative_expiry() {
+               long ret = bindings.UnsignedBolt12Invoice_relative_expiry(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Whether the invoice has expired.
+        */
+       public bool is_expired() {
+               bool ret = bindings.UnsignedBolt12Invoice_is_expired(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Fallback addresses for paying the invoice on-chain, in order of most-preferred to
+        * least-preferred.
+        */
+       public string[] fallbacks() {
+               long ret = bindings.UnsignedBolt12Invoice_fallbacks(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               int ret_conv_8_len = InternalUtils.getArrayLength(ret);
+               string[] ret_conv_8_arr = new string[ret_conv_8_len];
+               for (int i = 0; i < ret_conv_8_len; i++) {
+                       long ret_conv_8 = InternalUtils.getU64ArrayElem(ret, i);
+                       string ret_conv_8_conv = InternalUtils.decodeString(ret_conv_8);
+                       ret_conv_8_arr[i] = ret_conv_8_conv;
+               }
+               bindings.free_buffer(ret);
+               return ret_conv_8_arr;
+       }
+
+       /**
+        * Features pertaining to paying an invoice.
+        */
+       public Bolt12InvoiceFeatures invoice_features() {
+               long ret = bindings.UnsignedBolt12Invoice_invoice_features(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The public key corresponding to the key used to sign the invoice.
+        */
+       public byte[] signing_pubkey() {
+               long ret = bindings.UnsignedBolt12Invoice_signing_pubkey(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
        /**
         * The chains that may be used when paying a requested invoice.
         * 
@@ -198,20 +269,20 @@ public class UnsignedBolt12Invoice : CommonBase {
         * 
         * [`Offer::paths`]: crate::offers::offer::Offer::paths
         */
-       public BlindedPath[] message_paths() {
+       public BlindedMessagePath[] message_paths() {
                long ret = bindings.UnsignedBolt12Invoice_message_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
@@ -302,34 +373,6 @@ public class UnsignedBolt12Invoice : CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Duration since the Unix epoch when the invoice was created.
-        */
-       public long created_at() {
-               long ret = bindings.UnsignedBolt12Invoice_created_at(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Duration since [`Bolt12Invoice::created_at`] when the invoice has expired and therefore
-        * should no longer be paid.
-        */
-       public long relative_expiry() {
-               long ret = bindings.UnsignedBolt12Invoice_relative_expiry(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Whether the invoice has expired.
-        */
-       public bool is_expired() {
-               bool ret = bindings.UnsignedBolt12Invoice_is_expired(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
        /**
         * SHA256 hash of the payment preimage that will be given in return for paying the invoice.
         */
@@ -350,29 +393,6 @@ public class UnsignedBolt12Invoice : CommonBase {
                return ret;
        }
 
-       /**
-        * Features pertaining to paying an invoice.
-        */
-       public Bolt12InvoiceFeatures invoice_features() {
-               long ret = bindings.UnsignedBolt12Invoice_invoice_features(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Bolt12InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * The public key corresponding to the key used to sign the invoice.
-        */
-       public byte[] signing_pubkey() {
-               long ret = bindings.UnsignedBolt12Invoice_signing_pubkey(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
        /**
         * Serialize the UnsignedBolt12Invoice object into a byte array which can be read by UnsignedBolt12Invoice_read
         */
index d1d5511930b7e193cfd0b76e2cbc1fa01b38f53a..09d2ddc570f756af05dfc2aa414ecb91fd566362 100644 (file)
@@ -36,7 +36,6 @@ public class UnsignedChannelAnnouncement : CommonBase {
                bindings.UnsignedChannelAnnouncement_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -96,7 +95,6 @@ public class UnsignedChannelAnnouncement : CommonBase {
                bindings.UnsignedChannelAnnouncement_set_node_id_1(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -118,7 +116,6 @@ public class UnsignedChannelAnnouncement : CommonBase {
                bindings.UnsignedChannelAnnouncement_set_node_id_2(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -140,7 +137,6 @@ public class UnsignedChannelAnnouncement : CommonBase {
                bindings.UnsignedChannelAnnouncement_set_bitcoin_key_1(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -162,7 +158,6 @@ public class UnsignedChannelAnnouncement : CommonBase {
                bindings.UnsignedChannelAnnouncement_set_bitcoin_key_2(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -209,11 +204,6 @@ public class UnsignedChannelAnnouncement : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UnsignedChannelAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UnsignedChannelAnnouncement(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_1_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_2_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(bitcoin_key_1_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(bitcoin_key_2_arg); };
                return ret_hu_conv;
        }
 
index 5601f3c9cf1485167bd86aeb8133b26ba2975fcb..3217ee57541de3ba6a3ff43304652daadd1100ae 100644 (file)
@@ -74,19 +74,39 @@ public class UnsignedChannelUpdate : CommonBase {
        }
 
        /**
-        * Channel flags
+        * Flags pertaining to this message.
         */
-       public byte get_flags() {
-               byte ret = bindings.UnsignedChannelUpdate_get_flags(this.ptr);
+       public byte get_message_flags() {
+               byte ret = bindings.UnsignedChannelUpdate_get_message_flags(this.ptr);
                GC.KeepAlive(this);
                return ret;
        }
 
        /**
-        * Channel flags
+        * Flags pertaining to this message.
         */
-       public void set_flags(byte val) {
-               bindings.UnsignedChannelUpdate_set_flags(this.ptr, val);
+       public void set_message_flags(byte val) {
+               bindings.UnsignedChannelUpdate_set_message_flags(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
+       /**
+        * Flags pertaining to the channel, including to which direction in the channel this update
+        * applies and whether the direction is currently able to forward HTLCs.
+        */
+       public byte get_channel_flags() {
+               byte ret = bindings.UnsignedChannelUpdate_get_channel_flags(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * Flags pertaining to the channel, including to which direction in the channel this update
+        * applies and whether the direction is currently able to forward HTLCs.
+        */
+       public void set_channel_flags(byte val) {
+               bindings.UnsignedChannelUpdate_set_channel_flags(this.ptr, val);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
        }
@@ -230,12 +250,13 @@ public class UnsignedChannelUpdate : CommonBase {
        /**
         * Constructs a new UnsignedChannelUpdate given each field
         */
-       public static UnsignedChannelUpdate of(byte[] chain_hash_arg, long short_channel_id_arg, int timestamp_arg, byte flags_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, int fee_base_msat_arg, int fee_proportional_millionths_arg, byte[] excess_data_arg) {
-               long ret = bindings.UnsignedChannelUpdate_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(chain_hash_arg, 32)), short_channel_id_arg, timestamp_arg, flags_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fee_base_msat_arg, fee_proportional_millionths_arg, InternalUtils.encodeUint8Array(excess_data_arg));
+       public static UnsignedChannelUpdate of(byte[] chain_hash_arg, long short_channel_id_arg, int timestamp_arg, byte message_flags_arg, byte channel_flags_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, int fee_base_msat_arg, int fee_proportional_millionths_arg, byte[] excess_data_arg) {
+               long ret = bindings.UnsignedChannelUpdate_new(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(chain_hash_arg, 32)), short_channel_id_arg, timestamp_arg, message_flags_arg, channel_flags_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fee_base_msat_arg, fee_proportional_millionths_arg, InternalUtils.encodeUint8Array(excess_data_arg));
                GC.KeepAlive(chain_hash_arg);
                GC.KeepAlive(short_channel_id_arg);
                GC.KeepAlive(timestamp_arg);
-               GC.KeepAlive(flags_arg);
+               GC.KeepAlive(message_flags_arg);
+               GC.KeepAlive(channel_flags_arg);
                GC.KeepAlive(cltv_expiry_delta_arg);
                GC.KeepAlive(htlc_minimum_msat_arg);
                GC.KeepAlive(htlc_maximum_msat_arg);
index fee4ac0fc2f220911aa81bdcf20fb009731137ae..61d5b5af221fe0b31fcf2a2de05a265ded46c637 100644 (file)
@@ -82,7 +82,6 @@ public class UnsignedGossipMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UnsignedGossipMessage ret_hu_conv = org.ldk.structs.UnsignedGossipMessage.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -95,7 +94,6 @@ public class UnsignedGossipMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UnsignedGossipMessage ret_hu_conv = org.ldk.structs.UnsignedGossipMessage.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
@@ -108,7 +106,6 @@ public class UnsignedGossipMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UnsignedGossipMessage ret_hu_conv = org.ldk.structs.UnsignedGossipMessage.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index 8a3dd22a0844e52b2348162de7204e122d20fe08..68e9fa24b2cdc9779b373f3202e7bce1e9b08b85 100644 (file)
@@ -155,20 +155,20 @@ public class UnsignedInvoiceRequest : CommonBase {
         * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
         * recipient privacy by obfuscating its node id.
         */
-       public BlindedPath[] paths() {
+       public BlindedMessagePath[] paths() {
                long ret = bindings.UnsignedInvoiceRequest_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
index 402811f5b8d015da48af8809522e807063098d5e..c89d7f3be723fb0565c5f6b5eb82dc54a720a75c 100644 (file)
@@ -36,7 +36,6 @@ public class UnsignedNodeAnnouncement : CommonBase {
                bindings.UnsignedNodeAnnouncement_set_features(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -78,7 +77,6 @@ public class UnsignedNodeAnnouncement : CommonBase {
                bindings.UnsignedNodeAnnouncement_set_node_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -124,7 +122,6 @@ public class UnsignedNodeAnnouncement : CommonBase {
                bindings.UnsignedNodeAnnouncement_set_alias(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -155,7 +152,6 @@ public class UnsignedNodeAnnouncement : CommonBase {
                bindings.UnsignedNodeAnnouncement_set_addresses(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(val, val_conv_15 => val_conv_15.ptr)));
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               foreach (SocketAddress val_conv_15 in val) { if (this != null) { this.ptrs_to.AddLast(val_conv_15); }; };
        }
 
        /**
@@ -230,10 +226,6 @@ public class UnsignedNodeAnnouncement : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UnsignedNodeAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UnsignedNodeAnnouncement(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(features_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(alias_arg); };
-               foreach (SocketAddress addresses_arg_conv_15 in addresses_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(addresses_arg_conv_15); }; };
                return ret_hu_conv;
        }
 
index c23c97baeeb8033b61a357f79f564e6abf03e1a1..b697ffff0ffcb223c87b67e35097e99390607887 100644 (file)
@@ -15,6 +15,28 @@ public class UntrustedString : CommonBase {
                if (ptr != 0) { bindings.UntrustedString_free(ptr); }
        }
 
+       /**
+        * Serialize the UntrustedString object into a byte array which can be read by UntrustedString_read
+        */
+       public byte[] write() {
+               long ret = bindings.UntrustedString_write(this.ptr);
+               GC.KeepAlive(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
+               return ret_conv;
+       }
+
+       /**
+        * Read a UntrustedString from a byte array, created by UntrustedString_write
+        */
+       public static Result_UntrustedStringDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.UntrustedString_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_UntrustedStringDecodeErrorZ ret_hu_conv = Result_UntrustedStringDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        public string get_a() {
                long ret = bindings.UntrustedString_get_a(this.ptr);
                GC.KeepAlive(this);
@@ -88,28 +110,6 @@ public class UntrustedString : CommonBase {
        public override int GetHashCode() {
                return (int)this.hash();
        }
-       /**
-        * Serialize the UntrustedString object into a byte array which can be read by UntrustedString_read
-        */
-       public byte[] write() {
-               long ret = bindings.UntrustedString_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       /**
-        * Read a UntrustedString from a byte array, created by UntrustedString_write
-        */
-       public static Result_UntrustedStringDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.UntrustedString_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_UntrustedStringDecodeErrorZ ret_hu_conv = Result_UntrustedStringDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
        /**
         * Get the string representation of a UntrustedString object
         */
index 52acd06f2a22ade8d8f2b700eeae6e6e835515d1..b5fc80f4ffad2933d169c56706fd76444f067ff8 100644 (file)
@@ -36,7 +36,6 @@ public class UpdateAddHTLC : CommonBase {
                bindings.UpdateAddHTLC_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -138,7 +137,6 @@ public class UpdateAddHTLC : CommonBase {
                bindings.UpdateAddHTLC_set_skimmed_fee_msat(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -160,7 +158,6 @@ public class UpdateAddHTLC : CommonBase {
                bindings.UpdateAddHTLC_set_onion_routing_packet(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -207,9 +204,6 @@ public class UpdateAddHTLC : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UpdateAddHTLC ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UpdateAddHTLC(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(skimmed_fee_msat_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(onion_routing_packet_arg); };
                return ret_hu_conv;
        }
 
index 767f33902d40b63f1102d37278486c250a522325..0dc3cf7a851cb0700b02524e1112a640651cbd27 100644 (file)
@@ -36,7 +36,6 @@ public class UpdateFailHTLC : CommonBase {
                bindings.UpdateFailHTLC_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
index 67f93a4c1e255d7c630ed5182fbd14611fb55faa..d6f8f4428247a68426ca08bc6ca45a1f9d9655ba 100644 (file)
@@ -36,7 +36,6 @@ public class UpdateFailMalformedHTLC : CommonBase {
                bindings.UpdateFailMalformedHTLC_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
index 1d752e1f7622fc3cb58c2ce95decaf26bce3508b..5bf05213906a00bef3f6ea6086e2e7697369a0fe 100644 (file)
@@ -36,7 +36,6 @@ public class UpdateFee : CommonBase {
                bindings.UpdateFee_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -67,7 +66,6 @@ public class UpdateFee : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UpdateFee ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UpdateFee(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index 9ca1f56661092555e305022bd4ff29aef9ad6485..494f30d1f11f8a4c7ee55af4f07790869c03b854 100644 (file)
@@ -36,7 +36,6 @@ public class UpdateFulfillHTLC : CommonBase {
                bindings.UpdateFulfillHTLC_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -88,7 +87,6 @@ public class UpdateFulfillHTLC : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UpdateFulfillHTLC ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UpdateFulfillHTLC(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index b64a22e47185044d504b368f54a2b39c15b9eaba..7dd3148d028cc592cf09f3fe7fef404ddb83975d 100644 (file)
@@ -9,8 +9,8 @@ namespace org { namespace ldk { namespace structs {
 /**
  * Top-level config which holds ChannelHandshakeLimits and ChannelConfig.
  * 
- * Default::default() provides sane defaults for most configurations
- * (but currently with 0 relay fees!)
+ * `Default::default()` provides sane defaults for most configurations
+ * (but currently with zero relay fees!)
  */
 public class UserConfig : CommonBase {
        internal UserConfig(object _dummy, long ptr) : base(ptr) { }
@@ -37,7 +37,6 @@ public class UserConfig : CommonBase {
                bindings.UserConfig_set_channel_handshake_config(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -59,7 +58,6 @@ public class UserConfig : CommonBase {
                bindings.UserConfig_set_channel_handshake_limits(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -81,17 +79,16 @@ public class UserConfig : CommonBase {
                bindings.UserConfig_set_channel_config(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
-        * If this is set to false, we will reject any HTLCs which were to be forwarded over private
+        * If this is set to `false`, we will reject any HTLCs which were to be forwarded over private
         * channels. This prevents us from taking on HTLC-forwarding risk when we intend to run as a
         * node which is not online reliably.
         * 
         * For nodes which are not online reliably, you should set all channels to *not* be announced
-        * (using [`ChannelHandshakeConfig::announced_channel`] and
-        * [`ChannelHandshakeLimits::force_announced_channel_preference`]) and set this to false to
+        * (using [`ChannelHandshakeConfig::announce_for_forwarding`] and
+        * [`ChannelHandshakeLimits::force_announced_channel_preference`]) and set this to `false` to
         * ensure you are not exposed to any forwarding risk.
         * 
         * Note that because you cannot change a channel's announced state after creation, there is no
@@ -100,7 +97,7 @@ public class UserConfig : CommonBase {
         * all your channels and open new ones. For privacy, you should also change your node_id
         * (swapping all private and public key material for new ones) at that time.
         * 
-        * Default value: false.
+        * Default value: `false`
         */
        public bool get_accept_forwards_to_priv_channels() {
                bool ret = bindings.UserConfig_get_accept_forwards_to_priv_channels(this.ptr);
@@ -109,13 +106,13 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to false, we will reject any HTLCs which were to be forwarded over private
+        * If this is set to `false`, we will reject any HTLCs which were to be forwarded over private
         * channels. This prevents us from taking on HTLC-forwarding risk when we intend to run as a
         * node which is not online reliably.
         * 
         * For nodes which are not online reliably, you should set all channels to *not* be announced
-        * (using [`ChannelHandshakeConfig::announced_channel`] and
-        * [`ChannelHandshakeLimits::force_announced_channel_preference`]) and set this to false to
+        * (using [`ChannelHandshakeConfig::announce_for_forwarding`] and
+        * [`ChannelHandshakeLimits::force_announced_channel_preference`]) and set this to `false` to
         * ensure you are not exposed to any forwarding risk.
         * 
         * Note that because you cannot change a channel's announced state after creation, there is no
@@ -124,7 +121,7 @@ public class UserConfig : CommonBase {
         * all your channels and open new ones. For privacy, you should also change your node_id
         * (swapping all private and public key material for new ones) at that time.
         * 
-        * Default value: false.
+        * Default value: `false`
         */
        public void set_accept_forwards_to_priv_channels(bool val) {
                bindings.UserConfig_set_accept_forwards_to_priv_channels(this.ptr, val);
@@ -133,8 +130,9 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to false, we do not accept inbound requests to open a new channel.
-        * Default value: true.
+        * If this is set to `false`, we do not accept inbound requests to open a new channel.
+        * 
+        * Default value: `true`
         */
        public bool get_accept_inbound_channels() {
                bool ret = bindings.UserConfig_get_accept_inbound_channels(this.ptr);
@@ -143,8 +141,9 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to false, we do not accept inbound requests to open a new channel.
-        * Default value: true.
+        * If this is set to `false`, we do not accept inbound requests to open a new channel.
+        * 
+        * Default value: `true`
         */
        public void set_accept_inbound_channels(bool val) {
                bindings.UserConfig_set_accept_inbound_channels(this.ptr, val);
@@ -153,15 +152,15 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to true, the user needs to manually accept inbound requests to open a new
+        * If this is set to `true`, the user needs to manually accept inbound requests to open a new
         * channel.
         * 
-        * When set to true, [`Event::OpenChannelRequest`] will be triggered once a request to open a
+        * When set to `true`, [`Event::OpenChannelRequest`] will be triggered once a request to open a
         * new inbound channel is received through a [`msgs::OpenChannel`] message. In that case, a
         * [`msgs::AcceptChannel`] message will not be sent back to the counterparty node unless the
         * user explicitly chooses to accept the request.
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [`Event::OpenChannelRequest`]: crate::events::Event::OpenChannelRequest
         * [`msgs::OpenChannel`]: crate::ln::msgs::OpenChannel
@@ -174,15 +173,15 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to true, the user needs to manually accept inbound requests to open a new
+        * If this is set to `true`, the user needs to manually accept inbound requests to open a new
         * channel.
         * 
-        * When set to true, [`Event::OpenChannelRequest`] will be triggered once a request to open a
+        * When set to `true`, [`Event::OpenChannelRequest`] will be triggered once a request to open a
         * new inbound channel is received through a [`msgs::OpenChannel`] message. In that case, a
         * [`msgs::AcceptChannel`] message will not be sent back to the counterparty node unless the
         * user explicitly chooses to accept the request.
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [`Event::OpenChannelRequest`]: crate::events::Event::OpenChannelRequest
         * [`msgs::OpenChannel`]: crate::ln::msgs::OpenChannel
@@ -195,13 +194,13 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to true, LDK will intercept HTLCs that are attempting to be forwarded over
+        * If this is set to `true`, LDK will intercept HTLCs that are attempting to be forwarded over
         * fake short channel ids generated via [`ChannelManager::get_intercept_scid`]. Upon HTLC
         * intercept, LDK will generate an [`Event::HTLCIntercepted`] which MUST be handled by the user.
         * 
-        * Setting this to true may break backwards compatibility with LDK versions < 0.0.113.
+        * Setting this to `true` may break backwards compatibility with LDK versions < 0.0.113.
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [`ChannelManager::get_intercept_scid`]: crate::ln::channelmanager::ChannelManager::get_intercept_scid
         * [`Event::HTLCIntercepted`]: crate::events::Event::HTLCIntercepted
@@ -213,13 +212,13 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to true, LDK will intercept HTLCs that are attempting to be forwarded over
+        * If this is set to `true`, LDK will intercept HTLCs that are attempting to be forwarded over
         * fake short channel ids generated via [`ChannelManager::get_intercept_scid`]. Upon HTLC
         * intercept, LDK will generate an [`Event::HTLCIntercepted`] which MUST be handled by the user.
         * 
-        * Setting this to true may break backwards compatibility with LDK versions < 0.0.113.
+        * Setting this to `true` may break backwards compatibility with LDK versions < 0.0.113.
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [`ChannelManager::get_intercept_scid`]: crate::ln::channelmanager::ChannelManager::get_intercept_scid
         * [`Event::HTLCIntercepted`]: crate::events::Event::HTLCIntercepted
@@ -231,14 +230,14 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to false, when receiving a keysend payment we'll fail it if it has multiple
-        * parts. If this is set to true, we'll accept the payment.
+        * If this is set to `false`, when receiving a keysend payment we'll fail it if it has multiple
+        * parts. If this is set to `true`, we'll accept the payment.
         * 
-        * Setting this to true will break backwards compatibility upon downgrading to an LDK
-        * version < 0.0.116 while receiving an MPP keysend. If we have already received an MPP
+        * Setting this to `true` will break backwards compatibility upon downgrading to an LDK
+        * version prior to 0.0.116 while receiving an MPP keysend. If we have already received an MPP
         * keysend, downgrading will cause us to fail to deserialize [`ChannelManager`].
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
@@ -249,14 +248,14 @@ public class UserConfig : CommonBase {
        }
 
        /**
-        * If this is set to false, when receiving a keysend payment we'll fail it if it has multiple
-        * parts. If this is set to true, we'll accept the payment.
+        * If this is set to `false`, when receiving a keysend payment we'll fail it if it has multiple
+        * parts. If this is set to `true`, we'll accept the payment.
         * 
-        * Setting this to true will break backwards compatibility upon downgrading to an LDK
-        * version < 0.0.116 while receiving an MPP keysend. If we have already received an MPP
+        * Setting this to `true` will break backwards compatibility upon downgrading to an LDK
+        * version prior to 0.0.116 while receiving an MPP keysend. If we have already received an MPP
         * keysend, downgrading will cause us to fail to deserialize [`ChannelManager`].
         * 
-        * Default value: false.
+        * Default value: `false`
         * 
         * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
@@ -266,11 +265,53 @@ public class UserConfig : CommonBase {
                GC.KeepAlive(val);
        }
 
+       /**
+        * If this is set to `true`, the user needs to manually pay [`Bolt12Invoice`]s when received.
+        * 
+        * When set to `true`, [`Event::InvoiceReceived`] will be generated for each received
+        * [`Bolt12Invoice`] instead of being automatically paid after verification. Use
+        * [`ChannelManager::send_payment_for_bolt12_invoice`] to pay the invoice or
+        * [`ChannelManager::abandon_payment`] to abandon the associated payment.
+        * 
+        * Default value: `false`
+        * 
+        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
+        * [`Event::InvoiceReceived`]: crate::events::Event::InvoiceReceived
+        * [`ChannelManager::send_payment_for_bolt12_invoice`]: crate::ln::channelmanager::ChannelManager::send_payment_for_bolt12_invoice
+        * [`ChannelManager::abandon_payment`]: crate::ln::channelmanager::ChannelManager::abandon_payment
+        */
+       public bool get_manually_handle_bolt12_invoices() {
+               bool ret = bindings.UserConfig_get_manually_handle_bolt12_invoices(this.ptr);
+               GC.KeepAlive(this);
+               return ret;
+       }
+
+       /**
+        * If this is set to `true`, the user needs to manually pay [`Bolt12Invoice`]s when received.
+        * 
+        * When set to `true`, [`Event::InvoiceReceived`] will be generated for each received
+        * [`Bolt12Invoice`] instead of being automatically paid after verification. Use
+        * [`ChannelManager::send_payment_for_bolt12_invoice`] to pay the invoice or
+        * [`ChannelManager::abandon_payment`] to abandon the associated payment.
+        * 
+        * Default value: `false`
+        * 
+        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
+        * [`Event::InvoiceReceived`]: crate::events::Event::InvoiceReceived
+        * [`ChannelManager::send_payment_for_bolt12_invoice`]: crate::ln::channelmanager::ChannelManager::send_payment_for_bolt12_invoice
+        * [`ChannelManager::abandon_payment`]: crate::ln::channelmanager::ChannelManager::abandon_payment
+        */
+       public void set_manually_handle_bolt12_invoices(bool val) {
+               bindings.UserConfig_set_manually_handle_bolt12_invoices(this.ptr, val);
+               GC.KeepAlive(this);
+               GC.KeepAlive(val);
+       }
+
        /**
         * Constructs a new UserConfig given each field
         */
-       public static UserConfig of(org.ldk.structs.ChannelHandshakeConfig channel_handshake_config_arg, org.ldk.structs.ChannelHandshakeLimits channel_handshake_limits_arg, org.ldk.structs.ChannelConfig channel_config_arg, bool accept_forwards_to_priv_channels_arg, bool accept_inbound_channels_arg, bool manually_accept_inbound_channels_arg, bool accept_intercept_htlcs_arg, bool accept_mpp_keysend_arg) {
-               long ret = bindings.UserConfig_new(channel_handshake_config_arg.ptr, channel_handshake_limits_arg.ptr, channel_config_arg.ptr, accept_forwards_to_priv_channels_arg, accept_inbound_channels_arg, manually_accept_inbound_channels_arg, accept_intercept_htlcs_arg, accept_mpp_keysend_arg);
+       public static UserConfig of(org.ldk.structs.ChannelHandshakeConfig channel_handshake_config_arg, org.ldk.structs.ChannelHandshakeLimits channel_handshake_limits_arg, org.ldk.structs.ChannelConfig channel_config_arg, bool accept_forwards_to_priv_channels_arg, bool accept_inbound_channels_arg, bool manually_accept_inbound_channels_arg, bool accept_intercept_htlcs_arg, bool accept_mpp_keysend_arg, bool manually_handle_bolt12_invoices_arg) {
+               long ret = bindings.UserConfig_new(channel_handshake_config_arg.ptr, channel_handshake_limits_arg.ptr, channel_config_arg.ptr, accept_forwards_to_priv_channels_arg, accept_inbound_channels_arg, manually_accept_inbound_channels_arg, accept_intercept_htlcs_arg, accept_mpp_keysend_arg, manually_handle_bolt12_invoices_arg);
                GC.KeepAlive(channel_handshake_config_arg);
                GC.KeepAlive(channel_handshake_limits_arg);
                GC.KeepAlive(channel_config_arg);
@@ -279,12 +320,10 @@ public class UserConfig : CommonBase {
                GC.KeepAlive(manually_accept_inbound_channels_arg);
                GC.KeepAlive(accept_intercept_htlcs_arg);
                GC.KeepAlive(accept_mpp_keysend_arg);
+               GC.KeepAlive(manually_handle_bolt12_invoices_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UserConfig ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UserConfig(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_handshake_config_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_handshake_limits_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_config_arg); };
                return ret_hu_conv;
        }
 
index 281808f7aa1968c40c82844e1036cb6e8751b26f..e8b1761a4f64f9ef9a5d02ed1b273c0949f86909 100644 (file)
@@ -60,13 +60,13 @@ public class UtilMethods {
         * A receiver knowing the PublicKey (e.g. the node's id) and the message can be sure that the signature was generated by the caller.
         * Signatures are EC recoverable, meaning that given the message and the signature the PublicKey of the signer can be extracted.
         */
-       public static Result_StrSecp256k1ErrorZ sign(byte[] msg, byte[] sk) {
+       public static string sign(byte[] msg, byte[] sk) {
                long ret = bindings.sign(InternalUtils.encodeUint8Array(msg), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(sk, 32)));
                GC.KeepAlive(msg);
                GC.KeepAlive(sk);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
+               string ret_conv = InternalUtils.decodeString(ret);
+               return ret_conv;
        }
 
        /**
@@ -93,18 +93,6 @@ public class UtilMethods {
                return ret;
        }
 
-       /**
-        * Construct the invoice's HRP and signatureless data into a preimage to be hashed.
-        */
-       public static byte[] construct_invoice_preimage(byte[] hrp_bytes, UInt5[] data_without_signature) {
-               long ret = bindings.construct_invoice_preimage(InternalUtils.encodeUint8Array(hrp_bytes), InternalUtils.encodeUint8Array(InternalUtils.convUInt5Array(data_without_signature)));
-               GC.KeepAlive(hrp_bytes);
-               GC.KeepAlive(data_without_signature);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
        /**
         * Read previously persisted [`ChannelMonitor`]s from the store.
         */
@@ -280,7 +268,7 @@ public class UtilMethods {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_tx_broadcaster); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_router); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_default_config); };
+               ;
                foreach (ChannelMonitor arg_channel_monitors_conv_16 in arg_channel_monitors) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(arg_channel_monitors_conv_16); }; };
                return ret_hu_conv;
        }
@@ -349,9 +337,7 @@ public class UtilMethods {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(keys); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_value_msat); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
                return ret_hu_conv;
        }
 
@@ -378,8 +364,6 @@ public class UtilMethods {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(keys); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_value_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
                return ret_hu_conv;
        }
 
@@ -633,326 +617,271 @@ public class UtilMethods {
        }
 
        /**
-        * Read a NetworkUpdate from a byte array, created by NetworkUpdate_write
-        */
-       public static Result_COption_NetworkUpdateZDecodeErrorZ NetworkUpdate_read(byte[] ser) {
-               long ret = bindings.NetworkUpdate_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Verifies the signature of a [`NodeAnnouncement`].
+        * Utility to create an invoice that can be paid to one of multiple nodes, or a \"phantom invoice.\"
+        * See [`PhantomKeysManager`] for more information on phantom node payments.
         * 
-        * Returns an error if it is invalid.
-        */
-       public static Result_NoneLightningErrorZ verify_node_announcement(org.ldk.structs.NodeAnnouncement msg) {
-               long ret = bindings.verify_node_announcement(msg.ptr);
-               GC.KeepAlive(msg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Verifies all signatures included in a [`ChannelAnnouncement`].
+        * `phantom_route_hints` parameter:
+        * Contains channel info for all nodes participating in the phantom invoice
+        * Entries are retrieved from a call to [`ChannelManager::get_phantom_route_hints`] on each
+        * participating node
+        * It is fine to cache `phantom_route_hints` and reuse it across invoices, as long as the data is
+        * updated when a channel becomes disabled or closes
+        * Note that if too many channels are included in [`PhantomRouteHints::channels`], the invoice
+        * may be too long for QR code scanning. To fix this, `PhantomRouteHints::channels` may be pared
+        * down
         * 
-        * Returns an error if one of the signatures is invalid.
+        * `payment_hash` can be specified if you have a specific need for a custom payment hash (see the difference
+        * between [`ChannelManager::create_inbound_payment`] and [`ChannelManager::create_inbound_payment_for_hash`]).
+        * If `None` is provided for `payment_hash`, then one will be created.
+        * 
+        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
+        * in excess of the current time.
+        * 
+        * `duration_since_epoch` is the current time since epoch in seconds.
+        * 
+        * You can specify a custom `min_final_cltv_expiry_delta`, or let LDK default it to
+        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]. The provided expiry must be at least [`MIN_FINAL_CLTV_EXPIRY_DELTA`] - 3.
+        * Note that LDK will add a buffer of 3 blocks to the delta to allow for up to a few new block
+        * confirmations during routing.
+        * 
+        * Note that the provided `keys_manager`'s `NodeSigner` implementation must support phantom
+        * invoices in its `sign_invoice` implementation ([`PhantomKeysManager`] satisfies this
+        * requirement).
+        * 
+        * [`PhantomKeysManager`]: crate::sign::PhantomKeysManager
+        * [`ChannelManager::get_phantom_route_hints`]: crate::ln::channelmanager::ChannelManager::get_phantom_route_hints
+        * [`ChannelManager::create_inbound_payment`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment
+        * [`ChannelManager::create_inbound_payment_for_hash`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment_for_hash
+        * [`PhantomRouteHints::channels`]: crate::ln::channelmanager::PhantomRouteHints::channels
+        * [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: crate::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
+        * 
+        * This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
+        * available and the current time is supplied by the caller.
         */
-       public static Result_NoneLightningErrorZ verify_channel_announcement(org.ldk.structs.ChannelAnnouncement msg) {
-               long ret = bindings.verify_channel_announcement(msg.ptr);
-               GC.KeepAlive(msg);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, string description, int invoice_expiry_delta_secs, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
+               long ret = bindings.create_phantom_invoice(amt_msat.ptr, payment_hash.ptr, InternalUtils.encodeString(description), invoice_expiry_delta_secs, InternalUtils.encodeUint64Array(InternalUtils.mapArray(phantom_route_hints, phantom_route_hints_conv_19 => phantom_route_hints_conv_19.ptr)), entropy_source.ptr, node_signer.ptr, logger.ptr, network, min_final_cltv_expiry_delta.ptr, duration_since_epoch);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(payment_hash);
+               GC.KeepAlive(description);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(phantom_route_hints);
+               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(node_signer);
+               GC.KeepAlive(logger);
+               GC.KeepAlive(network);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(duration_since_epoch);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                return ret_hu_conv;
        }
 
        /**
-        * Finds a route from us (payer) to the given target node (payee).
+        * Utility to create an invoice that can be paid to one of multiple nodes, or a \"phantom invoice.\"
+        * See [`PhantomKeysManager`] for more information on phantom node payments.
         * 
-        * If the payee provided features in their invoice, they should be provided via the `payee` field
-        * in the given [`RouteParameters::payment_params`].
-        * Without this, MPP will only be used if the payee's features are available in the network graph.
+        * `phantom_route_hints` parameter:
+        * Contains channel info for all nodes participating in the phantom invoice
+        * Entries are retrieved from a call to [`ChannelManager::get_phantom_route_hints`] on each
+        * participating node
+        * It is fine to cache `phantom_route_hints` and reuse it across invoices, as long as the data is
+        * updated when a channel becomes disabled or closes
+        * Note that the route hints generated from `phantom_route_hints` will be limited to a maximum
+        * of 3 hints to ensure that the invoice can be scanned in a QR code. These hints are selected
+        * in the order that the nodes in `PhantomRouteHints` are specified, selecting one hint per node
+        * until the maximum is hit. Callers may provide as many `PhantomRouteHints::channels` as
+        * desired, but note that some nodes will be trimmed if more than 3 nodes are provided.
         * 
-        * Private routing paths between a public node and the target may be included in the `payee` field
-        * of [`RouteParameters::payment_params`].
+        * `description_hash` is a SHA-256 hash of the description text
         * 
-        * If some channels aren't announced, it may be useful to fill in `first_hops` with the results
-        * from [`ChannelManager::list_usable_channels`]. If it is filled in, the view of these channels
-        * from `network_graph` will be ignored, and only those in `first_hops` will be used.
+        * `payment_hash` can be specified if you have a specific need for a custom payment hash (see the difference
+        * between [`ChannelManager::create_inbound_payment`] and [`ChannelManager::create_inbound_payment_for_hash`]).
+        * If `None` is provided for `payment_hash`, then one will be created.
         * 
-        * The fees on channels from us to the next hop are ignored as they are assumed to all be equal.
-        * However, the enabled/disabled bit on such channels as well as the `htlc_minimum_msat` /
-        * `htlc_maximum_msat` *are* checked as they may change based on the receiving node.
+        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
+        * in excess of the current time.
         * 
-        * # Panics
+        * `duration_since_epoch` is the current time since epoch in seconds.
         * 
-        * Panics if first_hops contains channels without `short_channel_id`s;
-        * [`ChannelManager::list_usable_channels`] will never include such channels.
+        * Note that the provided `keys_manager`'s `NodeSigner` implementation must support phantom
+        * invoices in its `sign_invoice` implementation ([`PhantomKeysManager`] satisfies this
+        * requirement).
         * 
-        * [`ChannelManager::list_usable_channels`]: crate::ln::channelmanager::ChannelManager::list_usable_channels
-        * [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
-        * [`NetworkGraph`]: crate::routing::gossip::NetworkGraph
+        * [`PhantomKeysManager`]: crate::sign::PhantomKeysManager
+        * [`ChannelManager::get_phantom_route_hints`]: crate::ln::channelmanager::ChannelManager::get_phantom_route_hints
+        * [`ChannelManager::create_inbound_payment`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment
+        * [`ChannelManager::create_inbound_payment_for_hash`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment_for_hash
+        * [`PhantomRouteHints::channels`]: crate::ln::channelmanager::PhantomRouteHints::channels
         * 
-        * Note that first_hops (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
+        * available and the current time is supplied by the caller.
         */
-       public static Result_RouteLightningErrorZ find_route(byte[] our_node_pubkey, org.ldk.structs.RouteParameters route_params, org.ldk.structs.NetworkGraph network_graph, ChannelDetails[] first_hops, org.ldk.structs.Logger logger, org.ldk.structs.ScoreLookUp scorer, org.ldk.structs.ProbabilisticScoringFeeParameters score_params, byte[] random_seed_bytes) {
-               long ret = bindings.find_route(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(our_node_pubkey, 33)), route_params.ptr, network_graph.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(first_hops, first_hops_conv_16 => first_hops_conv_16.ptr)), logger.ptr, scorer.ptr, score_params.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(random_seed_bytes, 32)));
-               GC.KeepAlive(our_node_pubkey);
-               GC.KeepAlive(route_params);
-               GC.KeepAlive(network_graph);
-               GC.KeepAlive(first_hops);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, int invoice_expiry_delta_secs, org.ldk.structs.Sha256 description_hash, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
+               long ret = bindings.create_phantom_invoice_with_description_hash(amt_msat.ptr, payment_hash.ptr, invoice_expiry_delta_secs, description_hash.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(phantom_route_hints, phantom_route_hints_conv_19 => phantom_route_hints_conv_19.ptr)), entropy_source.ptr, node_signer.ptr, logger.ptr, network, min_final_cltv_expiry_delta.ptr, duration_since_epoch);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(payment_hash);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(description_hash);
+               GC.KeepAlive(phantom_route_hints);
+               GC.KeepAlive(entropy_source);
+               GC.KeepAlive(node_signer);
                GC.KeepAlive(logger);
-               GC.KeepAlive(scorer);
-               GC.KeepAlive(score_params);
-               GC.KeepAlive(random_seed_bytes);
+               GC.KeepAlive(network);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(duration_since_epoch);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(route_params); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
-               if (first_hops != null) { foreach (ChannelDetails first_hops_conv_16 in first_hops) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(first_hops_conv_16); }; } };
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(scorer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(score_params); };
                return ret_hu_conv;
        }
 
        /**
-        * Construct a route from us (payer) to the target node (payee) via the given hops (which should
-        * exclude the payer, but include the payee). This may be useful, e.g., for probing the chosen path.
+        * Utility to construct an invoice. Generally, unless you want to do something like a custom
+        * cltv_expiry, this is what you should be using to create an invoice. The reason being, this
+        * method stores the invoice's payment secret and preimage in `ChannelManager`, so (a) the user
+        * doesn't have to store preimage/payment secret information and (b) `ChannelManager` can verify
+        * that the payment secret is valid when the invoice is paid.
         * 
-        * Re-uses logic from `find_route`, so the restrictions described there also apply here.
+        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
+        * in excess of the current time.
+        * 
+        * You can specify a custom `min_final_cltv_expiry_delta`, or let LDK default it to
+        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]. The provided expiry must be at least [`MIN_FINAL_CLTV_EXPIRY_DELTA`].
+        * Note that LDK will add a buffer of 3 blocks to the delta to allow for up to a few new block
+        * confirmations during routing.
+        * 
+        * [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: crate::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
         */
-       public static Result_RouteLightningErrorZ build_route_from_hops(byte[] our_node_pubkey, byte[][] hops, org.ldk.structs.RouteParameters route_params, org.ldk.structs.NetworkGraph network_graph, org.ldk.structs.Logger logger, byte[] random_seed_bytes) {
-               long ret = bindings.build_route_from_hops(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(our_node_pubkey, 33)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(hops, hops_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(hops_conv_8, 33)))), route_params.ptr, network_graph.ptr, logger.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(random_seed_bytes, 32)));
-               GC.KeepAlive(our_node_pubkey);
-               GC.KeepAlive(hops);
-               GC.KeepAlive(route_params);
-               GC.KeepAlive(network_graph);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, string description, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+               long ret = bindings.create_invoice_from_channelmanager(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, InternalUtils.encodeString(description), invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
+               GC.KeepAlive(channelmanager);
+               GC.KeepAlive(node_signer);
                GC.KeepAlive(logger);
-               GC.KeepAlive(random_seed_bytes);
+               GC.KeepAlive(network);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(description);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(route_params); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                return ret_hu_conv;
        }
 
        /**
-        * Creates an unsigned [`PartiallySignedTransaction`] which spends the given descriptors to
-        * the given outputs, plus an output to the given change destination (if sufficient
-        * change value remains). The PSBT will have a feerate, at least, of the given value.
-        * 
-        * The `locktime` argument is used to set the transaction's locktime. If `None`, the
-        * transaction will have a locktime of 0. It it recommended to set this to the current block
-        * height to avoid fee sniping, unless you have some specific reason to use a different
-        * locktime.
+        * Utility to construct an invoice. Generally, unless you want to do something like a custom
+        * cltv_expiry, this is what you should be using to create an invoice. The reason being, this
+        * method stores the invoice's payment secret and preimage in `ChannelManager`, so (a) the user
+        * doesn't have to store preimage/payment secret information and (b) `ChannelManager` can verify
+        * that the payment secret is valid when the invoice is paid.
+        * Use this variant if you want to pass the `description_hash` to the invoice.
         * 
-        * Returns the PSBT and expected max transaction weight.
+        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
+        * in excess of the current time.
         * 
-        * Returns `Err(())` if the output value is greater than the input value minus required fee,
-        * if a descriptor was duplicated, or if an output descriptor `script_pubkey`
-        * does not match the one we can spend.
+        * You can specify a custom `min_final_cltv_expiry_delta`, or let LDK default it to
+        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]. The provided expiry must be at least [`MIN_FINAL_CLTV_EXPIRY_DELTA`].
+        * Note that LDK will add a buffer of 3 blocks to the delta to allow for up to a few new block
+        * confirmations during routing.
         * 
-        * We do not enforce that outputs meet the dust limit or that any output scripts are standard.
+        * [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: crate::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
         */
-       public static Result_C2Tuple_CVec_u8Zu64ZNoneZ SpendableOutputDescriptor_create_spendable_outputs_psbt(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_u32Z locktime) {
-               long ret = bindings.SpendableOutputDescriptor_create_spendable_outputs_psbt(InternalUtils.encodeUint64Array(InternalUtils.mapArray(descriptors, descriptors_conv_27 => descriptors_conv_27.ptr)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(outputs, outputs_conv_7 => outputs_conv_7.ptr)), InternalUtils.encodeUint8Array(change_destination_script), feerate_sat_per_1000_weight, locktime.ptr);
-               GC.KeepAlive(descriptors);
-               GC.KeepAlive(outputs);
-               GC.KeepAlive(change_destination_script);
-               GC.KeepAlive(feerate_sat_per_1000_weight);
-               GC.KeepAlive(locktime);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Sha256 description_hash, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+               long ret = bindings.create_invoice_from_channelmanager_with_description_hash(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, description_hash.ptr, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
+               GC.KeepAlive(channelmanager);
+               GC.KeepAlive(node_signer);
+               GC.KeepAlive(logger);
+               GC.KeepAlive(network);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(description_hash);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_CVec_u8Zu64ZNoneZ ret_hu_conv = Result_C2Tuple_CVec_u8Zu64ZNoneZ.constr_from_ptr(ret);
-               foreach (SpendableOutputDescriptor descriptors_conv_27 in descriptors) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(descriptors_conv_27); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(locktime); };
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                return ret_hu_conv;
        }
 
        /**
-        * Creates an [`OnionMessage`] with the given `contents` for sending to the destination of
-        * `path`, first calling [`Destination::resolve`] on `path.destination` with the given
-        * [`ReadOnlyNetworkGraph`].
-        * 
-        * Returns the node id of the peer to send the message to, the message itself, and any addresses
-        * needed to connect to the first node.
-        * 
-        * Note that reply_path (or a relevant inner pointer) may be NULL or all-0s to represent None
-        */
-       public static Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message_resolving_destination(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.ReadOnlyNetworkGraph network_graph, org.ldk.structs.OnionMessagePath path, org.ldk.structs.OnionMessageContents contents, org.ldk.structs.BlindedPath reply_path) {
-               long ret = bindings.create_onion_message_resolving_destination(entropy_source.ptr, node_signer.ptr, node_id_lookup.ptr, network_graph.ptr, path.ptr, contents.ptr, reply_path == null ? 0 : reply_path.ptr);
-               GC.KeepAlive(entropy_source);
-               GC.KeepAlive(node_signer);
-               GC.KeepAlive(node_id_lookup);
-               GC.KeepAlive(network_graph);
-               GC.KeepAlive(path);
-               GC.KeepAlive(contents);
-               GC.KeepAlive(reply_path);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ ret_hu_conv = Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_lookup); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(path); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(reply_path); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates an [`OnionMessage`] with the given `contents` for sending to the destination of
-        * `path`.
-        * 
-        * Returns the node id of the peer to send the message to, the message itself, and any addresses
-        * needed to connect to the first node.
-        * 
-        * Returns [`SendError::UnresolvedIntroductionNode`] if:
-        * - `destination` contains a blinded path with an [`IntroductionNode::DirectedShortChannelId`],
-        * - unless it can be resolved by [`NodeIdLookUp::next_node_id`].
-        * Use [`create_onion_message_resolving_destination`] instead to resolve the introduction node
-        * first with a [`ReadOnlyNetworkGraph`].
-        * 
-        * Note that reply_path (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * See [`create_invoice_from_channelmanager_with_description_hash`]
+        * This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
+        * available and the current time is supplied by the caller.
         */
-       public static Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.OnionMessagePath path, org.ldk.structs.OnionMessageContents contents, org.ldk.structs.BlindedPath reply_path) {
-               long ret = bindings.create_onion_message(entropy_source.ptr, node_signer.ptr, node_id_lookup.ptr, path.ptr, contents.ptr, reply_path == null ? 0 : reply_path.ptr);
-               GC.KeepAlive(entropy_source);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Sha256 description_hash, long duration_since_epoch, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+               long ret = bindings.create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, description_hash.ptr, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
+               GC.KeepAlive(channelmanager);
                GC.KeepAlive(node_signer);
-               GC.KeepAlive(node_id_lookup);
-               GC.KeepAlive(path);
-               GC.KeepAlive(contents);
-               GC.KeepAlive(reply_path);
+               GC.KeepAlive(logger);
+               GC.KeepAlive(network);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(description_hash);
+               GC.KeepAlive(duration_since_epoch);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ ret_hu_conv = Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_lookup); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(path); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(reply_path); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                return ret_hu_conv;
        }
 
        /**
-        * Decode one layer of an incoming [`OnionMessage`].
-        * 
-        * Returns either the next layer of the onion for forwarding or the decrypted content for the
-        * receiver.
+        * See [`create_invoice_from_channelmanager`]
+        * This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
+        * available and the current time is supplied by the caller.
         */
-       public static Result_PeeledOnionNoneZ peel_onion_message(org.ldk.structs.OnionMessage msg, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.structs.CustomOnionMessageHandler custom_handler) {
-               long ret = bindings.peel_onion_message(msg.ptr, node_signer.ptr, logger.ptr, custom_handler.ptr);
-               GC.KeepAlive(msg);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, string description, long duration_since_epoch, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+               long ret = bindings.create_invoice_from_channelmanager_and_duration_since_epoch(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, InternalUtils.encodeString(description), duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
+               GC.KeepAlive(channelmanager);
                GC.KeepAlive(node_signer);
                GC.KeepAlive(logger);
-               GC.KeepAlive(custom_handler);
+               GC.KeepAlive(network);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(description);
+               GC.KeepAlive(duration_since_epoch);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PeeledOnionNoneZ ret_hu_conv = Result_PeeledOnionNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(custom_handler); };
                return ret_hu_conv;
        }
 
        /**
-        * Returns whether `tlv_type` corresponds to a TLV record for Offers.
-        */
-       public static bool OffersMessage_is_known_type(long tlv_type) {
-               bool ret = bindings.OffersMessage_is_known_type(tlv_type);
-               GC.KeepAlive(tlv_type);
-               return ret;
-       }
-
-       /**
-        * Create a one-hop blinded path for a payment.
+        * See [`create_invoice_from_channelmanager_and_duration_since_epoch`]
+        * This version allows for providing a custom [`PaymentHash`] for the invoice.
+        * This may be useful if you're building an on-chain swap or involving another protocol where
+        * the payment hash is also involved outside the scope of lightning.
         */
-       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ BlindedPath_one_hop_for_payment(byte[] payee_node_id, org.ldk.structs.ReceiveTlvs payee_tlvs, short min_final_cltv_expiry_delta, org.ldk.structs.EntropySource entropy_source) {
-               long ret = bindings.BlindedPath_one_hop_for_payment(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payee_node_id, 33)), payee_tlvs.ptr, min_final_cltv_expiry_delta, entropy_source.ptr);
-               GC.KeepAlive(payee_node_id);
-               GC.KeepAlive(payee_tlvs);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
-               GC.KeepAlive(entropy_source);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payee_tlvs); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Create a blinded path for a payment, to be forwarded along `intermediate_nodes`.
-        * 
-        * Errors if:
-        * a provided node id is invalid
-        * [`BlindedPayInfo`] calculation results in an integer overflow
-        * any unknown features are required in the provided [`ForwardTlvs`]
-        * 
-        * [`ForwardTlvs`]: crate::blinded_path::payment::ForwardTlvs
-        */
-       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ BlindedPath_new_for_payment(ForwardNode[] intermediate_nodes, byte[] payee_node_id, org.ldk.structs.ReceiveTlvs payee_tlvs, long htlc_maximum_msat, short min_final_cltv_expiry_delta, org.ldk.structs.EntropySource entropy_source) {
-               long ret = bindings.BlindedPath_new_for_payment(InternalUtils.encodeUint64Array(InternalUtils.mapArray(intermediate_nodes, intermediate_nodes_conv_13 => intermediate_nodes_conv_13.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payee_node_id, 33)), payee_tlvs.ptr, htlc_maximum_msat, min_final_cltv_expiry_delta, entropy_source.ptr);
-               GC.KeepAlive(intermediate_nodes);
-               GC.KeepAlive(payee_node_id);
-               GC.KeepAlive(payee_tlvs);
-               GC.KeepAlive(htlc_maximum_msat);
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, string description, long duration_since_epoch, int invoice_expiry_delta_secs, byte[] payment_hash, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+               long ret = bindings.create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, InternalUtils.encodeString(description), duration_since_epoch, invoice_expiry_delta_secs, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), min_final_cltv_expiry_delta.ptr);
+               GC.KeepAlive(channelmanager);
+               GC.KeepAlive(node_signer);
+               GC.KeepAlive(logger);
+               GC.KeepAlive(network);
+               GC.KeepAlive(amt_msat);
+               GC.KeepAlive(description);
+               GC.KeepAlive(duration_since_epoch);
+               GC.KeepAlive(invoice_expiry_delta_secs);
+               GC.KeepAlive(payment_hash);
                GC.KeepAlive(min_final_cltv_expiry_delta);
-               GC.KeepAlive(entropy_source);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
-               foreach (ForwardNode intermediate_nodes_conv_13 in intermediate_nodes) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(intermediate_nodes_conv_13); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payee_tlvs); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Read a PathFailure from a byte array, created by PathFailure_write
-        */
-       public static Result_COption_PathFailureZDecodeErrorZ PathFailure_read(byte[] ser) {
-               long ret = bindings.PathFailure_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_PathFailureZDecodeErrorZ ret_hu_conv = Result_COption_PathFailureZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Read a ClosureReason from a byte array, created by ClosureReason_write
-        */
-       public static Result_COption_ClosureReasonZDecodeErrorZ ClosureReason_read(byte[] ser) {
-               long ret = bindings.ClosureReason_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Read a HTLCDestination from a byte array, created by HTLCDestination_write
-        */
-       public static Result_COption_HTLCDestinationZDecodeErrorZ HTLCDestination_read(byte[] ser) {
-               long ret = bindings.HTLCDestination_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_HTLCDestinationZDecodeErrorZ ret_hu_conv = Result_COption_HTLCDestinationZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Read a Event from a byte array, created by Event_write
-        */
-       public static Result_COption_EventZDecodeErrorZ Event_read(byte[] ser) {
-               long ret = bindings.Event_read(InternalUtils.encodeUint8Array(ser));
-               GC.KeepAlive(ser);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
                return ret_hu_conv;
        }
 
@@ -967,8 +896,8 @@ public class UtilMethods {
         * Will always succeed unless the invoice has an amount specified, in which case
         * [`payment_parameters_from_invoice`] should be used.
         * 
-        * [`ChannelManager::send_payment`]: lightning::ln::channelmanager::ChannelManager::send_payment
-        * [`ChannelManager::send_preflight_probes`]: lightning::ln::channelmanager::ChannelManager::send_preflight_probes
+        * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
+        * [`ChannelManager::send_preflight_probes`]: crate::ln::channelmanager::ChannelManager::send_preflight_probes
         */
        public static Result_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ payment_parameters_from_zero_amount_invoice(org.ldk.structs.Bolt11Invoice invoice, long amount_msat) {
                long ret = bindings.payment_parameters_from_zero_amount_invoice(invoice.ptr, amount_msat);
@@ -990,8 +919,8 @@ public class UtilMethods {
         * Will always succeed unless the invoice has no amount specified, in which case
         * [`payment_parameters_from_zero_amount_invoice`] should be used.
         * 
-        * [`ChannelManager::send_payment`]: lightning::ln::channelmanager::ChannelManager::send_payment
-        * [`ChannelManager::send_preflight_probes`]: lightning::ln::channelmanager::ChannelManager::send_preflight_probes
+        * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
+        * [`ChannelManager::send_preflight_probes`]: crate::ln::channelmanager::ChannelManager::send_preflight_probes
         */
        public static Result_C3Tuple_ThirtyTwoBytesRecipientOnionFieldsRouteParametersZNoneZ payment_parameters_from_invoice(org.ldk.structs.Bolt11Invoice invoice) {
                long ret = bindings.payment_parameters_from_invoice(invoice.ptr);
@@ -1003,292 +932,298 @@ public class UtilMethods {
        }
 
        /**
-        * Utility to create an invoice that can be paid to one of multiple nodes, or a \"phantom invoice.\"
-        * See [`PhantomKeysManager`] for more information on phantom node payments.
-        * 
-        * `phantom_route_hints` parameter:
-        * Contains channel info for all nodes participating in the phantom invoice
-        * Entries are retrieved from a call to [`ChannelManager::get_phantom_route_hints`] on each
-        * participating node
-        * It is fine to cache `phantom_route_hints` and reuse it across invoices, as long as the data is
-        * updated when a channel becomes disabled or closes
-        * Note that if too many channels are included in [`PhantomRouteHints::channels`], the invoice
-        * may be too long for QR code scanning. To fix this, `PhantomRouteHints::channels` may be pared
-        * down
-        * 
-        * `payment_hash` can be specified if you have a specific need for a custom payment hash (see the difference
-        * between [`ChannelManager::create_inbound_payment`] and [`ChannelManager::create_inbound_payment_for_hash`]).
-        * If `None` is provided for `payment_hash`, then one will be created.
-        * 
-        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
-        * in excess of the current time.
-        * 
-        * `duration_since_epoch` is the current time since epoch in seconds.
-        * 
-        * You can specify a custom `min_final_cltv_expiry_delta`, or let LDK default it to
-        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]. The provided expiry must be at least [`MIN_FINAL_CLTV_EXPIRY_DELTA`] - 3.
-        * Note that LDK will add a buffer of 3 blocks to the delta to allow for up to a few new block
-        * confirmations during routing.
-        * 
-        * Note that the provided `keys_manager`'s `NodeSigner` implementation must support phantom
-        * invoices in its `sign_invoice` implementation ([`PhantomKeysManager`] satisfies this
-        * requirement).
+        * Read a NetworkUpdate from a byte array, created by NetworkUpdate_write
+        */
+       public static Result_COption_NetworkUpdateZDecodeErrorZ NetworkUpdate_read(byte[] ser) {
+               long ret = bindings.NetworkUpdate_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Verifies the signature of a [`NodeAnnouncement`].
         * 
-        * [`PhantomKeysManager`]: lightning::sign::PhantomKeysManager
-        * [`ChannelManager::get_phantom_route_hints`]: lightning::ln::channelmanager::ChannelManager::get_phantom_route_hints
-        * [`ChannelManager::create_inbound_payment`]: lightning::ln::channelmanager::ChannelManager::create_inbound_payment
-        * [`ChannelManager::create_inbound_payment_for_hash`]: lightning::ln::channelmanager::ChannelManager::create_inbound_payment_for_hash
-        * [`PhantomRouteHints::channels`]: lightning::ln::channelmanager::PhantomRouteHints::channels
-        * [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
+        * Returns an error if it is invalid.
+        */
+       public static Result_NoneLightningErrorZ verify_node_announcement(org.ldk.structs.NodeAnnouncement msg) {
+               long ret = bindings.verify_node_announcement(msg.ptr);
+               GC.KeepAlive(msg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Verifies all signatures included in a [`ChannelAnnouncement`].
         * 
-        * This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
-        * available and the current time is supplied by the caller.
+        * Returns an error if one of the signatures is invalid.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, string description, int invoice_expiry_delta_secs, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
-               long ret = bindings.create_phantom_invoice(amt_msat.ptr, payment_hash.ptr, InternalUtils.encodeString(description), invoice_expiry_delta_secs, InternalUtils.encodeUint64Array(InternalUtils.mapArray(phantom_route_hints, phantom_route_hints_conv_19 => phantom_route_hints_conv_19.ptr)), entropy_source.ptr, node_signer.ptr, logger.ptr, network, min_final_cltv_expiry_delta.ptr, duration_since_epoch);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(payment_hash);
-               GC.KeepAlive(description);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(phantom_route_hints);
-               GC.KeepAlive(entropy_source);
-               GC.KeepAlive(node_signer);
-               GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
-               GC.KeepAlive(duration_since_epoch);
+       public static Result_NoneLightningErrorZ verify_channel_announcement(org.ldk.structs.ChannelAnnouncement msg) {
+               long ret = bindings.verify_channel_announcement(msg.ptr);
+               GC.KeepAlive(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_hash); };
-               foreach (PhantomRouteHints phantom_route_hints_conv_19 in phantom_route_hints) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(phantom_route_hints_conv_19); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
+               Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                return ret_hu_conv;
        }
 
        /**
-        * Utility to create an invoice that can be paid to one of multiple nodes, or a \"phantom invoice.\"
-        * See [`PhantomKeysManager`] for more information on phantom node payments.
+        * Finds a route from us (payer) to the given target node (payee).
         * 
-        * `phantom_route_hints` parameter:
-        * Contains channel info for all nodes participating in the phantom invoice
-        * Entries are retrieved from a call to [`ChannelManager::get_phantom_route_hints`] on each
-        * participating node
-        * It is fine to cache `phantom_route_hints` and reuse it across invoices, as long as the data is
-        * updated when a channel becomes disabled or closes
-        * Note that the route hints generated from `phantom_route_hints` will be limited to a maximum
-        * of 3 hints to ensure that the invoice can be scanned in a QR code. These hints are selected
-        * in the order that the nodes in `PhantomRouteHints` are specified, selecting one hint per node
-        * until the maximum is hit. Callers may provide as many `PhantomRouteHints::channels` as
-        * desired, but note that some nodes will be trimmed if more than 3 nodes are provided.
+        * If the payee provided features in their invoice, they should be provided via the `payee` field
+        * in the given [`RouteParameters::payment_params`].
+        * Without this, MPP will only be used if the payee's features are available in the network graph.
         * 
-        * `description_hash` is a SHA-256 hash of the description text
+        * Private routing paths between a public node and the target may be included in the `payee` field
+        * of [`RouteParameters::payment_params`].
         * 
-        * `payment_hash` can be specified if you have a specific need for a custom payment hash (see the difference
-        * between [`ChannelManager::create_inbound_payment`] and [`ChannelManager::create_inbound_payment_for_hash`]).
-        * If `None` is provided for `payment_hash`, then one will be created.
+        * If some channels aren't announced, it may be useful to fill in `first_hops` with the results
+        * from [`ChannelManager::list_usable_channels`]. If it is filled in, the view of these channels
+        * from `network_graph` will be ignored, and only those in `first_hops` will be used.
         * 
-        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
-        * in excess of the current time.
+        * The fees on channels from us to the next hop are ignored as they are assumed to all be equal.
+        * However, the enabled/disabled bit on such channels as well as the `htlc_minimum_msat` /
+        * `htlc_maximum_msat` *are* checked as they may change based on the receiving node.
         * 
-        * `duration_since_epoch` is the current time since epoch in seconds.
+        * # Panics
         * 
-        * Note that the provided `keys_manager`'s `NodeSigner` implementation must support phantom
-        * invoices in its `sign_invoice` implementation ([`PhantomKeysManager`] satisfies this
-        * requirement).
+        * Panics if first_hops contains channels without `short_channel_id`s;
+        * [`ChannelManager::list_usable_channels`] will never include such channels.
         * 
-        * [`PhantomKeysManager`]: lightning::sign::PhantomKeysManager
-        * [`ChannelManager::get_phantom_route_hints`]: lightning::ln::channelmanager::ChannelManager::get_phantom_route_hints
-        * [`ChannelManager::create_inbound_payment`]: lightning::ln::channelmanager::ChannelManager::create_inbound_payment
-        * [`ChannelManager::create_inbound_payment_for_hash`]: lightning::ln::channelmanager::ChannelManager::create_inbound_payment_for_hash
-        * [`PhantomRouteHints::channels`]: lightning::ln::channelmanager::PhantomRouteHints::channels
+        * [`ChannelManager::list_usable_channels`]: crate::ln::channelmanager::ChannelManager::list_usable_channels
+        * [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
+        * [`NetworkGraph`]: crate::routing::gossip::NetworkGraph
         * 
-        * This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
-        * available and the current time is supplied by the caller.
+        * Note that first_hops (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, int invoice_expiry_delta_secs, org.ldk.structs.Sha256 description_hash, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
-               long ret = bindings.create_phantom_invoice_with_description_hash(amt_msat.ptr, payment_hash.ptr, invoice_expiry_delta_secs, description_hash.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(phantom_route_hints, phantom_route_hints_conv_19 => phantom_route_hints_conv_19.ptr)), entropy_source.ptr, node_signer.ptr, logger.ptr, network, min_final_cltv_expiry_delta.ptr, duration_since_epoch);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(payment_hash);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(description_hash);
-               GC.KeepAlive(phantom_route_hints);
-               GC.KeepAlive(entropy_source);
-               GC.KeepAlive(node_signer);
+       public static Result_RouteLightningErrorZ find_route(byte[] our_node_pubkey, org.ldk.structs.RouteParameters route_params, org.ldk.structs.NetworkGraph network_graph, ChannelDetails[] first_hops, org.ldk.structs.Logger logger, org.ldk.structs.ScoreLookUp scorer, org.ldk.structs.ProbabilisticScoringFeeParameters score_params, byte[] random_seed_bytes) {
+               long ret = bindings.find_route(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(our_node_pubkey, 33)), route_params.ptr, network_graph.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(first_hops, first_hops_conv_16 => first_hops_conv_16.ptr)), logger.ptr, scorer.ptr, score_params.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(random_seed_bytes, 32)));
+               GC.KeepAlive(our_node_pubkey);
+               GC.KeepAlive(route_params);
+               GC.KeepAlive(network_graph);
+               GC.KeepAlive(first_hops);
                GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
-               GC.KeepAlive(duration_since_epoch);
+               GC.KeepAlive(scorer);
+               GC.KeepAlive(score_params);
+               GC.KeepAlive(random_seed_bytes);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(payment_hash); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(description_hash); };
-               foreach (PhantomRouteHints phantom_route_hints_conv_19 in phantom_route_hints) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(phantom_route_hints_conv_19); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
+               Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(route_params); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
+               if (first_hops != null) { foreach (ChannelDetails first_hops_conv_16 in first_hops) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(first_hops_conv_16); }; } };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(scorer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(score_params); };
                return ret_hu_conv;
        }
 
        /**
-        * Utility to construct an invoice. Generally, unless you want to do something like a custom
-        * cltv_expiry, this is what you should be using to create an invoice. The reason being, this
-        * method stores the invoice's payment secret and preimage in `ChannelManager`, so (a) the user
-        * doesn't have to store preimage/payment secret information and (b) `ChannelManager` can verify
-        * that the payment secret is valid when the invoice is paid.
-        * 
-        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
-        * in excess of the current time.
-        * 
-        * You can specify a custom `min_final_cltv_expiry_delta`, or let LDK default it to
-        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]. The provided expiry must be at least [`MIN_FINAL_CLTV_EXPIRY_DELTA`].
-        * Note that LDK will add a buffer of 3 blocks to the delta to allow for up to a few new block
-        * confirmations during routing.
+        * Construct a route from us (payer) to the target node (payee) via the given hops (which should
+        * exclude the payer, but include the payee). This may be useful, e.g., for probing the chosen path.
         * 
-        * [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
+        * Re-uses logic from `find_route`, so the restrictions described there also apply here.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, string description, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
-               long ret = bindings.create_invoice_from_channelmanager(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, InternalUtils.encodeString(description), invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
-               GC.KeepAlive(channelmanager);
-               GC.KeepAlive(node_signer);
+       public static Result_RouteLightningErrorZ build_route_from_hops(byte[] our_node_pubkey, byte[][] hops, org.ldk.structs.RouteParameters route_params, org.ldk.structs.NetworkGraph network_graph, org.ldk.structs.Logger logger, byte[] random_seed_bytes) {
+               long ret = bindings.build_route_from_hops(InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(our_node_pubkey, 33)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(hops, hops_conv_8 => InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(hops_conv_8, 33)))), route_params.ptr, network_graph.ptr, logger.ptr, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(random_seed_bytes, 32)));
+               GC.KeepAlive(our_node_pubkey);
+               GC.KeepAlive(hops);
+               GC.KeepAlive(route_params);
+               GC.KeepAlive(network_graph);
                GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(description);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(random_seed_bytes);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
+               Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(route_params); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
                return ret_hu_conv;
        }
 
        /**
-        * Utility to construct an invoice. Generally, unless you want to do something like a custom
-        * cltv_expiry, this is what you should be using to create an invoice. The reason being, this
-        * method stores the invoice's payment secret and preimage in `ChannelManager`, so (a) the user
-        * doesn't have to store preimage/payment secret information and (b) `ChannelManager` can verify
-        * that the payment secret is valid when the invoice is paid.
-        * Use this variant if you want to pass the `description_hash` to the invoice.
+        * Creates an unsigned [`Psbt`] which spends the given descriptors to
+        * the given outputs, plus an output to the given change destination (if sufficient
+        * change value remains). The PSBT will have a feerate, at least, of the given value.
         * 
-        * `invoice_expiry_delta_secs` describes the number of seconds that the invoice is valid for
-        * in excess of the current time.
+        * The `locktime` argument is used to set the transaction's locktime. If `None`, the
+        * transaction will have a locktime of 0. It it recommended to set this to the current block
+        * height to avoid fee sniping, unless you have some specific reason to use a different
+        * locktime.
         * 
-        * You can specify a custom `min_final_cltv_expiry_delta`, or let LDK default it to
-        * [`MIN_FINAL_CLTV_EXPIRY_DELTA`]. The provided expiry must be at least [`MIN_FINAL_CLTV_EXPIRY_DELTA`].
-        * Note that LDK will add a buffer of 3 blocks to the delta to allow for up to a few new block
-        * confirmations during routing.
+        * Returns the PSBT and expected max transaction weight.
+        * 
+        * Returns `Err(())` if the output value is greater than the input value minus required fee,
+        * if a descriptor was duplicated, or if an output descriptor `script_pubkey`
+        * does not match the one we can spend.
         * 
-        * [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
+        * We do not enforce that outputs meet the dust limit or that any output scripts are standard.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Sha256 description_hash, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
-               long ret = bindings.create_invoice_from_channelmanager_with_description_hash(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, description_hash.ptr, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
-               GC.KeepAlive(channelmanager);
-               GC.KeepAlive(node_signer);
-               GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(description_hash);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
+       public static Result_C2Tuple_CVec_u8Zu64ZNoneZ SpendableOutputDescriptor_create_spendable_outputs_psbt(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_u32Z locktime) {
+               long ret = bindings.SpendableOutputDescriptor_create_spendable_outputs_psbt(InternalUtils.encodeUint64Array(InternalUtils.mapArray(descriptors, descriptors_conv_27 => descriptors_conv_27.ptr)), InternalUtils.encodeUint64Array(InternalUtils.mapArray(outputs, outputs_conv_7 => outputs_conv_7.ptr)), InternalUtils.encodeUint8Array(change_destination_script), feerate_sat_per_1000_weight, locktime.ptr);
+               GC.KeepAlive(descriptors);
+               GC.KeepAlive(outputs);
+               GC.KeepAlive(change_destination_script);
+               GC.KeepAlive(feerate_sat_per_1000_weight);
+               GC.KeepAlive(locktime);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(description_hash); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
+               Result_C2Tuple_CVec_u8Zu64ZNoneZ ret_hu_conv = Result_C2Tuple_CVec_u8Zu64ZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        /**
-        * See [`create_invoice_from_channelmanager_with_description_hash`]
-        * This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
-        * available and the current time is supplied by the caller.
+        * Returns whether `tlv_type` corresponds to a TLV record for async payment messages.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Sha256 description_hash, long duration_since_epoch, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
-               long ret = bindings.create_invoice_from_channelmanager_with_description_hash_and_duration_since_epoch(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, description_hash.ptr, duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
-               GC.KeepAlive(channelmanager);
+       public static bool AsyncPaymentsMessage_is_known_type(long tlv_type) {
+               bool ret = bindings.AsyncPaymentsMessage_is_known_type(tlv_type);
+               GC.KeepAlive(tlv_type);
+               return ret;
+       }
+
+       /**
+        * Creates an [`OnionMessage`] with the given `contents` for sending to the destination of
+        * `path`, first calling [`Destination::resolve`] on `path.destination` with the given
+        * [`ReadOnlyNetworkGraph`].
+        * 
+        * Returns the node id of the peer to send the message to, the message itself, and any addresses
+        * needed to connect to the first node.
+        * 
+        * Note that reply_path (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public static Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message_resolving_destination(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.ReadOnlyNetworkGraph network_graph, org.ldk.structs.OnionMessagePath path, org.ldk.structs.OnionMessageContents contents, org.ldk.structs.BlindedMessagePath reply_path) {
+               long ret = bindings.create_onion_message_resolving_destination(entropy_source.ptr, node_signer.ptr, node_id_lookup.ptr, network_graph.ptr, path.ptr, contents.ptr, reply_path == null ? 0 : reply_path.ptr);
+               GC.KeepAlive(entropy_source);
                GC.KeepAlive(node_signer);
-               GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(description_hash);
-               GC.KeepAlive(duration_since_epoch);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(node_id_lookup);
+               GC.KeepAlive(network_graph);
+               GC.KeepAlive(path);
+               GC.KeepAlive(contents);
+               GC.KeepAlive(reply_path);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
+               Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ ret_hu_conv = Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(description_hash); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_lookup); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(network_graph); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents); };
                return ret_hu_conv;
        }
 
        /**
-        * See [`create_invoice_from_channelmanager`]
-        * This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
-        * available and the current time is supplied by the caller.
+        * Creates an [`OnionMessage`] with the given `contents` for sending to the destination of
+        * `path`.
+        * 
+        * Returns the node id of the peer to send the message to, the message itself, and any addresses
+        * needed to connect to the first node.
+        * 
+        * Returns [`SendError::UnresolvedIntroductionNode`] if:
+        * - `destination` contains a blinded path with an [`IntroductionNode::DirectedShortChannelId`],
+        * - unless it can be resolved by [`NodeIdLookUp::next_node_id`].
+        * Use [`create_onion_message_resolving_destination`] instead to resolve the introduction node
+        * first with a [`ReadOnlyNetworkGraph`].
+        * 
+        * Note that reply_path (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, string description, long duration_since_epoch, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
-               long ret = bindings.create_invoice_from_channelmanager_and_duration_since_epoch(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, InternalUtils.encodeString(description), duration_since_epoch, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
-               GC.KeepAlive(channelmanager);
+       public static Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ create_onion_message(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.NodeIdLookUp node_id_lookup, org.ldk.structs.OnionMessagePath path, org.ldk.structs.OnionMessageContents contents, org.ldk.structs.BlindedMessagePath reply_path) {
+               long ret = bindings.create_onion_message(entropy_source.ptr, node_signer.ptr, node_id_lookup.ptr, path.ptr, contents.ptr, reply_path == null ? 0 : reply_path.ptr);
+               GC.KeepAlive(entropy_source);
                GC.KeepAlive(node_signer);
-               GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(description);
-               GC.KeepAlive(duration_since_epoch);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(node_id_lookup);
+               GC.KeepAlive(path);
+               GC.KeepAlive(contents);
+               GC.KeepAlive(reply_path);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
+               Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ ret_hu_conv = Result_C3Tuple_PublicKeyOnionMessageCOption_CVec_SocketAddressZZZSendErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_id_lookup); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(contents); };
                return ret_hu_conv;
        }
 
        /**
-        * See [`create_invoice_from_channelmanager_and_duration_since_epoch`]
-        * This version allows for providing a custom [`PaymentHash`] for the invoice.
-        * This may be useful if you're building an on-chain swap or involving another protocol where
-        * the payment hash is also involved outside the scope of lightning.
+        * Decode one layer of an incoming [`OnionMessage`].
+        * 
+        * Returns either the next layer of the onion for forwarding or the decrypted content for the
+        * receiver.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, Currency network, org.ldk.structs.Option_u64Z amt_msat, string description, long duration_since_epoch, int invoice_expiry_delta_secs, byte[] payment_hash, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
-               long ret = bindings.create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash(channelmanager.ptr, node_signer.ptr, logger.ptr, network, amt_msat.ptr, InternalUtils.encodeString(description), duration_since_epoch, invoice_expiry_delta_secs, InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), min_final_cltv_expiry_delta.ptr);
-               GC.KeepAlive(channelmanager);
+       public static Result_PeeledOnionNoneZ peel_onion_message(org.ldk.structs.OnionMessage msg, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.structs.CustomOnionMessageHandler custom_handler) {
+               long ret = bindings.peel_onion_message(msg.ptr, node_signer.ptr, logger.ptr, custom_handler.ptr);
+               GC.KeepAlive(msg);
                GC.KeepAlive(node_signer);
                GC.KeepAlive(logger);
-               GC.KeepAlive(network);
-               GC.KeepAlive(amt_msat);
-               GC.KeepAlive(description);
-               GC.KeepAlive(duration_since_epoch);
-               GC.KeepAlive(invoice_expiry_delta_secs);
-               GC.KeepAlive(payment_hash);
-               GC.KeepAlive(min_final_cltv_expiry_delta);
+               GC.KeepAlive(custom_handler);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_Bolt11InvoiceSignOrCreationErrorZ ret_hu_conv = Result_Bolt11InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channelmanager); };
+               Result_PeeledOnionNoneZ ret_hu_conv = Result_PeeledOnionNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(msg); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(amt_msat); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(min_final_cltv_expiry_delta); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(custom_handler); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Returns whether `tlv_type` corresponds to a TLV record for Offers.
+        */
+       public static bool OffersMessage_is_known_type(long tlv_type) {
+               bool ret = bindings.OffersMessage_is_known_type(tlv_type);
+               GC.KeepAlive(tlv_type);
+               return ret;
+       }
+
+       /**
+        * Read a PathFailure from a byte array, created by PathFailure_write
+        */
+       public static Result_COption_PathFailureZDecodeErrorZ PathFailure_read(byte[] ser) {
+               long ret = bindings.PathFailure_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_PathFailureZDecodeErrorZ ret_hu_conv = Result_COption_PathFailureZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a ClosureReason from a byte array, created by ClosureReason_write
+        */
+       public static Result_COption_ClosureReasonZDecodeErrorZ ClosureReason_read(byte[] ser) {
+               long ret = bindings.ClosureReason_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a HTLCDestination from a byte array, created by HTLCDestination_write
+        */
+       public static Result_COption_HTLCDestinationZDecodeErrorZ HTLCDestination_read(byte[] ser) {
+               long ret = bindings.HTLCDestination_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_HTLCDestinationZDecodeErrorZ ret_hu_conv = Result_COption_HTLCDestinationZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a PaymentFailureReason from a byte array, created by PaymentFailureReason_write
+        */
+       public static Result_COption_PaymentFailureReasonZDecodeErrorZ PaymentFailureReason_read(byte[] ser) {
+               long ret = bindings.PaymentFailureReason_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_PaymentFailureReasonZDecodeErrorZ ret_hu_conv = Result_COption_PaymentFailureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a Event from a byte array, created by Event_write
+        */
+       public static Result_COption_EventZDecodeErrorZ Event_read(byte[] ser) {
+               long ret = bindings.Event_read(InternalUtils.encodeUint8Array(ser));
+               GC.KeepAlive(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index 9749cfa628dca7d03134b31ab044b4798c256d27..d72d551ef2a8fe438175697ba3bfdf0e9ed05b32 100644 (file)
@@ -35,7 +35,6 @@ public class Utxo : CommonBase {
                bindings.Utxo_set_outpoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -91,7 +90,6 @@ public class Utxo : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Utxo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Utxo(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint_arg); };
                return ret_hu_conv;
        }
 
@@ -153,7 +151,6 @@ public class Utxo : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Utxo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Utxo(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint); };
                return ret_hu_conv;
        }
 
index bd6705aee5b9e9b926c85b3b52d563ad6ab01cce..fb7be3d645aacd035850687c3a6603d8c7563dd7 100644 (file)
@@ -41,7 +41,6 @@ public class UtxoLookup : CommonBase {
                        UtxoResult ret = arg.get_utxo(_chain_hash_conv, _short_channel_id);
                                GC.KeepAlive(arg);
                        long result = ret.clone_ptr();
-                       if (impl_holder.held != null) { impl_holder.held.ptrs_to.AddLast(ret); };
                        return result;
                }
        }
index 8dbbc69992e212112e54bd39ec1d77455fd7e26e..a4bc6167ee6367dc3f3dd7ab4cc16eaa3f10d5cd 100644 (file)
@@ -84,7 +84,6 @@ public class UtxoResult : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.UtxoResult ret_hu_conv = org.ldk.structs.UtxoResult.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(a); };
                return ret_hu_conv;
        }
 
index b3bff35fc7d31a2aef616b9a50c11257bbfa3e6d..7f2519b4a9aaef6012ab9fcce2282c31b1996e1e 100644 (file)
@@ -7,8 +7,9 @@ namespace org { namespace ldk { namespace structs {
 
 
 /**
- * An [`InvoiceRequest`] that has been verified by [`InvoiceRequest::verify`] and exposes different
- * ways to respond depending on whether the signing keys were derived.
+ * An [`InvoiceRequest`] that has been verified by [`InvoiceRequest::verify_using_metadata`] or
+ * [`InvoiceRequest::verify_using_recipient_data`] and exposes different ways to respond depending
+ * on whether the signing keys were derived.
  */
 public class VerifiedInvoiceRequest : CommonBase {
        internal VerifiedInvoiceRequest(object _dummy, long ptr) : base(ptr) { }
@@ -35,43 +36,6 @@ public class VerifiedInvoiceRequest : CommonBase {
                bindings.VerifiedInvoiceRequest_set_offer_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
-       }
-
-       /**
-        * Keys used for signing a [`Bolt12Invoice`] if they can be derived.
-        * 
-        * If `Some`, must call [`respond_using_derived_keys`] when responding. Otherwise, call
-        * [`respond_with`].
-        * 
-        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
-        * [`respond_using_derived_keys`]: Self::respond_using_derived_keys
-        * [`respond_with`]: Self::respond_with
-        */
-       public Option_SecretKeyZ get_keys() {
-               long ret = bindings.VerifiedInvoiceRequest_get_keys(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Keys used for signing a [`Bolt12Invoice`] if they can be derived.
-        * 
-        * If `Some`, must call [`respond_using_derived_keys`] when responding. Otherwise, call
-        * [`respond_with`].
-        * 
-        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
-        * [`respond_using_derived_keys`]: Self::respond_using_derived_keys
-        * [`respond_with`]: Self::respond_with
-        */
-       public void set_keys(org.ldk.structs.Option_SecretKeyZ val) {
-               bindings.VerifiedInvoiceRequest_set_keys(this.ptr, val.ptr);
-               GC.KeepAlive(this);
-               GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        internal long clone_ptr() {
@@ -197,20 +161,20 @@ public class VerifiedInvoiceRequest : CommonBase {
         * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
         * recipient privacy by obfuscating its node id.
         */
-       public BlindedPath[] paths() {
+       public BlindedMessagePath[] paths() {
                long ret = bindings.VerifiedInvoiceRequest_paths(this.ptr);
                GC.KeepAlive(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               int ret_conv_13_len = InternalUtils.getArrayLength(ret);
-               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
-               for (int n = 0; n < ret_conv_13_len; n++) {
-                       long ret_conv_13 = InternalUtils.getU64ArrayElem(ret, n);
-                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
-                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.AddLast(this); };
-                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               int ret_conv_20_len = InternalUtils.getArrayLength(ret);
+               BlindedMessagePath[] ret_conv_20_arr = new BlindedMessagePath[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = InternalUtils.getU64ArrayElem(ret, u);
+                       org.ldk.structs.BlindedMessagePath ret_conv_20_hu_conv = null; if (ret_conv_20 < 0 || ret_conv_20 > 4096) { ret_conv_20_hu_conv = new org.ldk.structs.BlindedMessagePath(null, ret_conv_20); }
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.AddLast(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
                }
                bindings.free_buffer(ret);
-               return ret_conv_13_arr;
+               return ret_conv_20_arr;
        }
 
        /**
@@ -337,8 +301,8 @@ public class VerifiedInvoiceRequest : CommonBase {
         * 
         * [`Duration`]: core::time::Duration
         */
-       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with(TwoTuple_BlindedPayInfoBlindedPathZ[] payment_paths, byte[] payment_hash) {
-               long ret = bindings.VerifiedInvoiceRequest_respond_with(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_37 => payment_paths_conv_37.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
+       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with(BlindedPaymentPath[] payment_paths, byte[] payment_hash) {
+               long ret = bindings.VerifiedInvoiceRequest_respond_with(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_20 => payment_paths_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
                GC.KeepAlive(this);
                GC.KeepAlive(payment_paths);
                GC.KeepAlive(payment_hash);
@@ -367,13 +331,15 @@ public class VerifiedInvoiceRequest : CommonBase {
         * # Note
         * 
         * If the originating [`Offer`] was created using [`OfferBuilder::deriving_signing_pubkey`],
-        * then use [`InvoiceRequest::verify`] and [`VerifiedInvoiceRequest`] methods instead.
+        * then first use [`InvoiceRequest::verify_using_metadata`] or
+        * [`InvoiceRequest::verify_using_recipient_data`] and then [`VerifiedInvoiceRequest`] methods
+        * instead.
         * 
         * [`Bolt12Invoice::created_at`]: crate::offers::invoice::Bolt12Invoice::created_at
         * [`OfferBuilder::deriving_signing_pubkey`]: crate::offers::offer::OfferBuilder::deriving_signing_pubkey
         */
-       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with_no_std(TwoTuple_BlindedPayInfoBlindedPathZ[] payment_paths, byte[] payment_hash, long created_at) {
-               long ret = bindings.VerifiedInvoiceRequest_respond_with_no_std(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_37 => payment_paths_conv_37.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), created_at);
+       public Result_InvoiceWithExplicitSigningPubkeyBuilderBolt12SemanticErrorZ respond_with_no_std(BlindedPaymentPath[] payment_paths, byte[] payment_hash, long created_at) {
+               long ret = bindings.VerifiedInvoiceRequest_respond_with_no_std(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_20 => payment_paths_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), created_at);
                GC.KeepAlive(this);
                GC.KeepAlive(payment_paths);
                GC.KeepAlive(payment_hash);
@@ -392,8 +358,8 @@ public class VerifiedInvoiceRequest : CommonBase {
         * 
         * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
         */
-       public Result_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ respond_using_derived_keys(TwoTuple_BlindedPayInfoBlindedPathZ[] payment_paths, byte[] payment_hash) {
-               long ret = bindings.VerifiedInvoiceRequest_respond_using_derived_keys(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_37 => payment_paths_conv_37.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
+       public Result_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ respond_using_derived_keys(BlindedPaymentPath[] payment_paths, byte[] payment_hash) {
+               long ret = bindings.VerifiedInvoiceRequest_respond_using_derived_keys(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_20 => payment_paths_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)));
                GC.KeepAlive(this);
                GC.KeepAlive(payment_paths);
                GC.KeepAlive(payment_hash);
@@ -411,8 +377,8 @@ public class VerifiedInvoiceRequest : CommonBase {
         * 
         * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
         */
-       public Result_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ respond_using_derived_keys_no_std(TwoTuple_BlindedPayInfoBlindedPathZ[] payment_paths, byte[] payment_hash, long created_at) {
-               long ret = bindings.VerifiedInvoiceRequest_respond_using_derived_keys_no_std(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_37 => payment_paths_conv_37.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), created_at);
+       public Result_InvoiceWithDerivedSigningPubkeyBuilderBolt12SemanticErrorZ respond_using_derived_keys_no_std(BlindedPaymentPath[] payment_paths, byte[] payment_hash, long created_at) {
+               long ret = bindings.VerifiedInvoiceRequest_respond_using_derived_keys_no_std(this.ptr, InternalUtils.encodeUint64Array(InternalUtils.mapArray(payment_paths, payment_paths_conv_20 => payment_paths_conv_20.ptr)), InternalUtils.encodeUint8Array(InternalUtils.check_arr_len(payment_hash, 32)), created_at);
                GC.KeepAlive(this);
                GC.KeepAlive(payment_paths);
                GC.KeepAlive(payment_hash);
index 37699b4db98cd36244e6969e0e34a26ec796f05d..de7ae0a42d43200533dda0cdb91c9142d2f16888 100644 (file)
@@ -40,7 +40,6 @@ public class WarningMessage : CommonBase {
                bindings.WarningMessage_set_channel_id(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -81,7 +80,6 @@ public class WarningMessage : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.WarningMessage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.WarningMessage(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(channel_id_arg); };
                return ret_hu_conv;
        }
 
index cc60fa6fd42168fd0cef64ad9fecff26991f7aec..f8210ff0b845ffccf92ac9c067b603a15af33d30 100644 (file)
@@ -145,8 +145,6 @@ public class Watch : CommonBase {
                GC.KeepAlive(monitor);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_ChannelMonitorUpdateStatusNoneZ ret_hu_conv = Result_ChannelMonitorUpdateStatusNoneZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.AddLast(funding_txo); };
-               if (this != null) { this.ptrs_to.AddLast(monitor); };
                return ret_hu_conv;
        }
 
@@ -172,7 +170,6 @@ public class Watch : CommonBase {
                GC.KeepAlive(this);
                GC.KeepAlive(funding_txo);
                GC.KeepAlive(update);
-               if (this != null) { this.ptrs_to.AddLast(funding_txo); };
                if (this != null) { this.ptrs_to.AddLast(update); };
                return ret;
        }
index 70f17e084ced769210afb2bc20d65a8e2c4d1e7c..71887698cee00012996f7019162fc5a932d69677 100644 (file)
@@ -16,6 +16,9 @@ namespace org { namespace ldk { namespace structs {
  * If `block_hash` is `Some`, this indicates the output was created in the corresponding block and
  * may have been spent there. See [`Filter::register_output`] for details.
  * 
+ * Depending on your block source, you may need one or both of either [`Self::outpoint`] or
+ * [`Self::script_pubkey`].
+ * 
  * [`ChannelMonitor`]: channelmonitor::ChannelMonitor
  * [`ChannelMonitor::block_connected`]: channelmonitor::ChannelMonitor::block_connected
  */
@@ -44,7 +47,6 @@ public class WatchedOutput : CommonBase {
                bindings.WatchedOutput_set_block_hash(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -66,7 +68,6 @@ public class WatchedOutput : CommonBase {
                bindings.WatchedOutput_set_outpoint(this.ptr, val.ptr);
                GC.KeepAlive(this);
                GC.KeepAlive(val);
-               if (this != null) { this.ptrs_to.AddLast(val); };
        }
 
        /**
@@ -100,8 +101,6 @@ public class WatchedOutput : CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.WatchedOutput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.WatchedOutput(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(block_hash_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(outpoint_arg); };
                return ret_hu_conv;
        }
 
diff --git a/c_sharp/src/org/ldk/structs/WriteableEcdsaChannelSigner.cs b/c_sharp/src/org/ldk/structs/WriteableEcdsaChannelSigner.cs
deleted file mode 100644 (file)
index 045861d..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-
-using org.ldk.impl;
-using org.ldk.enums;
-using org.ldk.util;
-using System;
-
-namespace org { namespace ldk { namespace structs {
-
-
-
-/** An implementation of WriteableEcdsaChannelSigner */
-public interface WriteableEcdsaChannelSignerInterface {
-       /**Serialize the object into a byte array
-        */
-       byte[] write();
-}
-
-/**
- * A writeable signer.
- * 
- * There will always be two instances of a signer per channel, one occupied by the
- * [`ChannelManager`] and another by the channel's [`ChannelMonitor`].
- * 
- * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
- * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
- */
-public class WriteableEcdsaChannelSigner : CommonBase {
-       internal bindings.LDKWriteableEcdsaChannelSigner bindings_instance;
-       internal long instance_idx;
-
-       internal WriteableEcdsaChannelSigner(object _dummy, long ptr) : base(ptr) { bindings_instance = null; }
-       ~WriteableEcdsaChannelSigner() {
-               if (ptr != 0) { bindings.WriteableEcdsaChannelSigner_free(ptr); }
-       }
-
-       private class LDKWriteableEcdsaChannelSignerHolder { internal WriteableEcdsaChannelSigner held; }
-       private class LDKWriteableEcdsaChannelSignerImpl : bindings.LDKWriteableEcdsaChannelSigner {
-               internal LDKWriteableEcdsaChannelSignerImpl(WriteableEcdsaChannelSignerInterface arg, LDKWriteableEcdsaChannelSignerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
-               private WriteableEcdsaChannelSignerInterface arg;
-               private LDKWriteableEcdsaChannelSignerHolder impl_holder;
-               public long write() {
-                       byte[] ret = arg.write();
-                               GC.KeepAlive(arg);
-                       long result = InternalUtils.encodeUint8Array(ret);
-                       return result;
-               }
-       }
-
-       /** Creates a new instance of WriteableEcdsaChannelSigner from a given implementation */
-       public static WriteableEcdsaChannelSigner new_impl(WriteableEcdsaChannelSignerInterface arg, EcdsaChannelSignerInterface ecdsaChannelSigner_impl, ChannelSignerInterface channelSigner_impl, ChannelPublicKeys pubkeys) {
-               LDKWriteableEcdsaChannelSignerHolder impl_holder = new LDKWriteableEcdsaChannelSignerHolder();
-               LDKWriteableEcdsaChannelSignerImpl impl = new LDKWriteableEcdsaChannelSignerImpl(arg, impl_holder);
-               EcdsaChannelSigner ecdsaChannelSigner = EcdsaChannelSigner.new_impl(ecdsaChannelSigner_impl, channelSigner_impl, pubkeys);
-               ChannelSigner channelSigner = ChannelSigner.new_impl(channelSigner_impl, pubkeys);
-               long[] ptr_idx = bindings.LDKWriteableEcdsaChannelSigner_new(impl, ecdsaChannelSigner.instance_idx, channelSigner.instance_idx, pubkeys.clone_ptr());
-
-               impl_holder.held = new WriteableEcdsaChannelSigner(null, ptr_idx[0]);
-               impl_holder.held.instance_idx = ptr_idx[1];
-               impl_holder.held.bindings_instance = impl;
-               impl_holder.held.ptrs_to.AddLast(ecdsaChannelSigner);
-               impl_holder.held.ptrs_to.AddLast(channelSigner);
-               return impl_holder.held;
-       }
-
-       /**
-        * Serialize the object into a byte array
-        */
-       public byte[] write() {
-               long ret = bindings.WriteableEcdsaChannelSigner_write(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               byte[] ret_conv = InternalUtils.decodeUint8Array(ret);
-               return ret_conv;
-       }
-
-       internal long clone_ptr() {
-               long ret = bindings.WriteableEcdsaChannelSigner_clone_ptr(this.ptr);
-               GC.KeepAlive(this);
-               return ret;
-       }
-
-       /**
-        * Creates a copy of a WriteableEcdsaChannelSigner
-        */
-       public WriteableEcdsaChannelSigner clone() {
-               long ret = bindings.WriteableEcdsaChannelSigner_clone(this.ptr);
-               GC.KeepAlive(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               WriteableEcdsaChannelSigner ret_hu_conv = new WriteableEcdsaChannelSigner(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
-               return ret_hu_conv;
-       }
-
-}
-} } }